Цитата
Неоднократно использовал Initramfs. Собирал его Busybox'ом. Работало все отлично со множеством архитектур.
Шаги такие:
1. Качаете Busybox на официальном сайте www.busybox.org
2. Выставляете необходимые опции через make menuconfig. Для начала экспириментов обязательно выставьте опции сборки static.
3. Собираете Busybox: make CROSS_COMPILE=префикс
3. Инсталлируете (по умолчанию в каталог _install): make install CROSS_COMPILE=префикс
4. В каталоге _install делаете ссылку init на bin/busybox
5. Добавляете необходимые файлы устройств в каталог dev, inittab и необходимые скрипты загрузки в etc
6. Запаковываете: find . | cpio -H newc -o > ../initramfs.cpio
7. Архивируете (например gzip): gzip -9 initramfs.cpio
8. Перемещаете в каталог с ядром, указываете в опциях ядра имя файла и алгоритм сжатия. Компилируете и наслаждаетес
На 2 шаге осечка, при выставлении static не хочет компилить:
-----------------------------------------------------------
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
--------------------------------------------------------------
Вижу, что ругается на glibc, мол будут баги при статической компоновке, но не совсем понял что и где поправить.
Без static все компилится.
И еще...для чего делать инсталл - шаг 3?
И для чего шаг 8?
Я так понимаю, что после компиляции получается
исполнимый файл busybox - своего рода универсальная утилита, включающая в себя функционал всех отмеченных при конфигурации модулей.
И достаточно ручками создать ссылки как описано в
http://www.opennet.ru/base/sys/initrd_intro.txt.html. Через эти ссылки будет вызываться на исполнение busybox и отрабатывать
те или иные запрашиваемые действия. Или я не прав?
Но все-таки сделал make install. В итоге в /_insatll получил тот самый исполнимый busybox и кучу разных ссылок. В том числе и @linuxrc в корне. Но все они не текстовые. Просмотреть их не удалось. Очень похожее получается, когда я собираю rootfs через buildroot - тоже busybox, куча ссылок и @linuxrc в корне. Но при загрузке такой rootfs система успешно загружается и запускается консоль с шеллом. Пробовал из /_insatll все взять, скопировать в полученную через buildroot файловую систему , запаковал и подсунул на загрузку.
Но ядро опять в панике.
Что то я совсем запутался. Как же после загрузки и старта заставить ядро выполнить элементарный скрипт.....linuxrc