跟踪分析Linux内核的启动过程
2017-03-12 15:48
399 查看
章强+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
内核启动后即可进入menu程序
使用gdb跟踪调试内核
输入指令
关于-s和-S选项的说明:
-S freeze CPU at startup (use ’c’ to start execution) 在系统启动的时候冻结CPU,使用c键继续执行后续操作
-s shorthand for -gdb tcp::1234 打开远程调试端口,默认使用tcp协议1234端口,若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
打开另一个shell窗口,执行以下指令
输入指令c让start_kernel继续运行,list查看断点处代码
我们还可以再设置一个断点,输入
一部分是硬件平台相关的,存放在./arch/目录下,以平台区分不同目录,比如x86平台就在./arch/x86/目录下,由汇编语言编写而成。另一部分是硬件平台无关的,由C语言编写而成。
./init/main.c中的start_kernel()函数即是Linux内核启动过程由平台相关转为平台无关代码后第一个执行的函数,在这个函数中,Linux内核开始真正进入初始化阶段。
start_kernel中首先由init_task手工创建PCB,即0号进程和最终的idle进程,当系统没有进程可执行时就执行0号进程,其实质就是一个while(1)循环不断检测是否有进程加入,然后可由rest_init创建1号进程和ktreadd内核线程,从而在内核中实现了外部进程的运行,还可以通过trap_init来设置中断向量。
实验截图
使用实验楼的虚拟机打开shellcd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
内核启动后即可进入menu程序
使用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) 在系统启动的时候冻结CPU,使用c键继续执行后续操作
-s shorthand for -gdb tcp::1234 打开远程调试端口,默认使用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之前,也可以在之后
输入指令c让start_kernel继续运行,list查看断点处代码
我们还可以再设置一个断点,输入
break rest-init c list
总结
Linux内核启动代码大致分2部分:一部分是硬件平台相关的,存放在./arch/目录下,以平台区分不同目录,比如x86平台就在./arch/x86/目录下,由汇编语言编写而成。另一部分是硬件平台无关的,由C语言编写而成。
./init/main.c中的start_kernel()函数即是Linux内核启动过程由平台相关转为平台无关代码后第一个执行的函数,在这个函数中,Linux内核开始真正进入初始化阶段。
start_kernel中首先由init_task手工创建PCB,即0号进程和最终的idle进程,当系统没有进程可执行时就执行0号进程,其实质就是一个while(1)循环不断检测是否有进程加入,然后可由rest_init创建1号进程和ktreadd内核线程,从而在内核中实现了外部进程的运行,还可以通过trap_init来设置中断向量。
相关文章推荐
- 网易公开课《Linux内核分析》学习心得-跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程|Linux内核分析 第三周作业 - 网易云课堂
- Linux内核分析 实验三:跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程
- 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结
- 20135239 益西拉姆 linux内核分析 跟踪分析Linux内核的启动过程
- Linux内核分析——跟踪分析Linux内核的启动过程
- Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程
- 《Linux内核分析》(三)——跟踪分析Linux内核的启动过程
- Linux内核设计第三周学习总结 跟踪分析Linux内核的启动过程
- Linux内核分析3:跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程小解
- 跟踪分析Linux内核的启动过程
- 实验三:跟踪分析Linux内核的启动过程
- Linux内核分析:跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程
- linux及安全第三周总结——跟踪分析LINUX内核的启动过程
- 跟踪分析Linux内核的启动过程