实验过程
使用实验楼的虚拟机打开shell,输入命令,启动MenuOS系统
使用gdb跟踪调试Linux内核
CPU开始初始化之前将其冻结,目的是阻止cpu执行接下来的指令
通过刚刚设置的端口号建立gdb和gdbserver之间的连接,通过break设置断点,现在在内核启动的起点start_kernel函数处设置一个断点
简单分析start_kernel
start_kernel函数的主要目的是完成内核初始化并启动祖先进程(1号进程)。在祖先进程启动之前start_kernel函数做了很多事情,如锁存器,根据处理器标识ID初始化处理器,开启cgroups子系统,设置每CPU区域环境,初始化VFS Cache机制,初始化内存管理,rcu,vmalloc,scheduler(调度器),IRQs(中断向量表),ACPI(中断可编程控制器)以及其它很多子系统。