Не пинайте если вопрос совсем глупый, но второй день не могу найти решение проблемы, форум перечитал - ответа не нашел. Опыт с АРМами и АВРами существенный, вот с линуксом - пока не очень.
Хочу добавить пару нужных пакетов и свою программу в корневую систему платы 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?
Пометка пакетов в меню buildroot для сборки еще не гарантирует их безошибочной сборки, при возникновении которой, естественнм образом остается ее старый вариант.
Первым делом убедитесь, что в target новой корневухи появляются требуемые вам приложения.
Ошибок при компиляции buildroot не выдает, в target все что нужно появляется, дата файлов в output/images получается свежая. Но на плате все без изменений.
Судя по всему нашел суть моей проблемы - при обновлении содержимого 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 применительно к корневой) и как с этим быть, может кто из бывалых подскажет?
В ходе своих экспериментов, обнаружил, что при размере корневой ФС, располагаемой в initramfs, более 5М (или около того), загрузка системы виснет на инициализации NAND драйвера ...
Так что можно сказать - Вам "повезло", что она говорит "почему не работает" .
Вобще, большая корневуха в памяти, сами понимаете, не лучший способ ее использования, лучше тогда ее на NAND перенести.
Да, так все и получается. Наигрался с rootfs маленького размера, хочу перенести ее на NAND или SD-карточку.
Возник вопрос как это лучше сделать - судя по форуму принято это делать через командную стоку u-boot.
Однако если посмотреть файлик ucl.xml из папки mfgtool, то там читаем:
Вроде как тут все делается красиво и само, но строки эти в файле закоментированы - для нашей платы они работать не будут?
И если делать через u-boot - то какой наиболее грамотный алгоритм это сделать? Для SAM9260 на форуме информации полно, вот для iMX-233 ее практически нет
Загружать образы сразу в NAND по USB, конечно красиво, только слишком мал мотив (хотя может просто "у страха глаза велики" :) ) разбираться почему "стандартный механизм" не работает или что и как для этого нужно настроить. Меня, обновление по TFTP, вполне устраивает.
Текущая версия U-boot не умеет общаться с NAND, поэтому, остается только сам Linux.
Для начала, можно "тупо" скопировать всю корневую в NAND и подправить аргументы запуска ядра (в ходе своих экспериментов я так и поступил).
Можно просто через usb-flash перенести. Алгоритм примерно такой:
1 Создать на флэшке правильную :) файловую систему (например ext2)
2 Скопировать туда то что нужно перенести
3 Загрузить плату образом с корневой ФС в initramfs
4 Создать фс на nand и примонтировать ее - рекомендую ubifs, она меня весьма радует, независимые тесты подтверждают это. Пошаговую инструкцию можно взять тут
5 Примонтировать флэшку
6 скопировать содержимое флэшки на nand.
Также можно скопировать по сети - вместо флэшки примонтировать NFS и с нее скопировать на nand, как это сделать описано в мануле от freescale - есть на их сайте.
Спасибо за ответы, очень помогли. Я в результате сделал немного по-другому, не знаю на сколько это все грамотно, но может кому пригодится информация :)
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'ках - вытянет?