Как проверить, запускается ли /init /etc/inittab

У меня есть встроенная система ARM с процессором AT91SAM9G45.

Система состоит из двух компонентов:

  1. Ядро Linux (4.14.79)
  2. 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

Другие вопросы по тегам