Понимание инициализации ядра с точки зрения qemu
Я пытаюсь создать минималистскую настройку для виртуальной машины на основе ARM, используя qemu. Я следую этому руководству, чтобы сделать это.
Однако, следуя этому руководству, я ничего не увидел на консоли QEMU, так как считаю, что мы не передавали console=
параметр для ядра. Итак, моя модифицированная команда вызова qemu выглядит так:
qemu-system-arm -M vexpress-a9 -dtb ./linux-4.20.8/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ./linux-4.20.8/arch/arm/boot/zImage -initrd rootfs.img --append "root=/dev/ram rdinit=/sbin/init console=ttyAMA0" --nographic
Однако я все еще получаю следующие предупреждения (ошибки??) при загрузке:
mount: you must be root
mount: you must be root
mdev: /sys/dev: No such file or directory
can't open /dev/tty3: No such file or directory
can't open /dev/tty2: No such file or directory
Я попытался создать мягкую ссылку на неиспользуемые консольные устройства, чтобы dev/null
вроде так на корневом терминале ВМ ака
ln -sf /dev/null /dev/tty2
но это не останавливает эти раздражающие предупреждения. Кроме того, я не могу понять, почему не работают команды монтирования?
Может ли кто-нибудь, пожалуйста, подробно описать эти (я считаю общие) проблемы. Кроме того, когда я пытаюсь поместить rootfs в файл ext3, смонтированный в цикле, а затем использовать его как -hda
он даже не находит /sbin/init
файл. Я делаю корень setuid как предложено
sudo chmod u+s ./bin/busybox
но это, похоже, совсем не помогает
Я в полной растерянности и вцепился в соломинку. Может ли кто-нибудь рассказать о настройке?
Может ли кто-нибудь указать мне на статью / блог, в котором помимо упоминания о том, как, а также говорится, почему мы делаем то, что делаем. Я был бы очень благодарен
0 ответов
В соответствии с вашими инструкциями в командной строке ядра (rdinit) ядро Linux запускает / sbin / init после загрузки в качестве первого пользовательского процесса.
Тот, который обычно настраивается с помощью Busybox (есть несколько вариантов), будет читать файл конфигурации с именем / etc / inittab и действовать в соответствии с тем, что там написано.
Выполнение /etc/init.d/rcS, если вообще выполняется, выполняется из этого файла.
Трудно точно определить, что происходит, но для начала взгляните на / etc / inittab. Возможно, он уже монтируется / proc.
По крайней мере, я предполагаю, что ошибки, связанные с / dev / ttyy, происходят из директив в этом файле и могут быть отключены путем его редактирования.