实验三——跟踪分析Linux内核的启动过程
1.使用实验楼的虚拟机打开shell并使用命令启动内核进入menu程序
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
-
qemu
:这是 QEMU 模拟器,用来启动虚拟机的命令。 -
-kernel linux-3.18.6/arch/x86/boot/bzImage
:指定要使用的 Linux 内核镜像文件bzImage
。这个文件是在编译 Linux 内核时生成的,位于内核源码的arch/x86/boot/
目录下。bzImage
是经过压缩的内核镜像,负责在虚拟机中启动内核。 -
-initrd rootfs.img
:指定要使用的初始内存盘rootfs.img
。初始内存盘是内核启动时加载到内存中的一个临时文件系统,内核启动后会从这个文件系统中加载初始的用户空间程序(例如init
进程)。这个rootfs.img
文件通常包含基本的工具和库。
2.使用 GDB 跟踪调试内核
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
-
-S
:启动时冻结 CPU,等待调试器的连接(使用c
命令启动执行)。 -
-s
:为-gdb tcp::1234
的简写,表示在 TCP 端口 1234 上等待 GDB 连接。
3、连接 GDB 调试器
(1)打开另一个 shell 窗口,并启动 GDB
(2)加载内核符号表
file linux-3.18.6/vmlinux
(3)建立 GDB 与 QEMU 之间的连接
target remote:1234
(4)设置断点
break start_kernel