URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 95058
[ Назад ]

Исходное сообщение
"Минимальный initrd для встраиваемых систем"

Отправлено Pasa , 02-Окт-13 11:54 
Всем доброго дня/ночи/вечера/утра!
Есть отладочная плата от 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?


Содержание

Сообщения в этом обсуждении
"Минимальный initrd для встраиваемых систем"
Отправлено тень_pavel_simple , 02-Окт-13 13:00 
>[оверквотинг удален]
> монтирует 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"


"Минимальный initrd для встраиваемых систем"
Отправлено Pasa , 03-Окт-13 02:20 

> 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 имеет, естественно, все атрибуты доступа и запуска для всех пользователей.


"Минимальный initrd для встраиваемых систем"
Отправлено izyk , 03-Окт-13 11:11 
Я бы подсунул, то что просит "init", а потом, если не получится, значит,
ядро не поддерживает ваш initrd, в .config забыли что-то, нужное сжатие, или еще какую опцию.

"Минимальный initrd для встраиваемых систем"
Отправлено Pasa , 03-Окт-13 12:12 
> Я бы подсунул, то что просит "init", а потом, если не получится,

В голову приходила мысль соорудить самопальный init, буду пробовать, .....но вот почему не работает конструкция , сделанная "по-писанному"



"Минимальный initrd для встраиваемых систем"
Отправлено Pasa , 03-Окт-13 12:16 
> ядро не поддерживает ваш initrd, в .config забыли что-то, нужное сжатие, или
> еще какую опцию.

вот и пытаюсь понять , где у меня что не так. Поэтому и обратился к статьям, где умные люди по полочкам разложили весь процесс....но не могу повторить его...ищу помощи, подскажите , люди добрые, где ошибка у меня


"Минимальный initrd для встраиваемых систем"
Отправлено Аноним , 03-Окт-13 14:28 
> Ядро ругается: "Failed to execute /linuxrc. Attempting defaults...."
> Скриптовый файл /linuxrc имеет, естественно, все атрибуты доступа и запуска для всех
> пользователей.

Детский вопрос, но уточните: а обработчик скрипта linuxrc у вас точно есть?
А то может быть вы скопировали из статьи строку "#!/bin/ash" , а его нет? :)


"Минимальный initrd для встраиваемых систем"
Отправлено Pasa , 03-Окт-13 19:54 
>> Ядро ругается: "Failed to execute /linuxrc. Attempting defaults...."
>> Скриптовый файл /linuxrc имеет, естественно, все атрибуты доступа и запуска для всех
>> пользователей.
> Детский вопрос, но уточните: а обработчик скрипта linuxrc у вас точно есть?
> А то может быть вы скопировали из статьи строку "#!/bin/ash" , а
> его нет? :)

Появились мысли, что Busybox собран криво. Погружаюсь в этот момент. Отпишусь по результатам.


"Минимальный initrd для встраиваемых систем"
Отправлено Pasa , 11-Окт-13 12:25 
>>> Ядро ругается: "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 для встраиваемых систем"
Отправлено Аноним , 03-Окт-13 10:55 
Может не по теме, но всё же:
А зачем вообще для встраиваемых систем нужен initrd?
Может лучше вставить все драйверы в ядро и забыть об initrd?

"Минимальный initrd для встраиваемых систем"
Отправлено Pasa , 03-Окт-13 12:22 
> Может не по теме, но всё же:
> А зачем вообще для встраиваемых систем нужен initrd?
> Может лучше вставить все драйверы в ядро и забыть об initrd?

ну совсем без файловой системы, думаю, обойтись никак нельзя. Скажем, предыдущий мой проект, нуждался в небольших файл-логах, и сами приложения должны были где-то лежать, на какой-то файловой сиcтеме. Да и драйвера устройств (каталог /dev) должен быть где-то расположен.