QEMU:使用 rootfs 启动编译内核

问题描述 投票:0回答:1

我正在尝试使用以下命令启动带有 QEMU 的 Linux x86_64:

./qemu-system-x86_64 -M pc -m 2G,slots=4,maxmem=4G -net nic -net user -append "root=/dev/sda2 console=ttyS0" -kernel /home/user/linux/arch/x86/boot/bzImage -hda ubuntu_24.04.raw -nographic -serial mon:stdio

其中 ubuntu_24.04.raw 是安装了 Ubuntu 24.04 的原始磁盘(带有 QEMU):

$ fdisk -l ubuntu_24.04.raw
Disk ubuntu_24.04.raw: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9B4F2BC3-7B90-4E31-A3B3-E3AA45A8C366

Device              Start      End  Sectors  Size Type
ubuntu_24.04.raw1    2048     4095     2048    1M BIOS boot
ubuntu_24.04.raw2    4096  3674111  3670016  1,8G Linux filesystem
ubuntu_24.04.raw3 3674112 20969471 17295360  8,3G Linux filesystem

这会以内核恐慌结束:

[    3.577638] Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Docu.
[    3.578333] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.9.1 #5
[    3.578616] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.o4
[    3.579086] Call Trace:
[    3.579792]  <TASK>
[    3.580303]  dump_stack_lvl+0x2b/0x90
[    3.580729]  dump_stack+0x14/0x20
[    3.580828]  panic+0x33a/0x390
[    3.580947]  kernel_init+0x151/0x170
[    3.581062]  ? __pfx_kernel_init+0x10/0x10
[    3.581171]  ret_from_fork+0x40/0x60
[    3.581270]  ? __pfx_kernel_init+0x10/0x10
[    3.581376]  ret_from_fork_asm+0x1a/0x30
[    3.581566]  </TASK>
[    3.582400] Kernel Offset: disabled
[    3.582848] ---[ end Kernel panic - not syncing: No working init found.  Try passing init= option to kernel.

但是,正如您在命令中看到的,我正在传递基于 Ubuntu 24.04 的完整文件系统。为什么我需要指定 init ?它应该在文件系统中。我真的需要向 QEMU 传递一个 init 或以某种方式加载磁盘映像中的 init 吗?

我想通过 QEMU 命令行传递内核,因为我将对内核进行更改,这将需要修改内核选项。通过映像磁盘执行此操作(安装、修改选项以及使用 QEMU 加载磁盘)可能会很烦人。

linux qemu initrd
1个回答
0
投票

这是因为你没有构建你的 initramfs ...

编译后,可以生成:

mkinitcpio -c /etc/mkinitcpio.conf -g initramfs.img

然后您可以使用 initrd 参数设置这是 qemu 命令行:

./qemu-system-x86_64 -M pc -m 2G,slots=4,maxmem=4G -net nic -net user -append "root=/dev/sda2 console=ttyS0" -kernel /home/user/linux/arch/x86/boot/bzImage -hda ubuntu_24.04.raw -nographic -serial mon:stdio -initrd initramfs.img

© www.soinside.com 2019 - 2024. All rights reserved.