GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
看JOS的代码的时候遇到了elf的一些信息,看着有点茫然,简单找一些资料补充一下。主要还是一些概念类信息,这样可以能够知道大概的缩写含义。在搜索资料的时候找到的基本都是Linux环境下相关的资料,两者即便是不同也应该有很大的相似之处。直接取Linux的资料看一下。
1. 从这个结构体的定义就能够看得出来,这一份资料给我看的代码至少是不同的。应该是我看到的代码的一个演进版本。
2. indent信息看起来还有专门细致的介绍,而我现在分析的代码中没有这部分信息。
这些新看完,可以知道这些成员的缩写大概是一个什么概念。我的目标还是要先大概了解一下现在手中的代码,尽管有些古老。这样,我大概整理出来了现在手中代码的解释信息如下:
比较特殊的是这个JOS版本的信息里面多了一个magic数,主要是用来区分是否是elf文件的一个特征值。
如此,结合上面的信息就可以大概知道bootmain中的elf相关的几个操作是在做什么了。首先,这里尝试加载磁盘信息看看是否是elf的格式。如果是,那么根据elf的一些属性信息来判断程序所在位置以及相关的存储信息,之后进行加载。最后,执行elf中的entry启动操作系统。
Elf文件在嵌入式开发中也经常打交道,尽管整个启动模式不尽相同,但是从这样的一个OS启动过程来说还是可以更深一步去理解嵌入式软件开发中生成的elf会有什么作用。计算机技术中,很多技术或者说方案都是类似的,能够有很好的知识迁移传承效果。而这也是为什么很多工作中基本用不到OS设计技术的技术人员愿意在工作之余花费大量时间来填充OS设计这样的时间黑洞的原因吧!