Linux内核分析:实验三

原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

Linux启动过程:

 

启动第一步--加载BIOS

启动第二步--读取MBR

启动第三步--Boot Loader

启动第四步--加载内核

启动第五步--用户层init依据inittab文件来设定运行等级

启动第六步--init进程执行rc.sysinit

启动第七步--启动内核模块

启动第八步--执行不同运行级别的脚本程序

启动第九步--执行/etc/rc.d/rc.local

启动第十步--执行/bin/login程序,进入登录状态

打开实验楼的shell,输入:

 

cd LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

 

就会出现如下内容:

                        

在Linux-3.18.6版本中,我们会看到以下几个目录:

 

arch包括了所有和体系结构相关的核心代码

COPYING下是GPL版权申明

CREDITS下是光荣榜。对Linux做出过很大贡献的一些人的信息。

documentation下是一些文档,没有内核代码,可惜都是English的,是对每个目录作用的具体说明。

drivers中是系统中所有的设备驱动程序。

fs存放Linux支持的文件系统代码和各种类型的文件操作代码。

include包括编译核心所需要的大部分头文件。

init包含核心的初始化代码(不是系统的引导代码)。

ipc包含了核心进程间的通信代码。

Kernel内核管理的核心代码。

MAINTAINERS存放了维护人员列表,对当前版本的内核各部分都有谁负责。

Makefile第一个Makefile文件。

mm包含了所有独立于 cpu 体系结构的内存管理代码。

modules存放了已建好的、可动态加载的模块文件目录,是个空目录,用于存放编译时产生的模块目标文件。

net里是核心的网络部分代码,其每个子目录对应于网络的一个方面。

ReadMe里是核心及其编译配置方法简单介绍

REPORTING-BUGS里是有关报告Bug 的一些内容

Rules.make里是各种Makefilemake所使用的一些共同规则

scripts包含用于配置核心的脚本文件等。

 

gdb调试内核

 

start_kernel启动分析

1、lockdep_init():初始化内核依赖关系表,初始化hash表

2、boot_init_stack_canary():为栈增加保护机制,预防一些缓冲区溢出之类的攻击

3、tick_init():初始化内核时钟系统

4、boot_cpu_init():激活当前CPU

5、setup_arch():对不同体系结构的CPU设置不同的参数、选项等

6、trap_init():初始化硬件中断,函数中设置了很多中断门

7、mm_init():建立内核的内存分配器

8、sched_init():初始化任务调度

9/init_IRQ():中断向量的初始化

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值