amw 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба Странно, если образ рамдиска не GZIP-ить, тогда ядро его находит ... Ммм... Никогда не пробовал не GZIP-ить. Мож чего в uboot надо сказать по поводу GZIP? Ну или при создания образа для uboot? Как вариант пользуйте непакованный и разберитесь с initramfs. Оно конечно ядро перелинковывать каждый раз при изменении файловой системы не ахти как удобно, но типа рекомендуемый путь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба Спасибо, нашел причину ошибочной загрузки образа, см. предыдущее сообщение (рассинхронизировались сообщения на форуме). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба К стати не понял что за второй параметр у initrd=0xa1000000,0x400000 Kernel command line: root=/dev/ram0 rw initrd=0xa1000000,0x400000 ramdisk_size=4000 console=ttyS0,115200n8 mem=128M Из kernel-parameters.txt initrd= [bOOT] Specify the location of the initial ramdisk Что указано после запятой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба Сам пока не понял :) Чего то еще не то ... ядро упорно говорит что не может init найти (он лежит в корне рамдиска - linuxrc) я уж и init=/linuxrc параметр для ядра добавил, а все равно не видит ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба Уперся ... В качестве init (linuxrc) у меня ash скрипт работающий через busybox, bysybox я сам не собирал я взял из корневухи для платы colibri (процессор такой же). Если при загрузке пытаться этот скрипт запустить (linuxrc), получаю следующее RAMDISK: Compressed image found at block 0 VFS: Mounted root (ext2 filesystem). Freeing init memory: 92K Kernel panic - not syncing: No init found. Try passing init= option to kernel. Заглянув в тело самого busybox, заметил строчку "/lib/ld-linux.so.2", из чего сделал вывод, что бузибокс собран не статически и добавил в образ своего рамдиска директорию lib и эту самую библиотеку (из корневухи для colibri), получаю: RAMDISK: Compressed image found at block 0 VFS: Mounted root (ext2 filesystem). Freeing init memory: 92K /bin/ash: error while loading shared libraKernel panic - not syncing: Attempted to kill init! ries: libm.so.6: cannot open shared object file: No such file or directory Добавляю в lib libm.so.6, получаю: RAMDISK: Compressed image found at block 0 RAMDISK: ran out of compressed data invalid compressed format (err=1) VFS: Mounted root (ext2 filesystem). Freeing init memory: 92K EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #14: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Warning: unable to open an initial console. EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #12: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Kernel panic - not syncing: No init found. Try passing init= option to kernel. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба Еще, если попробовать залить не GZIP-нутый образ рамдиска (с двумя либами), получаетяс: RAMDISK: ext2 filesystem found at block 0 RAMDISK: Loading 4000KiB [1 disk] into ram disk... done. VFS: Mounted root (ext2 filesystem). Freeing init memory: 92K EXT2-fs error (device ram0): ext2_check_page: bad entry in directory #14: directory entry across blocks - offset=0, inode=3844988932, rec_len=12556, name_len=159 Warning: unable to open an initial console. Kernel panic - not syncing: No init found. Try passing init= option to kernel. Заметьте, появилась строка "RAMDISK: Loading 4000KiB [1 disk] into ram disk... done." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 3 сентября, 2007 Опубликовано 3 сентября, 2007 · Жалоба Чтобы не заморачиватся с либами на этапе загрузки лучше пересоберите busybox статически. У меня динамический так и не пошел. Не знаю, чего ему точно не хватило, но busybox всегда использую статический. "Loading 4000KiB [1 disk] into ram disk" - это потому что не GZIP-леный. Ядро его копирует в удобный участок памяти (туда, где отмаллочился ramdisk). Если GZIP-леный, то распаковывается прямо на место. Перепроверте соответствие размеров рамдиска параметрам, укажите 4096 вместо 4000. ramdisk_size указывается для распакованного образа. В соответствии с рекомендацией на загрузчики Linux GZIPленный initrd нужно размещать по адресу 16M - sizeof(initrd). Правда могу ошибатся на счет 16M - эта цифра зависима от архитектуры. Только что посмотрел, нашел рекомендации для x86 в Documentation/i386/boot.txt. Для ARM вроде нет указаний куда грузить initrd. Думаю, что initrd лучше разместить в притык к концу памяти, то есть по адресу = размер памяти - размер GZIP-ленного initrd. С учетом memory map конечно. Добавляю в lib libm.so.6, получаю: Этого по идее не достаточно. Нужно, по крайней мере, всю libc на initrd закатать. Со всеми ссылками. В качестве перчня можно посмотреть на PC. Набор библиотек тот-же. Вероятно нужно libiconv еще. В качестве init (linuxrc) Обычно /linuxrc -> симлинк на /bin/init /bin/init -> симлинк на /bin/busybox Можно и ash скрипт, ситуацию с библиотеками это не маняет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 4 сентября, 2007 Опубликовано 4 сентября, 2007 · Жалоба В дополнение, Поскольку ldd не работает в кросс-варианте, используйте objdump (от кросс-компиллятора) для определения необходимых библиотек. arm-linux-objdump -x bin/bash ...... Тут много всякого, найдите седующее: Dynamic Section: NEEDED libtermcap.so.2 NEEDED libdl.so.2 NEEDED libc.so.6 ...... Тут еще много всякого arm-linux- - это для примера - разумеется используйте Ваш вариант именования crosstools. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 4 сентября, 2007 Опубликовано 4 сентября, 2007 · Жалоба Итак ... взял образ рамдиска отсюда http://heavy-online.ru/arm-linux/ . На удивление, все заработало, теперь пошли общие вопросы. Скачал более свежий busybox, насколько я понимаю, если я его собираю (make CROSS_COMPILE=arm-linux-), то при сборе он использует либу glib, причем для x86? По крайней мере, все попытки запустить на моем девайсе самодельно собранный бузибокс закончились неудачей, пробовал и статически собирать и ... . Новую либу тоже надо кросс компилятором собрать? Еще, мне надо как то Z-modem к моему хозяйству прикрутить, чтоб начать ковырятся с драйвером NAND флешки (иначе тонны времени потрачу на обновлении корневухи). Какие могут возникнуть минусы, если пользоваться uClib? Думаю, стоит ли бузибокс с uClib собирать ... Скачал uClib, собирается если указать процессор i386, если указать ARM, вываливается с криком: ./extra/scripts/conf-header.sh .config > include/bits/uClibc_config.h cc1: error: invalid option `little-endian' cc1: error: invalid option `little-endian' CC ldso/ldso/ldso.oS cc1: error: invalid option `little-endian' make: *** [ldso/ldso/ldso.oS] Ошибка 1 Причем от настройки индианы это не зависит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 4 сентября, 2007 Опубликовано 4 сентября, 2007 · Жалоба Итак ... взял образ рамдиска отсюда http://heavy-online.ru/arm-linux/ . На удивление, все заработало, теперь пошли общие вопросы. Скачал более свежий busybox, насколько я понимаю, если я его собираю (make CROSS_COMPILE=arm-linux-), то при сборе он использует либу glib, причем для x86? По крайней мере, все попытки запустить на моем девайсе самодельно собранный бузибокс закончились неудачей, пробовал и статически собирать и ... . Новую либу тоже надо кросс компилятором собрать? Надо собрать кросс-компилятор, потом этим кросс-компилятором собрать glibc. Прописать в PATH путь к кросс-компилятору ВПЕРЕДИ остальных путей. Что-то на подобие: cd glibc-2.3.6 configure --target=arm-linux host=arm-linux build=i686-pc-linux-gnu Само собой, надо указать Ваш "arm-linux" Для сравнения у меня под big-endian для IXP425 - это armv5b-softfloat-linux Вообще-то лучше всего взять crosstools http://kegel.com Там очень просто настраивается три файла, собирает все, начиная от binutils и заканчивая gdb. У busybox есть конфигуратор, как в ядре. Запускается по make menuconfig. Еще, мне надо как то Z-modem к моему хозяйству прикрутить, чтоб начать ковырятся с драйвером NAND флешки (иначе тонны времени потрачу на обновлении корневухи). На ум приходит только minicom. Он использует отдельный пакет, не помню как называется. Посмотрите в составе пакета minicom, что он использует. Можно перекомпилить. Сам я этим не занимался, у меня флеш прошивается по Ethernet. Думаю, что uboot это тоже может. Какие могут возникнуть минусы, если пользоваться uClib? Думаю, стоит ли бузибокс с uClib собирать ... Скачал uClib, собирается если указать процессор i386, если указать ARM, вываливается с криком:Причем от настройки индианы это не зависит. uClibc никогда не пробовал, именно из-за возможных минусов. Памяти достаточно - 16M Flash 64M SDRAM. ./extra/scripts/conf-header.sh .config > include/bits/uClibc_config.h cc1: error: invalid option `little-endian' cc1: error: invalid option `little-endian' CC ldso/ldso/ldso.oS cc1: error: invalid option `little-endian' make: *** [ldso/ldso/ldso.oS] Ошибка 1 Ключи gcc -mlittle-endian и -mbig-endian определены для ARM. Похоже, что у Вас вызывается gcc хоста (x86), для которого эти ключи не определены. См. выше про PATH. Для uClibc есть какой-то конфигуратор? Тогда надо там указать target и host (см. выше). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_shamaev 0 5 сентября, 2007 Опубликовано 5 сентября, 2007 · Жалоба Итак ... взял образ рамдиска отсюда http://heavy-online.ru/arm-linux/ . На удивление, все заработало, теперь пошли общие вопросы. Скачал более свежий busybox, насколько я понимаю, если я его собираю (make CROSS_COMPILE=arm-linux-), то при сборе он использует либу glib, причем для x86? По крайней мере, все попытки запустить на моем девайсе самодельно собранный бузибокс закончились неудачей, пробовал и статически собирать и ... . Новую либу тоже надо кросс компилятором собрать? Еще, мне надо как то Z-modem к моему хозяйству прикрутить, чтоб начать ковырятся с драйвером NAND флешки (иначе тонны времени потрачу на обновлении корневухи). Какие могут возникнуть минусы, если пользоваться uClib? Думаю, стоит ли бузибокс с uClib собирать ... Скачал uClib, собирается если указать процессор i386, если указать ARM, вываливается с криком:Причем от настройки индианы это не зависит. У меня: #!/bin/sh export ARCH=arm export CROSS_COMPILE=arm-linux- make clean make ARCH=arm make install А для разных вариантов - разные тулчейны, собирается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 5 сентября, 2007 Опубликовано 5 сентября, 2007 · Жалоба Итак, с налету uClib не собирается (под ARM), ошибки всеми цветами радуги валятся, в зависимости от включеных опций ... Сфокусировался на glib. 1) распаковал glibc-2.3.6.tar.bz2 2) распаковал glibc-linuxthreads-2.3.6.tar.bz2 3) незная как правильно приложить патчи ioperm.c.diff и Makeconfig.patch, тупо нашел редактируемые строки в изменяемых файлах и руками попроавил 4) объявил переменную: BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar \ RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \ ../../glibc-2.3.6/configure --prefix=/usr --build=i386-unknown-linux \ --host=arm-linux --target=arm-linux --without-fp \ --without-__thread --enable-add-ons=linuxthreads \ --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out В ответ на make 2>&1 tee make.out получаю: Makeconfig:84: arm/config.make: No such file or directory Makerules:782: Не задано имя файла для `include' /bin/sh: line 0: cd: arm: No such file or directory The GNU C library has not been configured. Run `configure' to configure it before building. Try `configure --help' for more details. make: *** [arm/config.status] Ошибка 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_shamaev 0 5 сентября, 2007 Опубликовано 5 сентября, 2007 · Жалоба Итак, с налету uClib не собирается (под ARM), ошибки всеми цветами радуги валятся, в зависимости от включеных опций ... Для uClibc тулчейн собирается при сборке buildroot, у меня Atmel - atmel_buildroot и использую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 5 сентября, 2007 Опубликовано 5 сентября, 2007 · Жалоба А разве для glib и uClib разные тулчейны нужны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 5 сентября, 2007 Опубликовано 5 сентября, 2007 · Жалоба А разве для glib и uClib разные тулчейны нужны? Да, buildroot и нужен в первую очередь, для того, чтобы собрать toolchain именно для использования с uClibc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться