前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有了这张图,看谁还能阻拦我研究linux内核源码!

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

作者头像
KINGYT
发布2020-10-30 11:46:41
7540
发布2020-10-30 11:46:41
举报

叮铃铃,其实并不是这张。


额,还是不太适应这种标题。

最近在写一个 linux内核启动流程分析 的系列文章,主要是想从源码角度,非常细致的给大家讲下linux内核是如何启动的。

目前已经写了几篇了,而且为了能让大家更好的理解,我还配了很多图,但这种方式还是有个问题,就是这些图都是从局部上讲解一个问题,到目前为止还没有一个内核的bzImage的全景图。

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

画这张图着实花了我不少时间,我已经尽量把细节画得丰富一些,但还是有一些没画上,这个后面如果用到会再补上。

这张图主要是配合 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,来开始执行内核代码,后续的流程就是我们在内核启动分析系列文章里讲的了,有兴趣的可以去看看。

好,就这些,画图不易,可以的话,帮忙转发下或给个在看,谢谢。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux内核及JVM底层相关技术研究 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档