标签:
cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
1.使用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之前,也可以在之后
2.简单分析一下start_kernel
rest_init()中的kernel_init有一个run_init_process这就是Linux系统中的1号进程,是第一个用户态进程,默认是根目录下的一个程序;如果根目录下没有这个进程,系统会寻找其他的默认进程作为1号进程。
by王玥【原创作品转载请注明出处】 1.《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
2.《 linux内核符号表 》http://blog.chinaunix.net/uid-21633169-id-1823329.html
Linux内核分析 笔记三 构造一个简单的Linux系统MenuOS ——by王玥
标签:
原文地址:http://www.cnblogs.com/disturbia/p/5268904.html