美文网首页
跟踪分析Linux内核的启动过程

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

作者: virealer | 来源:发表于2016-03-13 18:59 被阅读0次

曹朋辉
原创作品转载请注明出处
《Linux内核分析》MOOC课程

计算机有三个法宝:

  • 存储程序计算机
  • 函数调用堆栈
  • 中断

操作系统两把宝剑:

  • 中断上下文的切换-保存现场、恢复现场
  • 进程上下文的切换

Linux内核代码目录结构(部分)

arch -CPU相关
  x86/ (关心 )
fs -file system
init -  (重要)
  -main.c
    -start_kernel()
ipc -进程间通信
kernel -  (关键)
lib 
mm -memery management 
net

先来看看menu os启动后的样子

menuos启动

这个字符menu os还是挺好看的,如果直接在显示器全屏显示效果应该更好

好了接下来继续做实验,用GDB跟踪Linux启动过程,步骤如下
0 搭建menu OS

# 下载内核源代码编译内核
cd ~/LinuxKernel/
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz
xz -d linux-3.18.6.tar.xz
tar -xvf linux-3.18.6.tar
cd linux-3.18.6
make i386_defconfig
make # 一般要编译很长时间,少则20分钟多则数小时
 
# 制作根文件系统
cd ~/LinuxKernel/
mkdir rootfs
git clone https://github.com/mengning/menu.git  # 如果被墙,可以使用附件menu.zip 
cd menu
gcc -o init linktable.c menu.c test.c -m32 -static –lpthread
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
 
# 启动MenuOS系统
cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

# 重新配置编译Linux使之携带调试信息
1. 在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息
2. 
kernel hacking—>
[*] compile the kernel with debug info

3. make重新编译(时间较长)

1 启动Linux内核并冻结

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选项

2 打开一个新的终端对内核的启动过程进行跟踪分析

(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之前,也可以在之后

start_kernel分析:

trap_init 中断相关
mm_init 内存管理模块
sched_init 调度模块

rest_init 0号进程
kernel_init1号进程

在大概熟悉了start_kernel的代码之后,我们便可以使用gdb对其做进一步跟踪分析。

GDB跟踪

相关文章

网友评论

      本文标题:跟踪分析Linux内核的启动过程

      本文链接:https://www.haomeiwen.com/subject/bkqflttx.html