|
|
  |
Embedded linux bootstraping, ликбез |
|
|
|
Sep 5 2007, 10:13
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Вообще-то glib и glibc - разные вещи. Судя по именам файлов у Вас glibc (что и ожидалось). Используйте crosstools. Файлы конфигурации для IXP4xx во вложеном архиве - используйте для примера. Цитата 3) незная как правильно приложить патчи ioperm.c.diff и Makeconfig.patch, тупо нашел редактируемые строки в изменяемых файлах и руками попроавил Код cd в_каталог_исходников_которые_нужно_патчить patch -p1 -iпуть_к_файлу_различий путь_к_файлу_различий - обычно имя файла заканчивается на .patch или .diff p1 - посмотрите man patch
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Sep 5 2007, 13:24
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(3.14 @ Sep 5 2007, 15:17)  А что в скрипте all.sh должно быть? crosstools? Этот скрипт меняеть не надо. Он собственно все и собирает. Цитата Попробовал собрать buildroot, а эта падлюка останавливается (может просто стоять час ничего ни делая, на большее время терения не хватило) после загрузки binutils, причем я уже три разные версии binutils попробовал  Сборка toolchain занимает несколько часов. crosstools все сообщения выводит на экран. buiodroot - не знаю. Если перенаправить вывод, то экран будет пустой, а все сообщения пойдут в файл. Его лучше смотреть с помощью tail -F имя_файла с другой консоли.
Сообщение отредактировал amw - Sep 5 2007, 13:27
Прикрепленные файлы
all.sh.zip ( 2.17 килобайт )
Кол-во скачиваний: 26
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Sep 5 2007, 14:11
|

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

|
Цитата(amw @ Sep 5 2007, 17:24)  Если перенаправить вывод, то экран будет пустой, а все сообщения пойдут в файл. Его лучше смотреть с помощью tail -F имя_файла с другой консоли. Я вот так делаю: make -w 2>&1 | tee make.out Можно потом лог посмотреть. Собирается действительно долго, не один час. Но если висит - посмотреть в каком месте, может что из интернета ждет.
--------------------
Водку пьянствовать и безобразия нарушать!!!
|
|
|
|
|
Sep 6 2007, 07:49
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(3.14 @ Sep 6 2007, 09:40)  В продолжение сборки buildroot, сегодня, видимо из-за фазы луны  , сборка не остановилась на старом месте, зато встала потом с ошибкой: Цитата CC libc/sysdeps/linux/arm/syscall.os libc/sysdeps/linux/arm/syscall.c: In function 'syscall': libc/sysdeps/linux/arm/syscall.c:28: error: '__NR_syscall' undeclared (first use in this function) libc/sysdeps/linux/arm/syscall.c:28: error: (Each undeclared identifier is reported only once libc/sysdeps/linux/arm/syscall.c:28: error: for each function it appears in.) make[2]: *** [libc/sysdeps/linux/arm/syscall.os] Error 1 make[1]: *** [lib/libc.so.0] Ошибка 2
Ну, из собственного опыта, toolchain либо собирается сразу и работает как надо, либо приходится долго изращатся с устранением вот таких ошибок. Точно сказать что делать не могу. Примерно следующая комбинация действий может помочь. 1. Что используется на ХОСТЕ для сборки (дистрибутив, версия хост компиллятора). 2. Как я понял, у Вас есть какой-то кросскомпилятор, может из состава BSP? Что он говорит по команде arm-linux-as -v 3. Что говорит по команде arm-linux-gcc -v 4. Как я понял, у Вас есть корневая ФС (рамдиск)? Вы можете ее примонтировать на хосте? Что говорят команды ls -l lib/ld-linux* ls -l lib/ld-* Пути относительно точки монтирования этой ФС!!! 5. Какое ядро используется в оригинале? Попробовать собрать buildroot или crosstools из компонентов тех-же версий и с той-же конфигурацией. Желательно, тем-же хост-компилятором, но это уже из разряда сказочных совпадений  . Искать причину ошибки компиляции и править исходники gcc/glibc занятие муторное. Ну и на всякий случай, google иногда помогает найти нужный патч. Хотя, и не особо надейтесь на это. Еще можно посмотреть архив списка рассылки на http://www.arm.linux.org.uk/mailinglists/ по toolchain. Сначала почитать Etiquette, потом появится список.
Сообщение отредактировал amw - Sep 6 2007, 07:53
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Sep 6 2007, 08:11
|

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

|
Чего то я не пойму ... buildroot сам качает ядро, toolchain, uClibc и т.п. потом по замыслу он и должен все это сам собрать и подготовить корневуху. Разве мое текущее ядро (из BSP) и тулчейн имеет к buildroot отношение? Цитата [root@linuxServer buildroot]# arm-linux-as -v GNU assembler version 2.14.90.0.7 (arm-linux) using BFD version 2.14.0.0.7 20031029
[root@linuxServer buildroot]# arm-linux-gcc -v Reading specs from /usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/specs Configured with: ../gcc-3.3.2/configure --target=arm-linux --prefix=/usr/local/arm-linux --enable-languages=c,c++ --with-local-prefix=/usr/local/arm-linux/arm-linux --with-cpu=xscale --with-headers=/usr/local/arm-linux/arm-linux/include --host=i686-host_pc-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-shared --enable-c99 --enable-long-long --without-fp Thread model: posix gcc version 3.3.2 [root@linuxServer buildroot]# Цитата -rwxr-xr-x 1 root root 93888 Май 4 2006 lib/ld-2.3.6.so lrwxrwxrwx 1 root root 11 Май 5 2006 lib/ld-linux.so.2 -> ld-2.3.6.so
lrwxrwxrwx 1 root root 11 Май 5 2006 lib/ld-linux.so.2 -> ld-2.3.6.so
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
Sep 6 2007, 08:22
|

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

|
Цитата(3.14 @ Sep 6 2007, 12:11)  Чего то я не пойму ... buildroot сам качает ядро, toolchain, uClibc и т.п. потом по замыслу он и должен все это сам собрать и подготовить корневуху. Разве мое текущее ядро (из BSP) и тулчейн имеет к buildroot отношение? Он может правильно собрать тулчейн, который потом можно использовать. Одно но - при сборке намертво привязывается к некоторым путям, переместить можно, но много возни. Лучше собрать где удобно, а потом сделать ссылку откуда удобно на корень тулчейна - и пользоваться.
--------------------
Водку пьянствовать и безобразия нарушать!!!
|
|
|
|
|
Sep 6 2007, 09:33
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(3.14 @ Sep 6 2007, 11:11)  Чего то я не пойму ... buildroot сам качает ядро, toolchain, uClibc и т.п. потом по замыслу он и должен все это сам собрать и подготовить корневуху. Разве мое текущее ядро (из BSP) и тулчейн имеет к buildroot отношение? А качает он те-же версии, что и в BSP? Не все комбанации версий собираются "чисто". Для некоторых комбинаций нужно долго искать патчи. А в BSP есть glibc (ну или uClibc)? Почему-бы не использовать то, что есть. Цитата Он может правильно собрать тулчейн, который потом можно использовать. Одно но - при сборке намертво привязывается к некоторым путям, переместить можно, но много возни. Лучше собрать где удобно, а потом сделать ссылку откуда удобно на корень тулчейна - и пользоваться. Главное разместить все правильно. См. результат вывода arm-linux-gcc -v на предмет --prefix. В этот префикс и нужно все положить. Прописать в PATH (см. пост #25) и использовать. По идее линкер должен сам все найти (в смысле библиотеки), если они расположены в тех местах, где он ищет. Если не находит, указать -Lпуть_к_библиотекам. Например Код LDFLAGS=-L/usr/local/arm-linux/arm-linux/lib configure make Для busybox это не проходит. Найдите в .config файле или Makefile LDFLAGS и пропишите пути. Я почему-то решил, что в BSP нет glibc - потому и нужно компилировать. Если есть, используйте их!
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Sep 6 2007, 10:27
|

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

|
В /usr/local/arm-linux/arm-linux/lib лежит одна либа libiberty.a и директория gcc-lib, наверное это все-таки не те либы которые нужны для сборки бузибокса.
В /home/pi/src/linux-2.6.12.4-col2/lib/ лежит lib.a и небольшая кучка исходников (типа vsprintf.c ...) с объектниками, это оно (glibc) ?
Насколько я понимаю, мне нужно еще и пути к хидерам указывать (-I /home/pi/src/linux-2.6.12.4-col2/include ...), только там куча поддиректорий (в /linux-2.6.12.4-col2/include) типа asm, asm-arm ...
Еще, в makefile бузибокса LDFLAFS := ${LDFLAGS}, т.е. насколько понимаю, где то в меню должно быть поле для ввода? Пока ничего подобного не нашел.
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
Sep 6 2007, 11:18
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(3.14 @ Sep 6 2007, 13:27)  В /usr/local/arm-linux/arm-linux/lib лежит одна либа libiberty.a и директория gcc-lib, наверное это все-таки не те либы которые нужны для сборки бузибокса. Посмотрите в /usr/local/arm-linux/lib Цитата В /home/pi/src/linux-2.6.12.4-col2/lib/ лежит lib.a и небольшая кучка исходников (типа vsprintf.c ...) с объектниками, это оно (glibc) ? Это только для ядра!!! Не используйте в программах!!! Цитата Насколько я понимаю, мне нужно еще и пути к хидерам указывать (-I /home/pi/src/linux-2.6.12.4-col2/include ...), только там куча поддиректорий (в /linux-2.6.12.4-col2/include) типа asm, asm-arm ... Ссылки в исходниках на хедеры ядра идут с указанием подкаталога #include <linux/fs.h> #include <asm/types.h> и тп. Достаточно указать -I/home/pi/src/linux-2.6.12.4-col2/include Программы довольно редко используют хедеры ядра. Цитата Еще, в makefile бузибокса LDFLAFS := ${LDFLAGS}, т.е. насколько понимаю, где то в меню должно быть поле для ввода? Пока ничего подобного не нашел. Это значит, что используется переменная окружения. Используется так: Код make LDFLAGS=-L/usr/local/arm-linux/lib или так Код export LDFLAGS=-L/usr/local/arm-linux/lib make ну или так Код make LDFLAGS="-L/usr/local/arm-linux/lib -L/usr/local/arm-linux/arm-linux/lib -L/usr/local/arm-linux/lib/gcc/3.3.2/lib" Просто посмотрите где у Вас в toolchain есть файлы lib*.a и lib*.so* и укажите эти каталоги. Если toolchain установлен ... ну скажем так ... не совсем правильно - то есть чего-то не хватает или не там лежит, то нужно прописывать пути к библиотекам и хедерам в ручную. С другой стороны, busybox, не совсем правильная программа  . Пропишите в Makefile путь прямо открытым текстом.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Sep 7 2007, 08:08
|

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

|
Спасибо, уже лучше, по крайней мере собраный бузибокс наконец заработал (в1.7). Странно, я думал, если бузибокс собран не статически, то он должен и памяти меньше потреблять (после запуска), на данный момент каждая "реинкорнация" бузибокса берет !!!2М БАЙТА!!!, хотя старая (в1.2) отнмала по 0.5М. Не статически, новый бузибокс, с ходу не собирается.
Далее, у меня есть исходники утилит Z-modem-а, как теперь должен выглядеть процесс их сборки под кросс-компилятором (просто в makefile подменить компилятор и LDFLAGS)?
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
Sep 7 2007, 08:52
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(3.14 @ Sep 7 2007, 11:08)  Спасибо, уже лучше, по крайней мере собраный бузибокс наконец заработал (в1.7). Странно, я думал, если бузибокс собран не статически, то он должен и памяти меньше потреблять (после запуска), на данный момент каждая "реинкорнация" бузибокса берет !!!2М БАЙТА!!!, хотя старая (в1.2) отнмала по 0.5М. Не статически, новый бузибокс, с ходу не собирается.
Далее, у меня есть исходники утилит Z-modem-а, как теперь должен выглядеть процесс их сборки под кросс-компилятором (просто в makefile подменить компилятор и LDFLAGS)? Дальнейший процесс сборки софта кросс-компилятором выполняется путем Код cd в_каталог_исходников configure --target=arm-linux --host=arm-linux Не забудте прописать пути правильно!!! Еще вариант. Код export CFLAGS="-Iпуть1 -Iпуть2" export CXXFLAGS="-Iпуть1 -Iпуть2" export LDFLAGS="-Lпуть1 -Lпуть2" export CC=arm-linux-gcc export CXX=arm-linux-g++ export LD=arm-linux-ld configure --target=arm-linux --host=arm-linux Здесь следует обратить внимание на то, что часто в качестве линкера после configure будет не ld, а gcc или g++. Тогда надо LD=arm-linux-gcc или LD=arm-linux-g++ Если нет configure, то тогда править Makefile. Заменить переменные CC, CXX, LD, STRIP и им подобные. Указать кросс-компилятор. Поправить CFLAGS, CXXFLAGS, LDFLAGS. Ну и соответственно, некоторые программы вообще не используют переменных в Makefile, тогда заменить имя компилятора, линкера, флаги...
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Oct 3 2007, 11:31
|

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

|
собрал новое ядро, дык оно упорно не хочет распаковывать ramdisk с корневухой, пишет: Код RAMDISK: Compressed image found at block 0 bad gzip magic numbers Меняю ядро на старое, грузится без вопосов. Если новому ядру подсунуть не gzip-нутый образ корневухи, тогда грузится нормально.
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|