版本应该问题不大,我选择的是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了!后面关于一些使用或者调试的心得,再来跟大家分享!