Как проверить, запускается ли /init /etc/inittab
У меня есть встроенная система ARM с процессором AT91SAM9G45.
Система состоит из двух компонентов:
- Ядро Linux (4.14.79)
- Busybox 1.29.3 в качестве образа initramfs.
Я подключаюсь к устройству, используя шпаклевку и подключаясь к последовательному порту.
Когда запускается ядро, все идет хорошо. Ядро распаковывает образ initramfs, все файлы найдены и перечислены (я вижу это по сообщениям отладки). Но когда он запускается / init, сообщения журнала:
Freeing unused kernel memory: 384K
This architecture does not have kernel memory protection.
run_init_process BEFORE /init
run_init_process AFTER /init, result = 0
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
/ init - это символическая ссылка на /bin/busybox. Я попытался заменить / init на /sbin/init, /bin/busybox, /linuxrc, но результаты те же.
Файл / etc / inittab:
# Begin /etc/inittab
id::initdefault:
si::sysinit:/etc/init.d/rc S
#l0::wait:/etc/rc.d/init.d/rc 0
#l1::wait:/etc/rc.d/init.d/rc 1
#l2::wait:/etc/rc.d/init.d/rc 2
#l3::wait:/etc/rc.d/init.d/rc 3
#l4::wait:/etc/rc.d/init.d/rc 4
#l5::wait:/etc/rc.d/init.d/rc 5
#l6::wait:/etc/rc.d/init.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t1 -a -r now
su::once:/sbin/sulogin
1::respawn:/sbin/getty ttyS1 115200
2::respawn:/sbin/getty ttyS2 115200
3::respawn:/sbin/getty ttyS3 115200
4::respawn:/sbin/getty ttyS4 115200
5::respawn:/sbin/getty ttyS5 115200
6::respawn:/sbin/getty ttyS6 115200
# End /etc/inittab
Файл /etc/init.d/rcS (этот файл разрешено выполнять):
#!/bin/busybox sh
echo "Hello world!"
Я не знаю, запускается ли даже процесс / init парсингом / etc / inittab или он падает до получения / etc / inittab по некоторым причинам, которые я не могу выяснить. Возможно, в моих файлах / etc / inittab и /etc/init.d/rcS есть ошибки. Возможно, есть некоторые ошибки с терминалом (/etc/init.d/rcS не может записать в стандартный вывод, потому что он заблокирован, приостановлен, используется другим процессом и т. Д.).
Как точно убедиться, что / etc / inittab запущен?
2 ответа
Добро пожаловать в Stackru. Я вижу, что есть пространство между rc и Ssi::sysinit:/etc/init.d/rc S
изменить на
si::sysinit:/etc/init.d/rcS
дайте мне знать, если это работает.
/init - это символическая ссылка на /bin/busybox.
Типичный файл /init в initramfs, созданный Buildroot, который включает Busybox, представляет собой скрипт из семи строк:
#!/bin/sh
# devtmpfs does not get automounted for initramfs
/bin/mount -t devtmpfs devtmpfs /dev
exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console
exec /sbin/init $*
Обратите внимание на комментарий ("devtmpfs не получает автомонтирование для initramfs") и команду монтирования для /dev.
Это / sbin /init (а не /init), который связан с / bin / busybox.
IOW без правильной настройки каталога /dev, пользовательская область не имеет возможности ввода / вывода.
Только после того, как devtmpfs будет смонтирован, должна быть запущена программа init в Busybox, которая затем получит доступ к / etc /inittab.
См. Есть ли способ заставить Linux рассматривать initramfs как конечную корневую файловую систему?
а также
Сделайте так, чтобы CONFIG_DEVTMPFS_MOUNT применялся к initramfs /initmpfs