欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

qemu debug linux内核,qemu调试linux内核

发布时间:2025/3/19 linux 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 qemu debug linux内核,qemu调试linux内核 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2012.03.19

网上时间过早的讲编译内核的文章完全不用看,比如什么讲kgdb的,现在这个东西早就被集成到内核里了。还有调试内核的一些允许kernel

debugging的选项,在新版本中也早已是默认选中了。

简单地说,qemu相当于一个虚拟化的工具。

编译过linux内核有两个部分,第一个是vmlinux文件,100多MB的样子,包含源代码的符号映射表;还有一个是bzImage,是压缩过的内核,只有几MB。

qemu上运行的内容为:内核bzImage +

磁盘镜像xxx.img。磁盘镜像可以用busybox制作,但是也可以从qemu官网下载已经制作好的(左边一栏选testing

qemu,有个文件叫linux-0.2.img),大约8MB。

qemu加这两个东西,就变成了一个完整的Linux系统

切记用chmod命令修改内核和磁盘镜像文件的权限,否则可能导致qemu不能正常读取。为了简单我直接chmod 777

xxx了(所有用户所有权限)。

#qemu-system-i386 -S -kernel bzImage -hda linux-0.2.img -append

root=/dev/sda

这就把磁盘镜像和内核挂载到qemu上了。此时qemu出现黑屏,按ctrl+alt+2进入命令行终端模式。

在qemu命令行中输入gdbserver,发现开始监听tcp:1234端口。(1234是qemu默认设置)

新开一个终端,输入 #gdb vmlinux,开始读取大内核及符号映射。设置断点 #br start_kernel

接着开始远程传输指令 #target remote localhost:1234

输入#c (continue),开始继续执行,此时内核会自动执行到start_kernel()函数并暂停。

高版本的C函数库编译的程序放在linux-0.2.img中可能会报错,是由于该文件系统中的C库过老导致的。编译时采用静态编译即可解决这一问题

总结

以上是生活随笔为你收集整理的qemu debug linux内核,qemu调试linux内核的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。