|
|
  |
Linux для AT91SAM9260, Проблемы с ядром |
|
|
|
Mar 14 2008, 08:24
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(MTh @ Mar 14 2008, 09:56)  А то что busybox ругается когда его пытаешься скомпилить статически, ничего страшного? Говорит что бинарники могут быть битыми? Он предупреждает, что статически слинкованный busybox будет использовать системные вызовы dlopen и пр. при работе с DNS. Пусть его, пускай использует. Главное - при загрузке, когда доступа к shared libraryes еще может не быть, статически слинкованный init (т.е. busybox) не требует этих библиотек. Есть какаято другая ругань? Кроме dlopen? Цитата(MTh @ Mar 14 2008, 02:53)  Карта памяти: Код DataFlash:AT45DB642 Nb pages: 8192 Page Size: 1056 Size= 8650752 bytes Logical address: 0xC0000000 Area 0: C0000000 to C0004144 (RO) bootstrap Area 1: C0004200 to C00083FF Environment Area 2: C0008400 to C0041FFF (RO) U-BOOT 1.20 Area 3: C0042000 to C02FFFFF KERNEL Area 4: C0300000 to C0800000 FS Это, как я понимаю карта флаш памяти, а я имел в виду карту памяти типа C0000000 - CFFFFFFF - Flash 20000000 - 24000000 - SDRAM То есть проверить не накладывается ли образ initrd после распаковки на область памяти ядра. Точнее наоборот. Общаяя рекомендяция загрузки - ядро по младшим адресам ОЗУ, initrd по адресу RAM_Size - sizeof(initrd). Примерно так. Буквально выполнять не обязательно, но придерживаться идеологии. Цитата init слинкован НЕ статически Сейчас пытаюсь собрать все еще раз с нуля так сказать... Если есть какие-то предложения, очень прошу написать )) Про то что busybox должен быть статический я уже понял. Сделайте именно статически. Динамичекой линковкой (а точнее подготовкой запуска динамически слинкованных приложений) можно будет заняться потом. Сколько у Вас UART-ов? Можете глятуть на каждом? Уберите все лишнее из /etc/inittab. оставте только Код ttyS0:askfirst:/bin/sh ttyS1:askfirst:/bin/sh ttyS2:askfirst:/bin/sh ttyS3:askfirst:/bin/sh ttyS4:askfirst:/bin/sh И так по всем UARTам. Сколько их у Вас есть в процессоре а не на плате, включая DBGU (не помню точно есть ли он в Вашем процессоре). Возможно Вы считаете номера UART не в том порядке, в каком их считает Linux.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Mar 14 2008, 09:50
|
Частый гость
 
Группа: Свой
Сообщений: 168
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 423

|
[quote name='MTh' date='Mar 14 2008, 03:53' post='379129'] Переменные окружения: Код ARM M7 BOOT> printenv baudrate=115200 ethaddr=04:05:fe:ed:00:18 ipaddr=XX.XX.XX.XX gatewayip=XX.XX.XX.XX netmask=255.255.255.0 hostname=at91sam9260_arm_test bootcmd=cp.b 0xc0042000 0x21600000 0x1fffff; cp.b 0xc0300000 0x21100000 0x3fffff; bootm 0x21600000 bootdelay=1 serverip=10.10.10.11 stdin=serial stdout=serial stderr=serial
Environment size: 488/8188 bytes А где bootargs ?
|
|
|
|
|
Mar 16 2008, 13:34
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
C bootargs был трабл.... сейчас он есть )) Завтра на работе скину последнее все что есть... Дело в том что начал все это один человек (т.е. ядро-то грузится именно его), а продолжаю я... Пока разбираюсь что к чему и пытаюсь таки перекомпилить и запустить... BuildRoot был собран на ASP Linux, его скачал... и допилил напильником BladeRunner (как я понял пилить пришлось много) Я под Debian собрал buildroot который был на диске argussoft для оценочной платы. Собралось не без проблем, но собралось. Но вот ядро отказывается запускаться напрочь  Завтра продолжу "извращения" и обновлю всю инфу. Очень признателен за помощь. ))
|
|
|
|
|
Mar 17 2008, 08:22
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(MTh @ Mar 17 2008, 04:51)  Сделал статический busybox.... может причина и была в этом.... Большинство проблем, похожих на Ваши, именно в этом и заключаются.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Mar 17 2008, 08:50
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
Теперь другой трабл: поднял сеть... все ок... Пытаюсь скомпилить приложение: Код make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc- Приложение с кучей варнингов компилиться, копирую в коренвую систему, по tftp заливаю... пытаюсь запустить приложение: Код ls hello s.sh # ./hello -sh: ./hello: not found написал небольшой скрипт, в нем вывод строки и запуск hello в двух вариантах: Код # ./s.sh Just string ./s.sh: ./s.sh: 3: hello: not found ./s.sh: ./s.sh: 4: ./hello: not found # Что я делаю не так?
|
|
|
|
|
Mar 17 2008, 09:30
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(MTh @ Mar 17 2008, 10:50)  Теперь другой трабл: поднял сеть... все ок... Пытаюсь скомпилить приложение: Код make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc- Приложение с кучей варнингов компилиться, копирую в коренвую систему, по tftp заливаю... пытаюсь запустить приложение: Код ls hello s.sh # ./hello -sh: ./hello: not found написал небольшой скрипт, в нем вывод строки и запуск hello в двух вариантах: Код # ./s.sh Just string ./s.sh: ./s.sh: 3: hello: not found ./s.sh: ./s.sh: 4: ./hello: not found # Что я делаю не так? 1. Та же проблема, что и с busybox. Скомпилируйте статически. Если запускается - скопируйте нужные библиотеки на rottfs. Как проверить можно посмотреть тут http://electronix.ru/forum/index.php?showtopic=44076 пост #5. Рекомендации и методы в данном вопросе не зависят от архитектуры. Библиотеки лучше всего ложить на rootfs в папку /lib. По крайней мере для начала. Не забывайте что libstdc++ не бывает статической. Таким образом все C++ приложения требуют библиотеку. Некоторые библиотеки зависят от других. Если Ваше приложение требует одну, то нужно копировать обе и т.д. 2. Как я понял Вы используете buildroot. Если да - смотрите в его доках как вставит свое приложение в систему. Не могу сказать подробнее, так как buildroot не использую вообще.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Mar 18 2008, 09:02
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
amw спасибо  Я использовал АРМовый компилер и вместо Makefile скомпилил все напрямую, т.е.: /usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -c hello.c /usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -o hello hello.o Воткнул в rootfs, закинул по tftp и запустилось без проблем... Хотя в Makefile прописал опцию на вызов компилятора именно АРМ... Это и есть статическая линковка? Правда я ядро пересобрал... и в /lib появились библиотеки...
|
|
|
|
|
Mar 18 2008, 09:31
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(MTh @ Mar 18 2008, 11:02)  Я использовал АРМовый компилер и вместо Makefile скомпилил все напрямую, т.е.: /usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -c hello.c /usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -o hello hello.o Воткнул в rootfs, закинул по tftp и запустилось без проблем... Хотя в Makefile прописал опцию на вызов компилятора именно АРМ... Это и есть статическая линковка? Извините - не понял. Про АРМовский компилер. Статическая линковка - это когда все функции и переменные из библиотек вставляются линкеров в исполняемый файл полностью. Динамическая линковка - это когда линкер создает в исполняемом вайле только ссылки на имена функций в библиотеках. При статической линковке - исполняемый файл содержит все, в том числе копии всех используемых им библиотечных функций. При динамической линковке - исполняемый файл содержит только написаный Вами код. Для его запуска необходимы все библиотеки, из которых он использует функции. Статическая линковка: Код /usr/local/arm/gcc-3.4.6-uclibc/bin/arm-linux-uclibc-gcc -Wl,-static -o hello hello.o Динамическая линковка выполняется по умолчанию. (То есть Вы не указали что нужно линковать статически - значит динамически) Цитата ... и в /lib появились библиотеки... У Вас линковка динамическая. Но появились библиотеки. PS: Для uClinux могут быть ньюансы по линковке. Однако тут я Вам помочь не смогу. uClinux не пользую.
Сообщение отредактировал amw - Mar 18 2008, 09:32
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Mar 19 2008, 00:14
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
Цитата(amw @ Mar 18 2008, 12:31)  Извините - не понял. Про АРМовский компилер. Компилятор собранный для компиляции прилады под ARM //*Масло маслянное но факт Цитата(amw @ Mar 18 2008, 12:31)  PS: Для uClinux могут быть ньюансы по линковке. Однако тут я Вам помочь не смогу. uClinux не пользую. Это не uCLinux... Спасибо за развернутый ответ
|
|
|
|
|
Mar 19 2008, 08:15
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(MTh @ Mar 19 2008, 02:14)  Компилятор собранный для компиляции прилады под ARM //*Масло маслянное но факт Очепятка? Про масло я понял а вот про все остальное - нет  . Цитата Это не uCLinux... Используете uClibc? Или просто компилятор стащеный? Я как-то привык сам пересобирать компиляторы, потому плохо ориентируюся в том, что можно скачать. Цитата Спасибо за развернутый ответ  Главное, чтоб в пользу  .
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Mar 21 2008, 08:04
|

Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771

|
Господа, спасайте.... Собрал ядро и ФС... заработало... Потребовалось включить поддержку libusb и libtool... В buildroot в menuconfig включил соответствующие пункты. Собираю все... закидываю на АРМ - вешается после монтирования ФС... пишет freeing init memory 96K и все... тишина.... Правда на вводимые символы реагирует... т.е. echo работает. Иогда система пишет что неверный формат архива... ФС лежит по адресу 0х21100000, ядро по 0х22200000 т.е. между ними около 20 МБ (знаю что много, пока поставил так,чтобы отладить  ) -rw-r--r-- 1 root root 1065698 2008-03-21 15:49 at91sam9260ek-linux-2.6.19-2008-03-21.gz -rw-r--r-- 1 root root 3610702 2008-03-21 15:45 rootfs.arm_nofpu.ext2.gz Версия ядра: 2.6.19.2 Версия buildroot: 2007116-RC2 Вот вывод printenv: Код baudrate=115200 bootdelay=1 boot_addr=0x21600000 ramdisk_addr=0x21100000 ld_root=run linux; run ramdisk; bootm $(boot_addr) ethaddr=04:05:fe:ed:00:18 hostname=at91sam9260_arm_test initrd=0x2118C000,6000000 OS=C0042000 endflash=c083ffff ver=1 config=tftp ${ramdisk} autoscript.${hostname}; autoscr ${ramdisk} kernel-version=2.6.21.1 kernel-date=2007-06-05 fs-date=2007-06-05 get-ramdisk=tftp ${ramdisk} ${rd}; setenv rd-size ${filesize} store-ramdisk=cp.b ${ramdisk} ${FS} ${rd-size} load-ramdisk=cp.b ${FS} ${ramdisk} ${rd-size} flash-ramdisk=run get-ramdisk; run store-ramdisk get-kernel=tftp ${kernel} ${linux}; setenv kernel-size ${filesize} store-kernel=cp.b ${kernel} ${OS} ${kernel-size}; saveenv load-kernel=cp.b ${OS} ${kernel} ${kernel-size}; saveenv flash-kernel=run get-kernel; run store-kernel get=run get-kernel ; run get-ramdisk flash=run flash-kernel; run flash-ramdisk; saveenv load=run load-kernel ; run load-ramdisk fstype=ram flashfs=/dev/mtdblock2 ramfs=/dev/ram access=rw ramdisk_size=15360 console=ttyS0,115200 mem=64M update=os; fs; setargs cmpk=run flash-kernel; cp.b ${OS} ${ramdisk} ${kernel-size}; cmp ${kernel} ${ramdisk} ${kernel-size} rootfstype=ext2 FS=C0300000 bootcmd=run load; bootm 0x21600000 rd=rootfs.ext2.gz linux=linuximage.gz myboot=bootm ${kernel} ramdisk=21100000 bootargs=root=/dev/ram0 initrd=0x21100000,3000000 console=ttyS0,115200 mem=64M rd-size=1d3a14 filesize=1248b3 fileaddr=32000000 gatewayip=10.10.10.1 netmask=255.255.255.0 ipaddr=10.10.10.83 serverip=10.10.10.15 kernel-size=1248b3 kernel=22200000 stdin=serial stdout=serial stderr=serial Заканчивается все вот так: Код 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 #624: 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 #568: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Больше всего меня пугает, то что концовка меняется... т.е. она не постоянно такая... busybox собран статически: Код #arm-linux-uclibc-readelf -d busybox
В этом файле нет динамического раздела.
Сообщение отредактировал MTh - Mar 21 2008, 08:16
|
|
|
|
|
Mar 21 2008, 08:16
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(MTh @ Mar 21 2008, 10:04)  Заканчивается все вот так: Код 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 #624: 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 #568: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Это первое упоминание в логе про RAMDISK? Приведите чуть больше перед этими строками если есть что-то про RAMDISK. Какой формат RAMDISK фактически? Какой формат поддерживает Вами собранное ядро? Скорее всего образ корневухи (RAMDISK) initramfs, а ядро поддерживает только initrd. Или наоборот. Включите в ядре поддержку всех форматов и приведите полный лог загрузки, если будутет та-же проблема.
Сообщение отредактировал amw - Mar 21 2008, 08:17
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Mar 21 2008, 08:24
|
Местный
  
Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821

|
Цитата(MTh @ Mar 21 2008, 09:04)  Код 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 #624: 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 #568: rec_len is smaller than minimal - offset=0, inode=0, rec_len=0, name_len=0 Больше всего меня пугает, то что концовка меняется... т.е. она не постоянно такая... busybox собран статически: Хе, Хе это у тебя файловая система глючит. Помочь не могу, так как подход индивидуальный нужен, сам jffs2 пользую.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|