Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как создать несколько разделов на NAND с JFFS2
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Dimmy
Прошу прощения за повтор - промахнулся с форумом.
Вводные:
1. Плата Olimex SAM9-L9260 (по основной конфигурации - тот же AT91SAM9260-EK от Atmel, только без звукового ЦАП и меньшим размером dataflash).
2. u-boot-2009.11 (можно ли использовать его? если нет - то почему?)
3. Поскольку плата используется только для отладки, а "боевая" будет без dataflash (только NAND), то собирать U-boot предполагается, предварительно исполнив
make at91sam9260ek_nandflash_config
Но при этом создается только 1 раздел для filesystem. Нужно 2. В доках выяснил, что для этого необходимо определить макро CONFIG_SYS_JFFS_CUSTOM_PART
и функцию struct part_info* jffs2_part_info
только вот в разных примерах - разный список параметров ф-ции.

В файле README.JFFS2 она описана так:
struct part_info* jffs2_part_info(int part_num)

Здесь: common/cmd_jffs2.c (этот файл приводится как пример реализации) она выглядит так:
static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num)

Чему верить? Может есть конкретный пример для AT91SAM9260-EK?
sasamy
Цитата(Dimmy @ Jan 22 2010, 17:40) *
Вводные:
3. Поскольку плата используется только для отладки, а "боевая" будет без dataflash (только NAND), то собирать U-boot предполагается,


Непонятен момент - вы на "боевой" плате будете играть с загрузчиком ? уверены что вам нужна поддержка jffs в загрузчике а не в ядре ? Я к тому что те разделы которые вы определите в u-boot ничего общего не имеют с ядром.
Dimmy
Цитата(sasamy @ Jan 22 2010, 17:49) *
Непонятен момент - вы на "боевой" плате будете играть с загрузчиком ? уверены что вам нужна поддержка jffs в загрузчике а не в ядре ?

Зачем обязательно играть? Один раз собрать с необходимыми параметрами разделов - и все... А поддержка JFFS2 ессно нужна в загрузчике, т.к. и он, и bootstrap и ядро и файловая система будут на NAND-flash
sasamy
Цитата(Dimmy @ Jan 22 2010, 19:42) *
Зачем обязательно играть? Один раз собрать с необходимыми параметрами разделов - и все... А поддержка JFFS2 ессно нужна в загрузчике, т.к. и он, и bootstrap и ядро и файловая система будут на NAND-flash


Я так и подумал что вы ошибаетесь smile.gif поддержка фс в загрузчика вообще не нужна, он посекторно копирует содержимое образа ядра в ram. Разделы в u-boot - это его личное дело как он себе их представляет и к ядру отношения не имеет, в ядре свое собственное представление разделов которое описывается отдельно, либо через командную строку или в board-файле.
AlexandrY
Эк вы замахнулись.

Цитата(Dimmy @ Jan 22 2010, 16:40) *
Здесь: common/cmd_jffs2.c (этот файл приводится как пример реализации) она выглядит так:
static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num)


JFFS2 существует только с интерфейсом под файловую систему Линукс и насколько известно никогда не имела интерфейса типа ANSI C.
Т.е. просто нет оболочек для JFFS2 позволяющих работать с ней без Линукса.
И уж не будет поскольку это сверхтормозная морально устаревшая файловая система которая должна быть заменена либо на UBIFS либо на YAFFS2
Если уж позарез в загрузчике нужна файловая система на NAND, то есть куча компактных файловых систем идущих с коммерческими компиляторами IAR, Keil и т.д.
Но тогда уж и весь u-boot фтопку и писать свой загрузчик.
Однозначно это легче подъема любой файловой системы на NAND.
Dimmy
Цитата
Я так и подумал что вы ошибаетесь smile.gif поддержка фс в загрузчика вообще не нужна, он посекторно копирует содержимое образа ядра в ram. Разделы в u-boot - это его личное дело как он себе их представляет и к ядру отношения не имеет, в ядре свое собственное представление разделов которое описывается отдельно, либо через командную строку или в board-файле.

Пока писал ответ - добавилось несколько постов. Но все равно, оставлю как-есть...
Цитата(sasamy @ Jan 22 2010, 17:49) *
Я к тому что те разделы которые вы определите в u-boot ничего общего не имеют с ядром.

Дело в том, что ранее пытался создать разделы на уровне ядра. При этом конфигурация была следующей:

Dataflash:
Bootstrap
U-boot var's
U-boot
Kernel
Temp
NAND-flash (512Mb):
Root FS (хотелось бы 256Мб)
Secondary FS (тоже хотелось бы 256Мб)

Остался непонятен вопрос: где указывать размер раздела при создании файловой системы? Например, утилитка mkfs.jffs2 имеет параметр более-менее подходящий под это описание:

-p=[SIZE] Pad output to SIZE bytes with 0xFF. If SIZE is not specified, the output is padded to the end of the final erase block.
делал -p=256*1024*1024
Но все равно, после монтирования раздела его размер оказывается равным полному размеру NAND-flash (512M) (об этом говорит df -h)
Возможно, есть какие-то дополнительные параметры, указываемые загрузчиком kernel-у, которые говорят о размере раздела?
Dimmy
Попытался добавить раздел в ядре в блоке описания железа (/arch/arm/mach-at91/board-sam9-l9260.c)
/*
* NAND flash
*/
static struct mtd_partition __initdata ek_nand_partition[] = {
<------>{
<------><------>.name<->= "Bootloader Area",
<------><------>.offset>= 0,
<------><------>.size<->= 4 * 1024 * 1024,
<------>},
<------>{
<------><------>.name<->= "User Area",
<------><------>.offset>= 4 * 1024 * 1024,
<------><------>.size<->= 256 * 1024 * 1024,
<------>},
<------>{
<------><------>.name<->= "Secondary Partition",
<------><------>.offset>= (4 * 1024 * 1024) + (256 * 1024 *1024),
<------><------>.size<->= MTDPART_SIZ_FULL,
<------>},
};
После компиляции ядра с добавленным разделом и заливки на этапе монтирования ФС контроллер вываливается с ошибкой:

VFS: Mounting root (jffs2 filesystem).
Freeng init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
amw
Цитата(Dimmy @ Jan 25 2010, 13:48) *
Попытался добавить раздел в ядре в блоке описания железа (/arch/arm/mach-at91/board-sam9-l9260.c)
...

Я бы взял за пример любой из файлов в drivers/mtd/maps написал свой partition map.
В конфиге ядра должна быть включена поддержка MTD Partitions.

А приведенный лог - непонятный. Разделы создались?
И похоже что JFFS2 таки примонтировалась. А собственно на ней есть init? А как заливался образ? Из u-boot? А если BAD-Block попался?
sasamy
Цитата(Dimmy @ Jan 25 2010, 14:48) *
VFS: Mounting root (jffs2 filesystem).
Freeng init memory: 120K
Kernel panic - not syncing: Attempted to kill init!


Что-то смонтировалось, так что дело не в jffs2. Такое сообщение бывает например если abi ядра и программ в userspace не совпадают. Может библиотеки libc не скопированы.

PS подсветка табуляции в редакторе mcedit отключается [shift]+[alt]+[-] smile.gif
dch
Цитата(Dimmy @ Jan 25 2010, 14:48) *
static struct mtd_partition __initdata ek_nand_partition[] = {
<------>},
};

часто так делают, разделение на партиции задается отдельным файлом, структуркой. До сообщения которое Вы привели у Вас ядро должно выдать собщения что обнаружена такаято нанд flash, а на ней должны быть найдены, размещены эти партиции. В командной строке u-boot а, которую u-boot передает ядру должна присутствовать строчка где искать root файловую систему на какой партиции типа root=/dev/..., ядро обычно названия партиций выводит, вместо трех точек подставте что она Вам выдало. u-boot может запускать ядро лежащее в JFFS2 сответсвенно партиций может быть две одна на u-boot и одна на ядро с файловой системой, в зависимости как u-boot сделан, часто делается с отдельным загрузчиком, тогда до трех партиций это как сделаете.
mdmitry
Посмотрите патчи от Atmel для ядер. Помниться, в них были изменения, необходимые для работы с разделами jffs2, включая названия разделов. В каких файлах исходников не помню. Можно поискать таким образом: два каталога с одинаковым ядром, один каталог пропатчить и натравить diff на эти каталоги. Другой вариант - смотреть только сами патчи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.