linux内核调试环境的搭建(使用qemu)(2)

版本应该问题不大,我选择的是5.5的版本,因为我看到它的更新日期是2005年,而ubuntu 5.1也是在那个时间发布的,不会用什么兼容上的问题。


执行menuconfig的时候,我们唯一需要做的工作就是在Kernel hacking项目里面将Compile the kernel with debug info和Compile the kernel with frame pointers,两项勾选(在相应项上按空格键,里面都有详细的说明,不会的同学自己看)。这些项目可以让编译时添加调试信息,类似我们平时用的-g选项。


然后make -j4 bzImage,其中-j是让编译时使用多核心,你配置的cpu有几个核心就在后面加上几,比如我的配置的是四核心,那么就是-j4。


等一小会儿(机器快的话)之后,内核编译完成,激动吧。。。。

那么qemu如何使用呢?

直接终端输入:

@localhost:~$qemu -s -S -kernle linux-2.6.11.12/arch/i386/boot/bzImage   参数说明:   -s: qemu在端口1234监听gdb的调试连接   -S: 让qemu启动后暂停,等待gdb的连接   -kernel: 指定bzImage的路径  

由于我目前的关注重点是内核初始化的一些过程,所以更高级的qemu功能先暂时不去研究,后面用到再说。

之后我们另开启一个终端,在源码的顶层目录输入:

@localhost:~/linux-2.6.11.12$ gdb vmlinux  

然后,输入命令:

(gdb) target remote localhost:1234   Remote debugging using localhost:1234   [New Thread 1]   0x0000fff0 in ?? ()   warning: shared library handler failed to enable breakpoint   (gdb)   

之后我们打个断点测试下:

(gdb) b start_kernel   Breakpoint 1 at 0xc030e537: file init/main.c, line 417.   (gdb) c   Continuing.      Breakpoint 1, start_kernel () at init/main.c:417   417     {   (gdb) n   425          page_address_init();   (gdb)   

ok了!后面关于一些使用或者调试的心得,再来跟大家分享!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21315.html