Boom-Zoom 0 10 мая, 2012 Опубликовано 10 мая, 2012 (изменено) · Жалоба Всем доброго времени суток! У меня возникла проблема с запуском uClinux. Суть такова: Есть аппаратная конфигурация - заведомо рабочая. - есть собранный образ uClinux cо следующими настройками: #### To enable MTD [*] Memory Technology Device (MTD) support ---> --- Memory Technology Device (MTD) support [ ] Debugging (NEW) [ ] MTD concatenating support (NEW) [*] MTD partitioning support [ ] RedBoot partition table parsing (NEW) [ ] Command line partition table parsing (NEW) [ ] TI AR7 partitioning support (NEW) *** User Modules And Translation Layers *** [*] Direct char device access to MTD devices -*- Common interface to block layer for MTD 'translation layers [ ] TI AR7 partitioning support (NEW) *** User Modules And Translation Layers *** [*] Direct char device access to MTD devices -*- Common interface to block layer for MTD 'translation layers [*] Caching block device access to MTD devices +включена physical device map (это название на память) #### To enable CFI flash RAM/ROM/Flash chip drivers ---> [*] Detect flash chips by Common Flash Interface (CFI) probe [ ] Detect non-CFI AMD/JEDEC-compatible flash chips (NEW) [ ] Flash chip driver advanced configuration options (NEW) [ ] Support for Intel/Sharp flash chips # for neek [*] Support for AMD/Fujitsu flash chips # others [ ] Support for ST (Advanced Architecture) flash chips (NEW) [ ] Support for RAM chips in bus mapping (NEW) [ ] Support for ROM chips in bus mapping (NEW) [ ] Support for absent chips in bus mapping (NEW) #### To enable flash filesystem support File systems --> Miscellaneous filesystems ---> [*] Journalling Flash File System v2 (JFFS2) support Так же включены нужные mtd утилиты В основных настройках ядра параметры offset addres и linking addres = 0х0 defaul command string = root=/dev/mtdblock0 rw rootfstype=jffs2 Всё настроено на работу с двумя partitions 0x600000-0xA00000 - rootfs 0x000000-0x600000 - kernel При запуске ядра mtd-parts их выводит, под номером 0 - считает rootfs 1 - kernel - есть образ rootfs.jffs2 - размеры партиций взяты с запасом по размеру Зашиваю образ ядра //после компиляции у меня на выходе elf формат образа, поэтому сначала преобразую во flash $SOPC_KIT_NIOS2/bin/elf2flash --base=0x0 --end=0xffffff --reset=0x0 --input=soft --output=flash.flash --boot=$SOPC_KIT_NIOS2/components/altera_nios2/boot_loader_cfi.srec //так зашиваю $SOPC_KIT_NIOS2/bin/nios2-flash-programmer "flash.flash" --base=0x0 --mmu --sidp=0x21208B8 --id=0x3BD3BE2B --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster [uSB-0]' --program --verbose Так загружаю образ ФС // из bin во flash $> *bin2flash --input=rootfs.jffs2 –output=rootfs.flash --location=0x0060 0000 –verbose //зашиваю > *nios2-flash-programmer ”jffs2.flash” --base=0x0 –mmu --program --verbose Зашивается в логе зашивается всё по правильным адресам т.е. ядро в партицию начиная с 0х0, фс в партицию начиная с 0х600000 При загрузке выдает ошибку: freeing unused kernel memory 72k freed <0xC618D000 - c619E000> Kernel panic - not syncing: no init found. Try passing init = option to kernel. Помогите примонтировать файловую систему) Лог загрузки: Изменено 10 мая, 2012 пользователем Boom-Zoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 11 11 мая, 2012 Опубликовано 11 мая, 2012 (изменено) · Жалоба В основных настройках ядра параметры offset addres и linking addres = 0х0 defaul command string = root=/dev/mtdblock0 rw rootfstype=jffs2 ... Лог загрузки: Сравните лог и то что задано в командной строке - они не совпадают. У вас ядро получает параметр initrd=0x00600000, 0x00400000 от загрузчика - либо там поменяйте на то что нужно либо в ядре включите опцию CONFIG_CMDLINE_FORCE=y иначе ядро пытается смонтировать рамдиск которого вы судя по всему не предполагаете записывать по указанному адресу. Изменено 11 мая, 2012 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 11 мая, 2012 Опубликовано 11 мая, 2012 (изменено) · Жалоба Сравните лог и то что задано в командной строке - они не совпадают. У вас ядро получает параметр initrd=0x00600000, 0x00400000 от загрузчика - либо там поменяйте на то что нужно либо в ядре включите опцию CONFIG_CMDLINE_FORCE=y иначе ядро пытается смонтировать рамдиск которого вы судя по всему не предполагаете записывать по указанному адресу. Да, действительно перепутал параметр в команде, поправил, но ничего не изменилось. CONFIG_CMDLINE_FORCE=y - через make menuconfig такого найти не смог, возможно опция может по другому называться? Читая про процесс загрузки linux узнал что ядро стартуя монтирует временную урезанную файловую систему в ОЗУ только для чтения, потом запускает самые необходимые драйверы, а далее монтирует КФС. Есть ряд вопросов: - init находится в ФС которая монтируется в ОЗУ или в КФС? - как проверить монтируется ли ФС в ОЗУ? - можно ли обойтись без ФС монтируемой в ОЗУ? - и как проверить что init скомпилился и попал туда куда нужно? P.S. Включил поддрежку Init в busybox Изменено 11 мая, 2012 пользователем Boom-Zoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Обычно "большие" линуксы грузятся через промежуточную файловую систему, которая может находится в ОЗУ. Во встраиваемых линуксах это не так популярно. Init это самый первый процесс, который должен быть запущен ядром, если его нет, значит ничего работать не будет. Можно попробовать передать ядру параметр init=/bin/sh и тогда, при загрузке вы должны попасть в shell. Еще, я бы посоветовать что же вы такого записали в файловой системе, может там действительно нет init. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 14 мая, 2012 Опубликовано 14 мая, 2012 (изменено) · Жалоба Можно попробовать передать ядру параметр init=/bin/sh и тогда, при загрузке вы должны попасть в shell. Еще, я бы посоветовать что же вы такого записали в файловой системе, может там действительно нет init. Надо будет попробовать задать nit=/bin/sh. Проверял логи, init компилится. Сейчас ситуация такова: я сбросил настройки в дефолтные, настроил по мануалу опции ядра + включил опции отладки фс и ядра, подсунул ему командную строку root=/dev/mtdblock1 rw rootfstype=jffs2 mtdparts=physmap-flash.0:6M(kernel)ro,-(rootfs) init=/bin/BusyBox/init (дефаултная настройка я пологаю /sbin/init) в итоге партиции создаются те которые мне нужны сответствующего размера (в логе только косяк перед уходом последний раз компилил забыл скобки поставить в командной строке,поэтому второй раздел partition_001 называется). Пишет что файловую систему он монтирует, что радует конечно. Но инит найти не может. И я не могу понять куда лезет jffs2_scan_ereaseblock, зачем ей адреса в середине партиции ядра и в конце флешки? Мозгом чую что в настройках ядра какая то несогласованность, но вот как её исправить... Вот выдержки из лога: physmap-flash physmap-flash.0 could not reserve memory region physmap-flash probe of physmap-flash.0 failed whith error -12 old jffs2 bitmask found at you cannot use older jffs2 filesystem whith newer kernel not init found Подскажите что делать если кто то сталкивался, а пока курю форумы и мануалы. Изменено 14 мая, 2012 пользователем Boom-Zoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 15 мая, 2012 Опубликовано 15 мая, 2012 · Жалоба Как вы пишите корневую файловую систему во flash? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 15 мая, 2012 Опубликовано 15 мая, 2012 · Жалоба Как вы пишите корневую файловую систему во flash? да Вобщем все получилось! Ура!! :rolleyes: Покурил буржуйские форумы начал копать в сторону настроек mtd утилит и параметров компиляции jffs2, но опасения не подтвердились. После долгих изысканий отключил в настройках ядра параметр^ -enable UBI (из буржуйского описания смутно представляю что он делает, попозже разберусь для себя) после чего пропали ошибки: old jffs2 bitmask found at you cannot use older jffs2 filesystem whith newer kernel, а так же обращения по неправильным адресам Немного поправил размеры партиций, но не думаю что в этом дело... Далее init=/bin/sh спасло ситуацию!))) огромное спасибо за совет! Init на кфс присутствует, но почему то указав его ядру запуск не происходит Но вот две ошибки остались, хотя работает и с ними: physmap-flash physmap-flash.0 could not reserve memory region physmap-flash probe of physmap-flash.0 failed whith error -12 Файлы создаются, данные в них записываюся и сохраняются, после отключения и включения питания всё на месте. Есть только одна мелочь которая беспокоит: когда происходит запись на флеш сыпятся сообщения как на третьем логе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 15 мая, 2012 Опубликовано 15 мая, 2012 (изменено) · Жалоба На вопрос я забавно ответил) Мне показалоль написано "Так..." При помощи JTAG, работаю с cyclone II, использую несколько утилит командной строки идущих в комплекте с Quartus'ом 11, пример командной строки в первом посте есть. Изменено 15 мая, 2012 пользователем Boom-Zoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 15 мая, 2012 Опубликовано 15 мая, 2012 · Жалоба Странно что /bin/sh отработал, а /bin/init - нет. UBI это может быть UBIFS, файловая система для nand памяти большого объема. >>Файлы создаются, данные в них записываюся и сохраняются, после отключения и включения питания всё на месте. Не забывайте sync делать перед перезагрузкой, ат о данные могут не записаться. >>сыпятся сообщения как на третьем логе. может вы дебаг в ядре лишний включили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 30 мая, 2012 Опубликовано 30 мая, 2012 (изменено) · Жалоба Решил всётаки запустить инит. В процессе разбирательств выяснил что инит в КФС присутствует в elf формате, когда патаешься его запустить пишет can't execute, если компилишь инит не стандартный, а из busybox инит получается бинарный при его запуске выводится сообщении смысл коготорого в том что инит первый запускаемый процесс и система виснет. Загрузив zImage от производителя и попробовав запустить инит (elf формат), он нормально исполняется - пытается монтировать vfs proc и sysfs выводит лого и возвращается в консоль. Перепробовал много вариантов конфигурации, начал разбираться с логикой запуска инит... В следствии чего возникли вопросы: - как будет вести себя инит если inittab пустой или отсутствует, или он его не находит? - по какой причине может не запустится elf файл (предпологаем что скомпилирован он с нужными параметрами), может ли он начать исполнение, но не найдя каких то зависимостей выдать такое сообщение? - и почему инит исполняемый файл, а не скрипт? Изменено 30 мая, 2012 пользователем Boom-Zoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба 1. Если нет /etc/inittab то ничего страшного случиться не должно 2. Причин не запуска elf файла может быть много. Вы уверенны что вы собрали его под правильную архитектуру? Запустите запустите на вашем ПК команду file <путь к Init> и посмотрите что вам выдаст. Еще можете запустить strace и посмотреть на каком именно месте он перестает выполняться. Если не помогло, то используйте gdb, но обычно strace должно хватить. 3. А почему init должен быть скриптом? Init может запускать init-скрипты, но сам, быть скриптом не обязан. "из busybox инит получается бинарный" - должна получиться символьная ссылка на busybox. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 30 мая, 2012 Опубликовано 30 мая, 2012 · Жалоба 1. Причин не запуска elf файла может быть много. Вы уверенны что вы собрали его под правильную архитектуру? Запустите запустите на вашем ПК команду file <путь к Init> и посмотрите что вам выдаст. Еще можете запустить strace и посмотреть на каком именно месте он перестает выполняться. Если не помогло, то используйте gdb, но обычно strace должно хватить. 2. "из busybox инит получается бинарный" - должна получиться символьная ссылка на busybox. 1. elf точно не для ПК, strace попробую. 2 точно-ссылка Сижу копаюсь в кишках... нашёл интересный сайт про uclinux где подробно расписан процесс его загрузки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 16 июня, 2012 Опубликовано 16 июня, 2012 · Жалоба Вопрос надо закрыть... Решил проблему, elf был слинкован динамически, а нужные библиотеки не компилировались, слинковал статически и всё заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ig_z 0 16 июня, 2012 Опубликовано 16 июня, 2012 · Жалоба ... нашёл интересный сайт про uclinux где подробно расписан процесс его загрузки... Так поделитесь, мало ли кому пригодится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Boom-Zoom 0 17 июня, 2012 Опубликовано 17 июня, 2012 · Жалоба Так поделитесь, мало ли кому пригодится http://dmilvdv.narod.ru/Translate/ELSDD/in...dded_linux.html Отличный ресурс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться