内核映像:
内核映像有很多种。它可以是ELF格式,或者是可引导的U-Boot映像格式。它可以和一个根文件系统捆绑在一起。或者仅仅是内核本身。
格式:
内核如果是可引导的U-Boot格式,它一般地会在文件名中包含Image字符串(诸如uImage或vmImage),而ELF格式的内核通常在文件名中包含linux字符串(诸如linux或vmlinux)。
大多数情况下你应该使用U-Boot格式的可引导内核映像。U-Boot格式包括压缩过程,这使得内核文件体积更小,同时U-Boot也很容易引导它。如果你对启动速度的要求超过对空间的节省,你应该使用ELF格式的映像引导。ELF格式的文件是不进行压缩的(这意味着其体积较大),但是加载过程却往往会变更快,因为这只涉及一些存储器拷贝过程。ELF格式的影响通常会含有大量的用以描述它自己的“meta”信息,而U-Boot格式却剥离一切不必要的信息。
扩展名:
那些包含根文件系统的内核会有扩展名作为其文件类型(例如.ext2或.initramfs)。那些不带根文件系统的内核没有扩展名。
那些附带有根文件系统的内核通常在你需要完全在RAM中运行根文件系统的系统中使用。如果你需要在一个外部存储器(诸如 并行Flash 或串行Flash等等)上运行根文件系统,那么通常需要一个单独的内核映像(standalone Kernelimage)。例如,当根文件系统在RAM中运行时,你对其作的任何修改将在系统重启后消失。一个非易失的根文件系统只能存储于外部设备中。
举例:
这里以本文编译的uClinux映像为例,编译过程生成了下列常见的映像文件:
vmlinux | ELF格式的Linux 内核映像 - 不含根文件系统 |
linux | “缺省”linux.rootfs 文件的符号链接 |
linux.cramfs | ELF格式的Linux内核,包含CRAMFS文件系统 |
linux.ext2 | ELF格式的Linux内核,包含EXT2文件系统 |
linux.initramfs | ELF格式的Linux内核,包含cpio归档的文件系统 |
linux.initramfs.gz | ELF格式的Linux内核,包含一个压缩的cpio归档的文件系统 |
linux.romfs | ELF格式的Linux内核,包括一个ROMFS文件系统 |
vmImage | U-Boot可引导格式的Linux内核 - 不含根文件系统 |
uImage | “缺省”uImage.rootfs文件的符号链接 |
uImage.cramfs | U-Boot可引导格式的Linux内核,包含CRAMFS文件系统 |
uImage.ext2 | U-Boot可引导格式的Linux内核,包含EXT2文件系统 |
uImage.initramfs | U-Boot可引导格式的Linux内核,包含cpio归档的文件系统 |
uImage.initramfs.gz | U-Boot可引导格式的Linux内核,包含压缩的cpio归档的文件系统 |
uImage.romfs | U-Boot可引导格式的Linux内核,包含ROMFS文件系统 |
.initramfs与initramfs.gz区别的原因在于U-Boot格式映像已经包括压缩功能,initramfs.gz意味着根文件系统进行双重压缩。因此,对于一个U-Boot格式的可引导映像,使用uImage.initramfs.gz是个坏主意,而应使用.initramfs 。当对ELF文件格式(通过不进行压缩),应该使用initramfs.gz 。
文件系统映像:
文件系统映像以rootfs开头,以描述该文件系统的短名称作为后缀。如果你乐意的话,可以在开发环境中作为(root back设备)挂在映像。并通过这种方式浏览文件系统的内容。
文件系统映像很少会在目标板上“直接”使用。大多数情况下,你将它们烧写至Flash或其他什么存储设备中,然后在引导Linux时挂载。
根文件系统映像通常存放在两个地方。大部分的映像存放于uClinux源码根目录下的romfs文件夹。因为它不包含设备节点(devicenodes),创建工具会生产一个文件(通常称作device_table.txt)用以为最终映像的/dev目录和相关的设备节点创建正确的major/minor值 与权限。【注:在笔者使用的版本中根文件系统映像一并放置于images目录下】
文件名 | 描述 |
rootfs.cramfs | CRAMFS格式的根文件系统 |
rootfs.ext2 | EXT2格式的根文件系统 |
rootfs.initramfs | cpio归档格式的根文件系统 |
rootfs.initramfs.gz | cpio归档格式的并使用gzip压缩的根文件系统 |
rootfs.jffs2 | JFFS2格式的根文件系统 |
rootfs.romfs | ROMFS格式的根文件系统 |
rootfs.yaffs | YAFFS格式的根文件系统 |
rootfs.yaffs2 | YAFFS2格式的根文件系统 |
其它文件:
System.map文件提供给每个相关的Linux内核映像。与linux映像类似,它带有rootfs的后缀因此你很容易匹配两者。