ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: Прошивка JFFS2 образа КФС из uBoot  (Прочитано 5267 раз)

0 Пользователей и 1 Гость просматривают эту тему.

laborer

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 29
Прошивка JFFS2 образа КФС из uBoot
« : 18 Мая, 2011, 14:52:38 »

Интересует сей вопрос. Девайсина - Тион270.

Если КФС держать на каком-нибудь ext2, то её можно прошить примерно так:
erase ${rd_fladdr} +${filesize}; cp.b ${fileaddr} ${rd_fladdr} ${filesize};

Если же КФС держать на каком-нибудь jffs2, то прошивать надо(под линуксом) примерно так:
# flash_eraseall -j /dev/mtd2
# nandwrite -p /dev/mtd2 rootfs.jffs2

где /dev/mtd2 - интересующий меня раздел(стандратный 3-ий для кфс после uboot и ядра).
То есть простое копирование байтов по типу
# dd if=rootfs.jffs2 of=/dev/mtd2 ошибочно.

Команда cp.b насколько я понимаю делает простое копирование. После её выполнения новая кфс получается битой: со следами старой.
Нужно найти аналог линуксового nandwrite для консоли uboot. Нагуглилось, что такая команда есть - nand(https://docs.blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:nand-flash). В uboot нужно включить CONFIG_CMD_NAND ну и заодно ещё кое-что.
Сделал вот такой вот патч(для uboot пропатченного уже u-boot-1.3.3_tion-tion270-series_svn894.patch).
--- a/include/configs/tion270.h 2011-05-18 13:12:26.748849541 +0400
+++ b/include/configs/tion270.h 2011-05-18 13:12:49.140849542 +0400
@@ -252,6 +252,11 @@
 #define MTDPARTS_DEFAULT "mtdparts=flash:512k(u-boot)ro,4m(kernel)ro,-(fs)"
 #define CONFIG_CMD_JFFS2 /* mtdparts command */
 
+#define CONFIG_CMD_NAND
+#define NAND_MAX_CHIPS 1
+#define CFG_MAX_NAND_DEVICE 1
+#define CFG_NAND_BASE 0x480000 //rd_fladd
+
 #define CONFIG_EXTRA_ENV_SETTINGS \
  "mtdparts=" MTDPARTS_DEFAULT "\0" \
  "partition=nor0,2\0" \
Есть сомнение относительно CFG_NAND_BASE. Вроде здесь надо ставить стартовый адрес раздела. Но этого всего оказывается мало. Сыпется ошибка
drivers/mtd/nand/libnand.a(nand.o): In function `nand_init':
nand.c:(.text+0x20): undefined reference to `board_nand_init'

Нужно эту функцию описать в файле <uboot>/board/tion270/nand.c (по аналогии с другими платами). Вот тут совсем ничего не ясно как железо инициализировать.
У кого-нибудь есть такие наработки? И вообще правильно ли я всё понимаю?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Прошивка JFFS2 образа КФС из uBoot
« Ответ #1 : 18 Мая, 2011, 15:21:38 »

> dd if=rootfs.jffs2 of=/dev/mtd2 ошибочно.

Да, если вы не указали размер блока (не проверял).

cp.b (в U-Boot) справляется со своей задачей, так как при малых объёмах копирует побайтово, а при больших учитывает размер блока во Flash и использует блочную запись.
Записан

laborer

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 29
Re: Прошивка JFFS2 образа КФС из uBoot
« Ответ #2 : 18 Мая, 2011, 15:39:17 »

Цитировать
cp.b (в U-Boot) справляется со своей задачей, так как при малых объёмах копирует побайтово, а при больших учитывает размер блока во Flash и использует блочную запись.

У меня не справился. Проверял несколько раз. Память не битая, делал проверку cmp.b для загруженного файла и флеша.
До этого у меня флеш был не чистый, а содержал старую предыдущую версию моего проекта. На первый взгляд после прошивки выглядит всё хорошо. Но пригляделся: большинство файлов имеют новую дату, но также есть файлы из старого проекта. То есть свежий образ переписался поверх старого как-то хитро с наложением.
Я не разбираюсь во внутренностях jffs2, но вот замечания из faq наводят на такие мысли.
Цитировать
One common mistake is to use /dev/mtdX or /dev/mtdblockX devices to flash JFFS2 images on NAND flashes. E.g.
cp jffs2_fs.img /dev/mtd2

This is incorrect because when dealing with NAND flashes one has to skip bad eraseblocks and write only in NAND page size chunks. Please, use the nandwrite utility instead.

Ну и в конце-концов, зачем же тогда придумали эту команду nand для uboot? А ещё есть такие её вариации "nand write.jffs2".
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Прошивка JFFS2 образа КФС из uBoot
« Ответ #3 : 18 Мая, 2011, 15:56:32 »

> У меня не справился.

При записи файлов в NOR Flash (ядра, КФС) я использую cp.b

> До этого у меня флеш был не чистый

Вы делали erase? Стирали _весь_ соотв. раздел, а не только место для файла (это важно для jffs)?


P.S.
> dd if=rootfs.jffs2 of=/dev/mtd2 ошибочно.

Надо использовать mtdblock2

Да, если вы не указали размер блока (не проверял).
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Прошивка JFFS2 образа КФС из uBoot
« Ответ #4 : 18 Мая, 2011, 15:58:15 »

И на плате не NAND Flash, а NOR для которой bad block это не нормально.
Записан

laborer

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 29
Re: Прошивка JFFS2 образа КФС из uBoot
« Ответ #5 : 18 Мая, 2011, 16:35:23 »

>> До этого у меня флеш был не чистый
>Вы делали erase? Стирали _весь_ соотв. раздел, а не только место для файла (это важно для jffs)?

Угу в этом была причина. Спасибо.
Было: erase ${rd_fladdr} +${filesize};
Помогло:  erase  ${rd_fladdr} +0x1B80000;

>P.S.
>> dd if=rootfs.jffs2 of=/dev/mtd2 ошибочно.
>Надо использовать mtdblock2
>Да, если вы не указали размер блока (не проверял).

Конечно. Я тоже не проверял :), писал на уровне идеи.
Записан