Всем доброго дня/ночи/вечера/утра!
Есть отладочная плата от StarterKit - армовский проц AT9260.
В комплекте были исходники пропатченного для платы ядра и файловой системы.
Слегка их модифицировал под свою плату, не вдаваясь глубоко в теорию, сделал проект и успешно забыл.Сейчас возникла необходимость реанимровать проект. Решил подойти к изучению линукса основательно - понять как фукционирует/грузится ядро и собирается файловая система. Применение - встраиваемые системы.
На основе материала http://www.opennet.me/base/sys/initrd_intro.txt.html
собрал initrd. Подсунул его вместо прежней файловой системы. Ядро 2.6.28.
И ядро и initrd грузятся через tftpboot c виртуальной машины, на которой я собственно и собираю ядро и файловую систему.
В минимальном созданном вручную initrd в корне сделал linuxrc как описано в мануале.
Но ядро упорно ищет init и не хочет выполнять linuxrc.Но в мануале написано:
"Предпоследний шаг - создание файла linuxrc. После того как ядро
монтирует ram диск, оно ищет init скрипт для выполнения. Если файл init
не найден, ядро выполняет файл linuxrc вместо init."Такое вот на консоль выводит.
Kernel panic - not syncing: No init found. Try passing init= option to kernel.В конфиге ядра:
CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21000000,0x500000 console=ttyS0,115200 mem=32M"Подскажите в каком направлении копать, может я что-то не так понял в руководстве, почему не запускается linuxrc?
>[оверквотинг удален]
> монтирует ram диск, оно ищет init скрипт для выполнения. Если файл init
> не найден, ядро выполняет файл linuxrc вместо init."
> Такое вот на консоль выводит.
> Kernel panic - not syncing: No init found. Try passing init= option
> to kernel.
> В конфиге ядра:
> CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21000000,0x500000 console=ttyS0,115200
> mem=32M"
> Подскажите в каком направлении копать, может я что-то не так понял в
> руководстве, почему не запускается linuxrc?CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21000000,0x500000 console=ttyS0,115200
> mem=32M init=/initrc"
> CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21000000,0x500000 console=ttyS0,115200 mem=32M init=/initrc"прописал :
CONFIG_CMDLINE="root=/dev/ram0 rw initrd=0x21000000,0x500000 console=ttyS0,115200
> mem=32M init=/linuxrc"Ядро ругается: "Failed to execute /linuxrc. Attempting defaults...."
Ну и дальше опять поиск init и впадание в панику.
Скриптовый файл /linuxrc имеет, естественно, все атрибуты доступа и запуска для всех пользователей.
Я бы подсунул, то что просит "init", а потом, если не получится, значит,
ядро не поддерживает ваш initrd, в .config забыли что-то, нужное сжатие, или еще какую опцию.
> Я бы подсунул, то что просит "init", а потом, если не получится,В голову приходила мысль соорудить самопальный init, буду пробовать, .....но вот почему не работает конструкция , сделанная "по-писанному"
> ядро не поддерживает ваш initrd, в .config забыли что-то, нужное сжатие, или
> еще какую опцию.вот и пытаюсь понять , где у меня что не так. Поэтому и обратился к статьям, где умные люди по полочкам разложили весь процесс....но не могу повторить его...ищу помощи, подскажите , люди добрые, где ошибка у меня
> Ядро ругается: "Failed to execute /linuxrc. Attempting defaults...."
> Скриптовый файл /linuxrc имеет, естественно, все атрибуты доступа и запуска для всех
> пользователей.Детский вопрос, но уточните: а обработчик скрипта linuxrc у вас точно есть?
А то может быть вы скопировали из статьи строку "#!/bin/ash" , а его нет? :)
>> Ядро ругается: "Failed to execute /linuxrc. Attempting defaults...."
>> Скриптовый файл /linuxrc имеет, естественно, все атрибуты доступа и запуска для всех
>> пользователей.
> Детский вопрос, но уточните: а обработчик скрипта linuxrc у вас точно есть?
> А то может быть вы скопировали из статьи строку "#!/bin/ash" , а
> его нет? :)Появились мысли, что Busybox собран криво. Погружаюсь в этот момент. Отпишусь по результатам.
>>> Ядро ругается: "Failed to execute /linuxrc. Attempting defaults...."
>>> Скриптовый файл /linuxrc имеет, естественно, все атрибуты доступа и запуска для всех
>>> пользователей.
>> Детский вопрос, но уточните: а обработчик скрипта linuxrc у вас точно есть?
>> А то может быть вы скопировали из статьи строку "#!/bin/ash" , а
>> его нет? :)
> Появились мысли, что Busybox собран криво. Погружаюсь в этот момент. Отпишусь по
> результатам.удалось запустить стартовый скрипт linuxrc. Но никак не удается собрать busybox статически.
Ругается:
-----------------------------------------------------------
applets/applets.c:20:2: error: #warning Static linking against glibc produces buggy executables
applets/applets.c:21:2: error: #warning (glibc does not cope well with ld --gc-sections).
applets/applets.c:22:2: error: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:23:2: error: #warning Note that glibc is unsuitable for static linking anyway.
applets/applets.c:24:2: error: #warning If you still want to do it, remove -Wl,--gc-sections
applets/applets.c:25:2: error: #warning from top-level Makefile and remove this warning.
make[1]: *** [applets/applets.o] Error 1
make: *** [applets] Error 2
--------------------------------------------------------------удаляю -Wl,--gc-sections из makefile....все равно получаю это сообщение
Может не по теме, но всё же:
А зачем вообще для встраиваемых систем нужен initrd?
Может лучше вставить все драйверы в ядро и забыть об initrd?
> Может не по теме, но всё же:
> А зачем вообще для встраиваемых систем нужен initrd?
> Может лучше вставить все драйверы в ядро и забыть об initrd?ну совсем без файловой системы, думаю, обойтись никак нельзя. Скажем, предыдущий мой проект, нуждался в небольших файл-логах, и сами приложения должны были где-то лежать, на какой-то файловой сиcтеме. Да и драйвера устройств (каталог /dev) должен быть где-то расположен.