linux内核分析学习笔记:用gdb跟踪linux内核启动过程

本文详细介绍了Linux内核启动的主要流程,包括start_kernel的初始化操作、rest_init函数的执行,以及如何使用gdb进行跟踪。通过设置断点,观察到从BIOS初始化到用户态进程menuOS的加载,最后进入CPU消息循环的过程。
摘要由CSDN通过智能技术生成

原创作品(陈晓爽 cxsmarkchan)
转载请注明出处
《Linux内核分析》MOOC课程学习笔记
操作系统的内核启动是一个复杂的过程,在这里,我们仅仅抓住内核启动的主要脉络,了解linux内核的启动过程。需要了解的问题包括:linux内核启动入口、启动时的初始化操作、0号进程和1号进程的启动、主循环的启动等。
本文实验平台为实验楼Linux内核分析,实验所用的代码可以参考这里

1 linux内核启动流程

打开实验楼Linux内核分析,选择第3个实验:跟踪linux内核启动过程。打开控制台,用cd LinuxKernel切换到LinuxKernel文件夹,并执行如下命令:

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

可以得到如下运行结果:
这里写图片描述
这里MenuOS是一个简化的操作系统,只有help/version/quit三条命令可以使用。
可以看到,启动过程中有一系列的状态输出,分别代表了内核进程和用户态进程的初始化。初始化过程包含如下部分:
1. 系统启动时有一个入口函数,在本系统中,为init/main.c下的start_kernel函数,在必要的初始化后,从此处开始加载操作系统。
2. start_kernel函数中,对操作系统内核的各个部分进行初始化。在内核初始化完成后,调用rest_init函数。
3. rest_init函数中,加载系统磁盘,启动系统的第一个用户态进程,并启动消息循环。这里的磁盘是rootfs.img,MenuOS就是在磁盘中加载的。
4. 加载完毕后,即得到上图所示的画面。

2 用gdb跟踪linux内核启动

下面我们采用gdb跟踪操作系统的启动进程。
首先以调试态启动操作系统,输入如下命令:

qemu -kernel linux-3.18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值