Цитата(Dron_Gus @ Nov 5 2008, 01:31)

Самостоятельный исполняемый.
Хм. А откуда он?
Например для init -> /bin/busybox формат файла /etc/inittab будет другой (не такой как для обычного init используемого в ПК).
Возможно тут есть подвох.
Цитата
Код
arm-angstrom-linux-gnueabi-readelf -d busybox
There is no dynamic section in this file.
Это хорошо. Для начала упростим себе жизнь.
Цитата
Код
arm-angstrom-linux-gnueabi
-readelf -d init.sysvinit
Dynamic section at offset 0x6184 contains 24 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libc.so.6]
...
libc.so.6 присутствует в /lib.
Это хорошо, но!
Нужен по крайней мере еще и ld.so. Используются различные имена для ссылок на него. Например:
Код
$ ls -l /lib|grep ld-
-rwxr-xr-x 1 root root 119288 жов 13 17:50 ld-2.7.so
lrwxrwxrwx 1 root root 34 жов 29 14:40 ld-linux.so.2 -> /emul/ia32-linux/lib/ld-linux.so.2
lrwxrwxrwx 1 root root 9 жов 29 14:40 ld-linux-x86-64.so.2 -> ld-2.7.so
Это на ПК 64 бит система.
У Вас будет типа такого
Код
$ ls -l /lib|grep ld-
-rwxr-xr-x 1 root root 121440 жов 13 17:51 ld-2.7.so
lrwxrwxrwx 1 root root 9 жов 29 14:40 ld-linux.so.2 -> ld-2.7.so
Это динамический линкер - нужен для динамической линковки. Ну и любая динамическая либа может быть слинкована с другой, что не обязательно фигурирует в исполняемом файле.
Убедитесь, что библиотеки в /lib используют то-же ABI что и ядро. То же относится к busybox независимо от того как он слинкованЦитата
Код
-rwxr-xr-x 1 1000 1000 1127916 Nov 2 00:12 libc-2.6.1.so
lrwxrwxrwx 1 root root 14 Jan 1 1998 libc.so -> /lib/libc.so.6
lrwxrwxrwx 1 1000 1000 13 Nov 4 14:54 libc.so.6 -> libc-2.6.1.so
Попробую пересобрать инит статически, если это возможно.
Вот строка с которой пытался запустить.
Код
mem=64M console=ttyS0,115200 root=/dev/sda1 rootwait init=/bin/sh
Результат все тот же
Код
Freeing init memory: 108K
Kernel panic - not syncing: Attempted to kill init!
В том то и дело, что если не передавать ядру init=... то просто тишина. Нет приглашения логиниться. Но ядро же не паникует! Т.е. я делаю вывод о том, что init правильный. Проосто в скрипте инициалиации чего-то не хватает для запуска getty или чего-то подобного на ttyS0. Или я не правильно рассуждаю?
Вроде правильно.
Тогда, используя /sbin/init (не перопределяя его в командной строке) попробуем следующее.
1. Есть ли /dev/console
2. Есть ли /dev/ttyS0
3. Упростите /etc/inittab примерно до такого (соблюдая формат Вашего init)
Код
id:5:initdefault:
S:12345:respawn:/sbin/getty 115200 ttyS0
4. /sbin/getty -> /bin/busybox ?? Или самостоятельный исполняемый? А может ему передать /dev/ttyS0?
5. Проверяем, сконфигурирован ли busybox с поддержкой init и выключаем его.
6. Попробуйте написать свою простейшую программу типа
int main()
{
fprintf(stdout, "Hello\n");
fprintf(stder, "Hello\n");
return 0;
}
Скомпилировать ее статически и подсунуть ее init=/bin/your_test_prog
Что получится?
Компилятор по умолчанию создает исполняемые файлы в формате gnueabi? Следите за тем, чтобы все программы были в том же формате, что и ядро. Включая glibc.
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.