内核映像 piggy 5.1 合成内核映像:piggy及其他_piggy

内核映像 piggy 5.1 合成内核映像:piggy及其他_piggy
第5章 内核初始化
本章内容
合成内核映像:piggy及其他
初始化控制流
内核命令行处理
子系统初始化
init线程
小结
当嵌入式Linux系统加电后,就会有一系列复杂的事件依次发生。加电几秒钟之后,内核开始工作并且执行由系统初始化脚本中指定的一系列应用程序。这些事件的一个显著特点是,它们服从于系统的配置并且由嵌入式开发者所控制。
本章将探讨Linux内核的初始化过程,仔细研究在内核初始化中所采用的机制和处理过程,以及在初始化过程中,Linux的内核命令行信息及其在启动的时候定制Linux开发环境的用途。具备了这些知识之后,你就可以定制和控制系统初始化流程,以满足你的嵌入式系统的特殊需求。
5.1 合成内核映像:piggy及其他
在系统加电后,嵌入式系统的引导装入程序首先取得了对处理器的控制权。在引导装入程序执行了一些基本的硬件初始化之后,控制权就会交给Linux内核。为了便于开发,这样的过程是可以手动进行的(例如在引导装入程序的提示下用户输入交互式的load/boot命令),也可以是一个自动的启动过程。我们会在第7章中讨论这个话题,所以对于引导装入程序的详细介绍将放到那里。
在第4章中,我们研究了Linux内核映像文件的组成,还记得那些用于构建体系结构的文件吗?其中一个是二进制ELF格式的vmlinux文件,vmlinux文件就是内核,或者也可以称为严格意义上的内核。实际上,当在其链接过程检查vmlinux文件时,我们看到的第一行代码,在绝大多数的体系结构当中,位于一个汇编代码的源文件中,该文件称为head.S(或类似名字的文件)。在支持PowerPC系列处理器的Linux内核中,提供了head.S的几个版本,这些文件依赖于处理器。例如,AMC440系列处理器通过名为head_44x.S的文件进行初始化。
一些体系结构和引导装入程序可以直接引导vmlinux内核映像。例如,基于PowerPC体系结构和U-Boot的平台通常都可以直接引导vmlinux内核映像 (在经过由ELF到二进制格式的转换之后,不久你就会看到)。在由其他体系结构和引导装入程序所构成的系统中,可能需要配置合适的上下文并提供必要的工具才能加载和引导内核。
代码清单5-1详细列出了编译内核过程中最后的步骤,该编译过程基于ADI Coyote参考硬件平台,该平台内含一个Intel IXP425网络处理器。该代码采用了内核编译时默认的输出格式,就像在第4章中指出的那样,这是一个有用的速记法,可以更多关注于编译过程中的错误和警告信息。
代码清单5-1 内核编译最后的流程:基于ARM/IXP425(Coyote)
$makeARCH=armCROSS_COMPILE=xscale_be-zImage ...LDvmlinux SYSMAPSystem.map OBJCOPYarch/arm/boot/Image Kernel:arch/arm/boot/Imageisready ASarch/arm/boot/compressed/head.o GZIParch/arm/boot/compressed/piggy.gz ASarch/arm/boot/compressed/piggy.o CCarch/arm/boot/compressed/misc.o ASarch/arm/boot/compressed/head-xscale.o ASarch/arm/boot/compressed/big-endian.o LDarch/arm/boot/compressed/vmlinux OBJCOPYarch/arm/boot/zImage Kernel:arch/arm/boot/zImageisready Buildingmodules,stage2. ...
在代码清单5-1中的第3行可以看到,vmlinux内核映像(严格意义上的内核)在这里被链接,之后,大量附加的目标模块得以处理,这些目标模块包括head.o、piggy.o 以及和特定体系结构有关的head-xscale.o。在这些处理过程中,每一行的处理中都使用了相应的标识。例如,其中的AS表示汇编程序被调用,GZIP表示的是压缩等。通常来说,这些目标模块是与给定的体系结构(本例当中的体系结构是ARM/Xscale)有关的,并且包含该特定体系结构下引导内核所需的基本程序。表5-1详细列出了这些内容的组成部分。
表5-1 基于ARM/Xscale体系结构的基本目标文件
[TR]
[TD]
组件
[/TD]
[TD]
功能/描述
[/TD][/TR]
[TR]
[TD]
vmlinux
[/TD]
[TD]
严格意义上的内核,采用ELF格式,
包括符号、注释、调试信息(如果
采用-g选项编译)和通用体系结构组件
[/TD][/TR]
[TR]
[TD]
System.map
[/TD]
[TD]
描述vmlinux模块的内核符号表,基于文本格式
[/TD][/TR]
(续)
[TR]
[TD]
组件
[/TD]
[TD]
功能/描述
[/TD][/TR]
[TR]
[TD]
Image
[/TD]
[TD]
二进制内核模块,去掉了符号、标记、注释
[/TD][/TR]
[TR]
[TD]
head.o
[/TD]
[TD]
针对ARM类处理器的启动代码,就是通过
这个目标文件,引导装入程序取得了控制权
[/TD][/TR]
[TR]
[TD]
piggy.gz
[/TD]
[TD]
采用gzip压缩的Image文件
[/TD][/TR]
[TR]
[TD]
piggy.o
[/TD]
[TD]
piggy.gz文件的汇编格式,可以被后面
的misc.o文件所链接
[/TD][/TR]
[TR]
[TD]
misc.o
[/TD]
[TD]
用于解压缩内核映像(piggy.gz)的程序,
大家所熟悉的在某些体系结构上的启动信息
“Uncompressing Linux … Done”就来源于该文件
[/TD][/TR]
[TR]
[TD]
head-xscale.o
[/TD]
[TD]
XScale系列处理器的初始化目标文件
[/TD][/TR]
[TR]
[TD]
big-endian.o
[/TD]
[TD]
一个小的汇编程序,可以将XScale处理器
转换为对大端字节序模式(big-endian mode)的支持
[/TD][/TR]
[TR]
[TD]
vmlinux
[/TD]
[TD]
合成内核映像,注意这是一个不合适的命名,
因为它与实际意义上的内核同名,二者并不相同。
严格意义上的内核链接了该表中的目标文件后生
成该合成映像文件,参见相关解释内容
[/TD][/TR]
[TR]
[TD]
zImage
[/TD]
[TD]
最终的合成映像文件,可以被引导装入程序引导,
在下文中会具体介绍
[/TD][/TR]
图5-1有助于你理解该结构以及后续的讨论内容,它展示了内核映像文件的组成部分,以及产生一个最终可引导内核映像文件的过程,下面章节会详细介绍这些组成部分和映像文件的产生过程。
[TR]
[TD][I]498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=405 alt="" src="http://pic.aIhUaU.com/201602/15/102923245.jpg" width=640 border=0>[/TD][/TR]
[TR]
[TD](点击查看大图)图5-1 合成内核映像文件的结构[/TD][/TR]

  

爱华网本文地址 » http://www.aihuau.com/a/372251/361683444887.html

更多阅读

声明:《内核映像 piggy 5.1 合成内核映像:piggy及其他_piggy》为网友薄荷味白衬衫分享!如侵犯到您的合法权益请联系我们删除