Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Отладочные платы » SK-iMX233
Как обновить rootfs?
Sol
Добавлено 06.07.2010 18:58 Редактировалось 06.07.2010 19:32
0
Сообщение: 1
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Не пинайте если вопрос совсем глупый, но второй день не могу найти решение проблемы, форум перечитал - ответа не нашел. Опыт с АРМами и АВРами существенный, вот с линуксом - пока не очень.

Хочу добавить пару нужных пакетов и свою программу в корневую систему платы imx233 через buildroot.
Делаю все по инструкции от Павла ориентируясь на строку "make_system собирает корневую файловую систему, после чего собирает с ней ядро" (http://www.starterkit.ru/html/index.php?name=forum&op=view&id=7552) в виртуалке с диска в комплекте:

1. Сначала "make menuconfig" в директории buildroot'a, выбираю нужные пакеты.
2. Затем "make_system" из папки 2.6.31 ядра. Все что нужно скачивается (пришлось поднять прокси на хост-системе), собирается, в output buildroot'a четко вижу что нужные мне пакеты появились, вижу так же что в корень tftp кладутся свежесобранные файлики образа.
3. Далее на плате из консоли "system_install" - по tftp скачивается linux.sb, записывается на NAND.

Результат перезагрузки - корневая ФС оставется старой, того что я добавил - нету.
Так и должно быть или я что-то не понимаю? Дело в чехарде с датами файлов в vmware?
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 06.07.2010 22:09 Сообщение: 2
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Пометка пакетов в меню buildroot для сборки еще не гарантирует их безошибочной сборки, при возникновении которой, естественнм образом остается ее старый вариант.
Первым делом убедитесь, что в target новой корневухи появляются требуемые вам приложения.
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 06.07.2010 22:40 Редактировалось 07.07.2010 09:48 Сообщение: 3
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Цитата
Пометка пакетов в меню buildroot для сборки еще не гарантирует их безошибочной сборки, при возникновении которой, естественнм образом остается ее старый вариант.
Первым делом убедитесь, что в target новой корневухи появляются требуемые вам приложения.

Ошибок при компиляции buildroot не выдает, в target все что нужно появляется, дата файлов в output/images получается свежая. Но на плате все без изменений.
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 07.07.2010 10:55 Сообщение: 4
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Судя по всему нашел суть моей проблемы - при обновлении содержимого nand-флешки на плате в консоли есть следующие строки :

Write linux.sb to NAND flash ...
mtd: bootstream too large
mtd_init failed!

Из чего делаю вывод что файл бутстрима слишком большой. Убрал из buildroot'а все что мог, сделал в нем make clean, все пересобрал, linux.sb получился 4.5Мб, после чего rootfs успешно обновилась. До этого linux.sb был по размеру раза в два больше.
Огорчает что не могу найти чем именно ограничивается размер linux.sb (или rootfs.arm.cpio применительно к корневой) и как с этим быть, может кто из бывалых подскажет?
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 07.07.2010 11:27 Сообщение: 5
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
В ходе своих экспериментов, обнаружил, что при размере корневой ФС, располагаемой в initramfs, более 5М (или около того), загрузка системы виснет на инициализации NAND драйвера ...
Так что можно сказать - Вам "повезло", что она говорит "почему не работает" .
Вобще, большая корневуха в памяти, сами понимаете, не лучший способ ее использования, лучше тогда ее на NAND перенести.
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 08.07.2010 13:10 Редактировалось 08.07.2010 13:12 Сообщение: 6
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Цитата
В ходе своих экспериментов, обнаружил, что при размере корневой ФС, располагаемой в initramfs, более 5М (или около того), загрузка системы виснет на инициализации NAND драйвера ...
Так что можно сказать - Вам "повезло", что она говорит "почему не работает" .
Вобще, большая корневуха в памяти, сами понимаете, не лучший способ ее использования, лучше тогда ее на NAND перенести.


Да, так все и получается. Наигрался с rootfs маленького размера, хочу перенести ее на NAND или SD-карточку.
Возник вопрос как это лучше сделать - судя по форуму принято это делать через командную стоку u-boot.

Однако если посмотреть файлик ucl.xml из папки mfgtool, то там читаем:
Цитата
- <LIST name="Singlechip NAND" desc="Install on singlechip NAND">
<CMD type="boot" body="Recovery" file="linux.sb">Booting update firmware.</CMD>
<CMD type="find" body="Updater" timeout="60" />
<CMD type="pull" body="?" file="device.xml">Getting device info.</CMD>
<CMD type="show" file="device.xml" />
<CMD type="push" body="$ for module in lzo ubifs ubi mtdchar mtdconcat gpmi; do modprobe $module; done">Install modules</CMD>
<CMD type="push" body="mknod class/mtd,mtd0,/dev/mtd0" />
<CMD type="push" body="mknod class/mtd,mtd1,/dev/mtd1" />
<CMD type="push" body="mknod class/misc,ubi_ctrl,/dev/ubi_ctrl" />
<CMD type="push" body="send" file="imx233_linux.sb">Sending firmware</CMD>
<CMD type="push" body="$ kobs-ng init -d $FILE">Flashing firmware</CMD>
<CMD type="push" body="$ flash_eraseall /dev/mtd1">Erasing rootfs partition</CMD>
<CMD type="push" body="$ ubiattach /dev/ubi_ctrl -m 1 -d 0">Attaching UBI partition</CMD>
<CMD type="push" body="mknod class/ubi,ubi0,/dev/ubi0" />
<CMD type="push" body="$ ubimkvol /dev/ubi0 -n 0 -N rootfs0 -s 32MiB">Creating UBI volumes</CMD>
<CMD type="push" body="$ ubimkvol /dev/ubi0 -n 1 -N rootfs1 -s 32MiB">Creating UBI volumes</CMD>
<CMD type="push" body="$ ubimkvol /dev/ubi0 -n 2 -N data -m">Creating UBI volumes</CMD>
<CMD type="push" body="$ mkdir -p /mnt/ubi0; mount -t ubifs ubi0_0 /mnt/ubi0" />
<CMD type="push" body="$ mkdir -p /mnt/ubi1; mount -t ubifs ubi0_1 /mnt/ubi1" />
<CMD type="push" body="send" file="rootfs.tar">Sending rootfs image</CMD>
<CMD type="push" body="$ tar -C /mnt/ubi0 -xvf $FILE">Unpacking to partition 1</CMD>
<CMD type="push" body="$ tar -C /mnt/ubi1 -xvf $FILE">Unpacking to partition 1</CMD>
<CMD type="push" body="$ umount /mnt/ubi0">Unmounting</CMD>
<CMD type="push" body="$ umount /mnt/ubi1">Unmounting</CMD>
<CMD type="push" body="!3">Done</CMD>
</LIST>


Вроде как тут все делается красиво и само, но строки эти в файле закоментированы - для нашей платы они работать не будут?
И если делать через u-boot - то какой наиболее грамотный алгоритм это сделать? Для SAM9260 на форуме информации полно, вот для iMX-233 ее практически нет
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 08.07.2010 13:56 Сообщение: 7
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Загружать образы сразу в NAND по USB, конечно красиво, только слишком мал мотив (хотя может просто "у страха глаза велики" :) ) разбираться почему "стандартный механизм" не работает или что и как для этого нужно настроить. Меня, обновление по TFTP, вполне устраивает.
Текущая версия U-boot не умеет общаться с NAND, поэтому, остается только сам Linux.

Для начала, можно "тупо" скопировать всю корневую в NAND и подправить аргументы запуска ядра (в ходе своих экспериментов я так и поступил).
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.07.2010 14:49 Редактировалось 08.07.2010 15:09 Сообщение: 8
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Можно просто через usb-flash перенести. Алгоритм примерно такой:
1 Создать на флэшке правильную :) файловую систему (например ext2)
2 Скопировать туда то что нужно перенести
3 Загрузить плату образом с корневой ФС в initramfs
4 Создать фс на nand и примонтировать ее - рекомендую ubifs, она меня весьма радует, независимые тесты подтверждают это. Пошаговую инструкцию можно взять тут
5 Примонтировать флэшку
6 скопировать содержимое флэшки на nand.

Также можно скопировать по сети - вместо флэшки примонтировать NFS и с нее скопировать на nand, как это сделать описано в мануле от freescale - есть на их сайте.

Как перенести корневую фс на sd/mmc тут уже писали
http://www.starterkit.ru/html/index.php?name=forum&op=view&id=7655
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 08.07.2010 15:11 Сообщение: 9
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Небольшое уточнение, в штатной поставке платы, в NAND уже UBI файловая расположена и монтируется при старте.
Спуститься к концу Подняться к началу
Персональная информация
Sol
Добавлено 09.07.2010 10:01 Редактировалось 09.07.2010 11:28 Сообщение: 10
Sol
0

Пункты: 578
Регистрация: 01.07.2010
Спасибо за ответы, очень помогли. Я в результате сделал немного по-другому, не знаю на сколько это все грамотно, но может кому пригодится информация :)
1. Создал спец.сборку - ядро+intramfs, назвал ее updater.
2. Заливаю updater.sb на плату по tftp или через mfg-tool. В нем написан скриптик update_all_tftp который: 1) Форматирует разделы в NAND. 2) Скачивает по tftp новый образ ядра (без intramfs), монтирует NAND, пишет ядро в первый раздел NAND через kobs-ng. 3) Скачивает tar.gz-архив корневой, распаковывает ее во второй раздел NAND (можно его и с флешки брать, но пока по tftp удобней). 4) Ну и собственно запускает reboot, после чего на флешке получется свежее ядро и свежая корневая в NAND.

Все вроде неплохо работает, но есть непонимание одного момента - как kobs-ng из строки kobs-ng init -d linux.sb понимает что на NAND ядро надо писать именно в первый раздел? В хелпе он вообще пишет что ключик -d "unimplemented", однако ядро ложится именно туда куда нужно

P.S. Может кто еще подскажет один мелкий но пока неразрешимый для меня момент - как энергосбережение с фреймбуффера отключить? Гаснет через минуту неактивности, а надо чтоб не гас, обычные вещи вроде setterm -blank не проходят. Где задается эта минута и как ее отключить?
P.P.S. А какой у данной NAND вообще ресурс перезаписи? Сколько раз я смогу так корневую обновить и стоит ли из-за этого момента "париться" и переность все на SD/USB? 10000 раз например как та же встроенная флешка в AVR'ках - вытянет?
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-iMX233