UBIFS это новая файловая система для NAND и NOR носителей. Подробней она описана здесь.Что бы протестировать возможности сей прекрасной ФС нужно:
— включить поддержку оной в ядре (Device Drivers ->
Memory Technology Device (MTD) Supportas -> Enable UBI — Unsorted block images )
( File Systems -> Miscellaneous filesystemsas -> UBIFS file system support)
— скачать снимок mtd-utils с git (здесь) и собрать из исходников Для компиляции mtd-utils потребуются пакеты: libacl-devel и zlib-devel, а так же библиотеки zlib, lzo и uuid.Для Ubuntu: sudo apt-get install libacl1-dev zlib1g-dev liblzo2-dev uuid-dev
Но прежде чем мы сможем воспользоватся всеми преимуществами данной файловой
системы, нужно внести некоторые изменения в исходники ядра. На плате которую я использую для экспериментов (BeagleBone Rev.A3) нет распаяной NAND flash, потому мы ее подключим. Рассказ о подключение не столь интересен, но нам нужно поправить загрузочную конфигурацию ядра, вся нужна информация расположенна в файле
/linux-3.2.0-patched/arch/arm/mach-omap2/board-am335xevm.c:
/* Make some additions to configs */
/* Beaglebone Rev A3 and after */
static struct evm_dev_cfg beaglebone_dev_cfg[] = {
{tps65217_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{ehrpwm_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{uart1_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{gpio_led_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{evm_nand_init, DEV_ON_BASEBOARD, PROFILE_NONE},
{NULL, 0, 0},
};
Тут diff файл, а тут про подключение nand flash к beaglebone. как видно тут в список инициализации добавлена nand(а так же UART1, ehrpwm), причем сменился ее тип.
Кстати nand flash в отличии от блочных устройств имеет софтварное разбиение на разделы и эти разделы захардкорженны
в этом же файле:
/* NAND partition information */
static struct mtd_partition am335x_nand_partitions[] = {
/* All the partition sizes are listed in terms of NAND block size */
{
.name = "SPL",
.offset = 0, /* Offset = 0x0 */
.size = SZ_128K,
},
{
.name = "SPL.backup1",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */
.size = SZ_128K,
},
{
.name = "SPL.backup2",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x40000 */
.size = SZ_128K,
},
{
.name = "SPL.backup3",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */
.size = SZ_128K,
},
{
.name = "U-Boot",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
.size = 15 * SZ_128K,
},
{
.name = "U-Boot Env",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */
.size = 1 * SZ_128K,
},
{
.name = "Kernel",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */
.size = 40 * SZ_128K,
},
{
.name = "File System",
.offset = MTDPART_OFS_APPEND, /* Offset = 0x780000 */
.size = MTDPART_SIZ_FULL,
},
};
Ну и на закуску, два различных способа «залить» информацию во флеш описанны
здесь.