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

实验要求

使用gdb跟踪调试内核从start_kernel到init进程启动,详细分析从start_kernel到init进程启动的过程。

  • 题目自拟,内容围绕Linux内核的启动过程,即从start_kernel到init进程启动;
  • 仔细分析start_kernel函数的执行过程
  • 总结部分需要阐明自己对“Linux系统启动过程”的理解,尤其是idle进程、1号进程是怎么来的。

实验步骤

使用实验楼的虚拟机打开shell:

# initrd=init RAM disk 初始化内存盘
# rootfs.img 根文件系统镜像
$ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 

# 关于-s和-S选项的说明:
# 1. -S
# -S freeze CPU at startup (use ’c’ to start execution)
# 2. -s
# -s shorthand for -gdb tcp::1234 
# 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

指令运行出来就是下面这个图的界面:
在这里插入图片描述另开一个窗口,右键终端选择水平分割或是垂直分割,使用gdb跟踪调试内核:

# 打开 GDB 调试器
$ gdb

# 在 GDB 中输入以下命令:

# 在gdb界面中targe remote之前加载内核符号表
(gdb)file linux-3.18.6/vmlinux 

# 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)target remote:1234

# 断点的设置可以在target remote之前,也可以在之后
(gdb)break start_kernel 

在这里插入图片描述打完breakpoint后,按c继续执行:
在这里插入图片描述此时QEMU界面的图像:
在这里插入图片描述好啦,给Linux内核程序打breakpoint的过程大致就是这样,但是以上过程中,我们都是随便打的breakpoint,要想理解内核的运行过程,我们需要先简单地阅读一下源码,然后有目的、带着思考地去打breakpoint。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值