免费织梦模板,wordpress主题,web前端设计,建站教程,Photoshop教程,免费网站模板资源下载_微思考

使用gdb跟踪Linux内核启动过程的分析

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

朱明涛 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 

实验指导

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

cd LinuxKernel/

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

内核启动完成后进入menu程序(《软件工程C编码实践篇》的课程项目),支持三个命令help、version和quit

使用gdb跟踪调试内核

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

# 关于-s和-S选项的说明:

# -S freeze CPU at startup (use ’c’ to start execution)

# -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

另开一个shell窗口

gdb

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

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

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

实验要求:

使用gdb跟踪调试内核从start_kernel到init进程启动

详细分析从start_kernel到init进程启动的过程

实验过程:

1.登录实验楼linux内核分析实验,打开实验环境

打开shell

执行命令:cd LinuxKernel/

执行命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

启动MenuOS。包含三个命令:help,version,quit。

2015032204.png

2.使用gdb跟踪调试内核

执行命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 

2015032205.png

重新打开一个shell,使用gdb命令进行调试

1.file linux-3.18.6/vmlinux

2.target remote:1234

3.break start_kernel

2015032206.png

使用c命令继续运行,使用list命令查看上下文,如此往复,可以最终理解内核启动过程

2015032207.png

总结

start_kernel() 中调用了一系列初始化函数,以完成kernel本身的设置。

Linux内核的启动,就是start_kernel()来进行各种初始化工作,最终执行到rest_init()来初始化0号进程和1号用户态的进程。然后操作系统就运行起来了。



百家号 互联网微风说

百家号 互联网微风说

微信公众号 weisico-com

微信公众号weisico-com

转载请注明:微思考学习网-关注技术,分享知识 >> 使用gdb跟踪Linux内核启动过程的分析

赞 (0) 收藏
分享到