UBIFS |
Предыдущая Содержание Следующая |
|
http://www.linux-mtd.infradead.org/faq/ubifs.html#L_mkfubifs git://git.infradead.org/mtd-utils.git http://97.74.126.48/plugwiki/index.php/Enabling_UBIFS
В ядре должна быть включена поддержка UBIFS:
Device Drivers ---> <*> Memory Technology Device (MTD) support ---> UBI - Unsorted block images ---> <*> Enable UBI
File systems ---> [*] Miscellaneous filesystems (NEW) ---> <*> UBIFS file system support
Строка запуска Linux:
CONFIG_CMDLINE=”console=ttyS0,115200 ubi.mtd=rootfs root=ubi:rootfs rootfstype=ubifs rootflags=bulk_read,chk_data_crc rw”
Установить git:
sudo apt-get install git-core
Скачать исходники, находясь в рабочей директории:
git clone git://git.infradead.org/mtd-utils
Инсталировать пакеты для компиляции:
sudo apt-get install liblzo2-dev uuid-dev zlib1g-dev
(для Fedora: проинсталировать zlib-devel, lzo-devel и e2fsprogs-devel)
Собрать утилиты.
cd mtd-utils make Сборка образаКомпиляция образа из готовой файловой системы для k9k8g08u0a производится следующим скриптом:
#!/bin/sh
mkfs.ubifs -e 0x1F800 -c 65536 -m 2048 -x lzo -r root-fs -o rootfs.ubifs ubinize -p 128KiB -m 2048 -s 512 -o rootfs_ubi.bin ubifs.cfg rm -f rootfs.ubifs
Содержимое файла ubifs.cfg:
[ubifs] mode=ubi image=rootfs.ubifs vol_id=0 vol_size=32MiB vol_type=dynamic vol_name=rootfs vol_flags=autoresize
Файл для прошивки: rootfs_ubi.bin.
•-r root-fs: говорит mkfs.ubifs создать UBIFS-образ, который был бы идентичен содержимому локальной директории rootfs; •-m 2048: говорит mkfs.ubifs, что минимальный размер единицы ввода/вывода flash этого UBIFS-образа создаётся 2048 байт (NAND page в этом случае); •-e 0x1F800: размер логического eraseblock этого UBI раздела для которого создаётся образ; •-c 65536: определяет максимальный размер файловой системы в логических eraseblocks; это означает, что будет возможно использовать результирующую файловую систему на разделах до этого размера (меньше или равно); так что в этом частном случае, результирующая FS может быть до примерно 8GiB (129024 умножить на 65536); •-p 128KiB: говорит ubinize, что размер физического eraseblock микросхемы flash этого UBI-образа создается для 128KiB (128 * 1024 bytes); •-s 512: говорит ubinize, что эта flash поддерживает sub-pages и размер sub-page равен 512 байт; ubinize возьмёт это в расчёт и установит этот VID заголовок, чтобы установить NAND; •vol_size: минимальный размер создаваемой файловой системы. Должен быть минимум на 3% меньше реального для того, чтобы осталось место хранения информации о плохих секторах; •vol_name: имя раздела, должно соответствовать имени раздела, заданного в таблице в ядре Linux; •vol_flags=autoresize: при первом запуске файловая система будет расширена до максимального имеющегося объёма; Определение параметровК сожалению, рекомендуемая утилита mtdinfo не даёт требуемой информации, а в документации на Nandflash её может не оказаться, поэтому сначала производится сборка с какими-либо примерно подходящими параметрами. Например, на данной плате от mtdinfo была получена следующая информация:
mtd0 Name: Partition 1 Type: nand Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 2 (262144 bytes, 256.0 KiB) Minimum input/output unit size: 2048 bytes Sub-page size: unknown Bad blocks are allowed: true Device is writable: true
mtd1 Name: Partition 2 Type: nand Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 8190 (1073479680 bytes, 1023.8 MiB) Minimum input/output unit size: 2048 bytes Sub-page size: unknown Bad blocks are allowed: true Device is writable: true
PEB = Physical Erase Block size = Физический размер блока стирания. LEB = Logical Erase Block size = Логический размер блока стирания.
Erase block size (PEB) берётся из документации на Nandflash, обычно 2048. Значение параметра -е (LEB): •В случае NOR flash, которая имеет минимальный размер единицы ввода/вывода 1 byte, LEB = PEB - 128; •В случае NAND flash, которая не имеет sub-pages (например, MLC NAND), O = 2 NAND pages, т.е. 4KiB в случае 2KiB NAND page и 1KiB в случае 512 bytes NAND page; NAND flash with 2048 byte NAND page and no sub-page: LEB = PEB - 4096. В случае NAND flash, которая имеет sub-pages, UBI оптимизирует это на уровне flash и помещает заголовки EC и VID в той же самой NAND page, но разных sub-pages; в этом случае O равно только одной NAND page; •NAND flash with 512 byte NAND page and 265 byte sub-page: LEB = PEB - 512; •NAND flash with 2048 byte NAND page and 512 byte sub-page: LEB = PEB - 2048; •Для других flashes overhead должен быть минимум 2 минимальных I/O units, если размер min. I/O unit больше или равен 64 bytes, и 2-жды по 64 bytes, выровненных к размеру min. I/O unit, если размер min. I/O unit меньше, чем 64 bytes.
Далее производится прошивка. После запуска проверяется информация:
UBI: physical eraseblock size: 131072 bytes (128 KiB) UBI: logical eraseblock size: 129024 bytes UBI: smallest flash I/O unit: 2048 UBI: sub-page size: 512
При необходимости производится пересборка с новыми параметрами. Использование образа с другой Nandflash или как заставить UBI игнорировать sub-pagesЕсли ваша NAND flash поддерживает sub-pages, UBI будет использовать их. Но иногда вы можете хотеть сказать UBI, чтобы она игнорировала sub-pages, например, если вы имеете UBI-образ, который был сделан для аналогичной NAND flash, но без sub-pages, или если вы только хотите запретить sub-pages для целей тестирования. Можно сделать это сделав, чтобы UBI насильно читала/писала VID header от/к началу второй страницы, взамен второй sub-page (которая используется по умолчанию). И UBI использует sub-pages только для VID headers, что достаточно. Если вы подключаете устройства MTD используя ubiattach tool – просто используйте опцию --vid-hdr-offset и определите смещение второй страницы. Например, если вы имеете 2048-byte NAND pages, используйте --vid-hdr-offset 2048. Все примеры ниже подразумевают 2048-byte NAND pages. Если вы не используете ubiattach и взамен определяете устройства MTD для подключения, используя kernel boot parameters, то вы можете задать смещение VID header после имени или номера устройства MTD. Например:
$ ubi.mtd=rootfs,2048 $ ubi.mtd=3,2048
это подключит устройство MTD с именем "rootfs" (или устройство MTD номер 3) и заставит UBI читать/писать заголовки VID от/к смещению 2048, то есть во вторую страницу NAND. Аналогично, если используется module load parameters, попробуйте
$ modprobe ubi mtd=rootfs,2048 $ modprobe ubi mtd=3,2048
И конечно, если используется партиция MTD, которая уже отформатирована так, чтобы использовать sub-pages, уже использована, что означает, что все заголовки VID уже установлены по смещению 512 (вторая sub-page 2048-байта NAND-страницы), невозможно заставить UBI остановить использование sub-pages (это будет приводить к падению). Разрешается делать это только если подключается пустой раздел MTD или если flash уже форматирована так, что все заголовки VID имеют смещение 2048. Это означает, что если используется ubinize, необходимо воздержаться от использования параметра -s. См. также | ||
Предыдущая Содержание Следующая |