2023-2024-1 20232801刘莹《Linux内核原理与分析》第四周作业

实验三:跟踪分析Linux内核的启动过程

1、使用实验楼的虚拟机打开shell,代码如下

cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

运行结果

2.使用gdb跟踪调试内核

代码如下:

$ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

运行结果

使用ChatGPT来解释这段代码的理解 以及说明-s 和-S的选项

打开gdb调试器,建立gdb和gdbserver之间的连接。断点被设置在start_kernel

3、总结:

使用 gdb 跟踪调试内核从 start kernel 到 init 进程启动方法

  1. 准备内核和QEMU:

    • 编译Linux内核,确保启用了GDB支持。
    • 使用QEMU启动虚拟机,像之前提到的那样,使用 -s-S 选项。
  2. 在虚拟机外部,使用GDB连接到虚拟机的GDB服务器:

    gdb (gdb) target remote localhost:1234

    这将连接到QEMU的GDB服务器,其中 localhost 是虚拟机的主机名,1234 是GDB服务器的默认端口。

  3. 从启动内核到init进程启动:

    a. 首先,让内核执行到启动点。使用以下命令继续内核的执行:

    (gdb) continue

    b. 内核将执行启动过程,直到启动init进程。在这个过程中,您可以使用GDB的调试命令来观察和跟踪内核的执行。例如,使用 break 命令设置断点,使用 step 命令单步执行代码,使用 info registers 命令查看寄存器状态等。

    c. 通常,内核启动过程中的关键点包括 start_kernel 函数的调用,启动初始化进程(通常是 /sbin/init)等。您可以设置断点以在这些关键点停止内核的执行并检查状态。

    d. 当您到达 init 进程启动的关键点时,您可以查看用户空间进程的调试信息。如果需要,您可以继续跟踪用户空间的进程,就像在普通用户空间程序上一样。

  4. 使用GDB的其他功能来进一步分析内核的行为,如查看内存、堆栈、变量等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值