2015年的第一场雪,比以往时候来的更早一些 - 凛冬将至
1、内核最终呈现给我们的形态什么?
万事万物都有它最原始的形态,也有它千变万化的形态!但万变不离其宗,同根同源!
a、内核镜像的几种分类?
大概分为2类:
1.elf 格式镜像(原始)
vmlinux – 编译后生成的最原始的内核镜像(默认包含所有的符号信息,故而比较大)
vmlinxz – 为压缩格式
2.Image 格式镜像(objcopy转化过的二进制格式)
Image – vmlinux 通过objcopy 转化过的二进制文件,未压缩
zImage – 压缩文件,是由vmlinux(去掉符号信息的) + 解压代码通过gzip压缩而成
bImage – big zImage,表示压缩强度比zImage高,内容一样
uImage – zImage + 头信息 (此格式可能更适合uboot,仅仅是可能更合适而已,其实每种都是合适的)
xipImage – 此格式一般用于自启动的norflash
2、我们一般需要哪种形态?支持这种形态的前提都有哪些?
上述几种格式其实都适合做启动文件,就看你的boot或者(x86上其他引导程序)的支持了!
支持这些格式的前提是什么呢?
既然上面我们说都适合做启动文件,但是总归得选一种吧,选择不同有何区别呢?
问题终于显现了:
1.几种文件对于我们的区别在哪里?
2.引导程序或者boot的支持各种文件的区别在哪里?
第一个问题:
几种格式我们都在上面做出了简单的分析!其实对我们而言每种格唯一的区别就是头信息,对自带的头信息!
grub应该比较简单,就是去寻找镜像位置,符号表位置,配置文件位置,然后引导(这里我步专门去研究),
我需要研究的是uboot的引导,对boot而言,上面几种格式唯一的区别就是头信息,有的自带头信息,有的不带头信息,带头信息需要将头信息读出来,而后使用boot四个碉堡的fw_arg0 - fw_arg3去给内核传参而已,Ps这里我们暂时知道就行(后续会单独在boot的分析中体现出来)!
第一个问题的答案先是意见,那就是不同格式的文件对我们而言区别并不是很大!
第二个问题:
通过第一个问题,第二个问题可回答为在boot阶段其实对各个文件的支持并没有多大区别,就看你想使用那一种格式了,不同格式的镜像文件在boot中的解析不一样(可随意更改)!
3、如何得到这种形态?
这个问题可能才是我们大多数人比较关心的问题,因为百分之八十的人一般是不会主动修改boot的,一般根据boot的支持来选择一种格式即可!
前面我们已经知道vmlinux 是编译后得到的最终内核镜像!
这里就已经进入到编译阶段需要了解的东西了!
其它几种是怎么生成的呢?
让我们把这些问题留在下一节进行一一处理
4、跑在21世纪的大道上
说了这么多,马上就要真正的去体验21世纪最伟大的开源工程,作为21世纪的美丽新世界,Linux Kernel 肩负着他自己的使命,到2015年,内核伴随linux已经走过了风风雨雨的24年(Linux诞生的那年(1991.10.5.),也就是我诞生的那年(1991.10.xx)),我也步履蹒跚的走过了24年,从第一次接触内核到如今也已经有3个念头,想想也蛮兴奋的!当今世界,最流行的移动操作系统Android,使用的是Liunx Kernel,占有率最高的服务器操作系统依然使用的Linux Kernel!全世界人民都在享受科技发展带来的便利,Linux 已经是世界上最成功的操作系统之一!而在未来十年,这种情况会愈演愈烈!如此作为一个内核工程师(虽然是菜B),我也有我的梦想,我真诚的希望在未来的某一天,我也可以提交我的patch或者我的模块到Kernel. 哪怕只有一个patch..
做一件事情病把它做好,最后,你的辛苦付出将会获得你想要的回报!加油吧!
By: Keven - 点滴积累