# gdb # (gdb) file linux-3.18.6/vmlinux //load Linux符号表 Reading symbols from linux-3.18.6/vmlinux...done. # (gdb) target remote:1234 //远程连接监听在TCP 1234的gdb server (gdb) break start_kernel //在start_kernel函数设置断点 Breakpoint 1 at 0xc1a2f7c5: file init/main.c, line 501. (gdb) c //continue,继续执行代码
在继续执行后,最终qemu的输出如下,在qemu虚拟机里运行的Linux系统能成功启动,并且最终以Kernel panic宣告结束。看到call trace打出来的是在initrd_load的时候出错,原因很简单,因为启动系统的时候只指定了bzImage,没有指定initrd文件,系统无法mount上initrd (init ram disk) 及其initramfs文件系统。
到此为止,gdb调试Linux内核代码的基本环境已经搭建完成,可以利用断点来调试启动启动中的细节。后面将介绍如何构建initramfs文件系统,能让qemu运行的Linux系统更像“完整的系统”。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx