реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Embedded linux bootstraping, ликбез
amw
сообщение Sep 3 2007, 07:51
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(3.14 @ Sep 3 2007, 10:19) *
Странно, если образ рамдиска не GZIP-ить, тогда ядро его находит ...

Ммм... Никогда не пробовал не GZIP-ить.
Мож чего в uboot надо сказать по поводу GZIP? Ну или при создания образа для uboot?

Как вариант пользуйте непакованный и разберитесь с initramfs. Оно конечно ядро перелинковывать каждый раз при изменении файловой системы не ахти как удобно, но типа рекомендуемый путь.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 3 2007, 07:54
Сообщение #17


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Спасибо, нашел причину ошибочной загрузки образа, см. предыдущее сообщение (рассинхронизировались сообщения на форуме).


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
amw
сообщение Sep 3 2007, 07:59
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



К стати не понял что за второй параметр у 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

Что указано после запятой?


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 3 2007, 08:21
Сообщение #19


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Сам пока не понял smile.gif
Чего то еще не то ... ядро упорно говорит что не может init найти (он лежит в корне рамдиска - linuxrc) я уж и init=/linuxrc параметр для ядра добавил, а все равно не видит ...


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 3 2007, 11:08
Сообщение #20


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Уперся ...
В качестве 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.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 3 2007, 12:29
Сообщение #21


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Еще, если попробовать залить не 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."


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
amw
сообщение Sep 3 2007, 19:13
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Чтобы не заморачиватся с либами на этапе загрузки лучше пересоберите 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 скрипт, ситуацию с библиотеками это не маняет.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
amw
сообщение Sep 4 2007, 08:16
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



В дополнение,
Поскольку 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.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 4 2007, 13:02
Сообщение #24


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Итак ... взял образ рамдиска отсюда 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
Причем от настройки индианы это не зависит.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
amw
сообщение Sep 4 2007, 14:33
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(3.14 @ Sep 4 2007, 16:02) *
Итак ... взял образ рамдиска отсюда 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 (см. выше).


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
v_shamaev
сообщение Sep 5 2007, 07:18
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 304
Регистрация: 5-07-04
Из: г. Москва
Пользователь №: 259



Цитата(3.14 @ Sep 4 2007, 17:02) *
Итак ... взял образ рамдиска отсюда 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

А для разных вариантов - разные тулчейны, собирается.


--------------------
Водку пьянствовать и безобразия нарушать!!!
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 5 2007, 08:15
Сообщение #27


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Итак, с налету 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


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
v_shamaev
сообщение Sep 5 2007, 08:47
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 304
Регистрация: 5-07-04
Из: г. Москва
Пользователь №: 259



Цитата(3.14 @ Sep 5 2007, 12:15) *
Итак, с налету uClib не собирается (под ARM), ошибки всеми цветами радуги валятся, в зависимости от включеных опций ...

Для uClibc тулчейн собирается при сборке buildroot, у меня Atmel - atmel_buildroot и использую.


--------------------
Водку пьянствовать и безобразия нарушать!!!
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 5 2007, 08:56
Сообщение #29


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



А разве для glib и uClib разные тулчейны нужны?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
Idle
сообщение Sep 5 2007, 09:08
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(3.14 @ Sep 5 2007, 12:56) *
А разве для glib и uClib разные тулчейны нужны?

Да, buildroot и нужен в первую очередь, для того, чтобы собрать toolchain именно для использования с uClibc.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 13:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016