但是这里有几个问题要说一下,关于什么是make menuconfig,不知道的同学去google下,另外执行命令需要ncurses库的支持,不然你执行
make menuconfig会报错,这里大家可以去官网下:
http://ftp.gnu.org/pub/gnu/ncurses/
版本应该问题不大,我选择的是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如何使用呢?
直接终端输入:
dmee@localhost:~$qemu -s -S -kernle linux-2.6.11.12/arch/i386/boot/bzImage
参数说明:
-s: qemu在端口1234监听gdb的调试连接
-S: 让qemu启动后暂停,等待gdb的连接
-kernel: 指定bzImage的路径
由于我目前的关注重点是内核初始化的一些过程,所以更高级的qemu功能先暂时不去研究,后面用到再说。
之后我们另开启一个终端,在源码的顶层目录输入:
dmee@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了!后面关于一些使用或者调试的心得,再来跟大家分享!
22/2<12