linux内核源码_有了这张图,看谁还能阻拦我研究linux内核源码!

e35fc1fede932f976798b7a3a30f4c37.png
叮铃铃,其实并不是这张。

本文首发于我的个人公众号 ytcode,文章链接为

有了这张图,看谁还能阻拦我研究linux内核源码!​mp.weixin.qq.com
40ee724a1897def7ea35282eae93fdbd.png


最近在写一个 linux内核启动流程分析 的系列文章,主要是想从源码角度,非常细致的给大家讲下linux内核是如何启动的。
目前已经写了几篇了,而且为了能让大家更好的理解,我还配了很多图,但这种方式还是有个问题,就是这些图都是从局部上讲解一个问题,到目前为止还没有一个内核的bzImage的全景图。

所以,今天花了些时间,好好的画了一张这样的图。

e057c14cb30c63d409fa7ce3a5fcafbd.png

画这张图着实花了我不少时间,我已经尽量把细节画得丰富一些,但还是有一些没画上,这个后面如果用到会再补上。
这张图主要是配合 linux内核启动流程分析 这个系列文章来看的,不过在这里我还是简单说下这张图里描述的内容。
首先,当打包后的内核文件bzImage以efi application形式被uefi硬件启动时,uefi会根据pe格式来解析并加载内核代码。
pe的所有格式数据基本都在boot sector里,也就是第一个512字节。
当uefi启动bzImage时,会先根据SizeOfImage的大小为内核分配内存空间,然后根据section table的数据加载各个section的内容到指定内存。
从上图可以看到,各个section加载到内存的位置及大小基本上和其在bzImage文件的位置和大小一致,除了最后一个.text区,也就是我们的compressed kernel。
bzImage被加载到内存后,按顺序各个区块分别为boot sector, .setup, .reloc, .compat, .text,其中.text除了包括bzImage中的对应内容外,还有一大块空闲区域,用来后续解压内核。
当bzImage的数据被解析并加载完毕后,uefi会根据optional header里的AddressOfEntryPoint的值,即efi_pe_entry,来开始执行内核代码,后续的流程就是我们在内核启动分析系列文章里讲的了,有兴趣的可以去看看。
好,就这些,画图不易,可以的话,帮忙点个赞或关注下我公众号:

http://weixin.qq.com/r/ZSr17aHE9vyJreWO9393 (二维码自动识别)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值