内核映像:

内核映像有很多种。它可以是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的后缀因此你很容易匹配两者。