我们也可以先不加-s和-S参数,测试验证一下编译的Linux内核是否能正常启动:
qemu-system-x86_64 -kernel ./bzImage -initrd ./rootfs.img -append "nokaslr console=ttyS0" -nographic
-kernel ./bzImage:指定启用的内核镜像;
-initrd ./rootfs.img:指定启动的内存文件系统;
-append "nokaslr console=ttyS0":附加参数,其中 参数必须添加进来,防止内核起始地址随机化,这样会导致 gdb 断点不能命中;参数说明可以参见这里 。nokaslr
-s:监听在 gdb 1234 端口;
-S:表示启动后就挂起,等待 gdb 连接((CPU 初始化之前冻结起来);
-nographic:不启动图形界面,调试信息输出到终端与参数 组合使用;console=ttyS
如果要退出QEMU虚拟机,可以先按ctrl + a键,然后再按x键,即可退出QEMU 。 3.3 gdb调试Linux内核编译Linux内核时,会生成一个vmlinux文件,vmlinux是Linux内核编译出来的原始的内核文件,可以用来进行调试内核和定位内核问题 。gdb开始调试,设置远程调试的端口1234:cd /usr/src/linux-6.4.11/
gdb vmlinux
target remote :1234
文章插图
跟gdb调试普通程序一样,我们可以设置一下断点,然后按c键继续运行:
b start_kernel
b rest_init
c
文章插图
推荐阅读
- Linux 系统中使用inotifywait监控文件变化
- 保护Linux文件和目录的秘密武器:chattr命令详解
- 自行车怎么学才能学会 电动自行车怎么学才能学会
- 我是大专学会计的 ,可不可以考公安的岗位,大专生考公好考吗?
- 在Linux系统中实现容器化的消息中间件:RabbitMQ和Kafka
- 野钓鲫鱼,学会4个“万金油”招数,在哪儿都能爆护
- 如何在 Linux 中查找映射到 VxVM 磁盘的 SAN LUN
- 一文带你了解Docker与Containerd的区别
- 野钓选钓位,学会这些技巧,深浅都能找到鱼窝
- Linux 最常用命令:能解决 95% 以上的问题