我使用主线源代码、最新版本和这个配置。
我创建了 Bullseye 作为建议者的图像这里
然后我在 QEMU 中运行它(设置相对环境变量):
qemu-system-x86_64 -m 2G -smp 2 -kernel $KERNEL/arch/x86/boot/bzImage -append "console=ttyS0 root=/dev/sda earlyprintk=serial net.ifnames=0 noxsave" -drive file=$IMAGE/bullseye.img,format=raw -net user,host=10.0.2.10,hostfwd=tcp:127.0.0.1:10021-:22 -net nic,model=e1000 -enable-kvm -nographic -pidfile vm.pid -cpu host 2>&1 | tee vm.log
这是内核日志我有。
问题是有控制台没有登录提示并且控制台似乎被冻结了。因此,启动过程不知何故卡住了。
我尝试通过-s -S
向 QEMU 添加选项来附加 GDB,然后gdb vmlinux
从 Linux 内核文件夹执行操作,然后我发现它由于某种原因卡在某个地方(注意,一旦它卡在日志末尾,我就给出了 Ctrl-C (SIGINT),其中即使几分钟后也不会出现进一步的输出)。
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x000000000000fff0 in cpu_tss_rw ()
(gdb) c
Continuing.
^C
Thread 1 received signal SIGINT, Interrupt.
0xffffffff8d7640ce in ?? ()
(gdb) x/20i $rip-20
0xffffffff8d7640ba: nop
0xffffffff8d7640bb: nop
0xffffffff8d7640bc: nop
0xffffffff8d7640bd: nop
0xffffffff8d7640be: nop
0xffffffff8d7640bf: nop
0xffffffff8d7640c0: endbr64
0xffffffff8d7640c4: xchg %ax,%ax
0xffffffff8d7640c6: verw 0x24c1e13(%rip) # 0xffffffff8fc25ee0
0xffffffff8d7640cd: hlt
=> 0xffffffff8d7640ce: ret
0xffffffff8d7640cf: int3
0xffffffff8d7640d0: int3
0xffffffff8d7640d1: int3
0xffffffff8d7640d2: int3
0xffffffff8d7640d3: data16 cs nopw 0x0(%rax,%rax,1)
0xffffffff8d7640de: data16 cs nopw 0x0(%rax,%rax,1)
0xffffffff8d7640e9: data16 cs nopw 0x0(%rax,%rax,1)
0xffffffff8d7640f4: data16 cs nopw 0x0(%rax,%rax,1)
0xffffffff8d7640ff: nop
(gdb)
ret 之前的指令hlt
表明机器已停止。任何人都知道这里出了什么问题以及如何解决它?
答案1
在启动阶段的早期(当您的发行版的启动屏幕显示时)按“esc”。屏幕底部的模块是您要禁用的模块。
要禁用它,请启动 LiveCD 或将硬盘驱动器连接到另一台计算机。
在驱动器的根目录中,运行
sudo echo blacklist <kernel module> > /etc/modprobe.d/blacklist.conf
这应该是问题的唯一原因。