• 2009-08-11

    [Blackfin笔记]移植Linux内核(2)-映像文件

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://tigerwang202.blogbus.com/logs/43928347.html

    在你完成对一些应用程序的裁剪后,通常输入make命令对系统进行编译。如果一切顺利,在几分钟的等待后,编译后的文件将存放在一个称作images的子目录中(它位于uClinux源码根目录下)。使用cd命令切换至该目录,并用ls命令列出其中包含的文件。你会得到如下图所示的一批文件。那些不同的文件有什么明确的用途吗?

    image

    总的说来,这些文件可以分成两大类:内核文件 和 根文件系统

    请注意以下操作适用于所有ADI的验证板。你的板子的设置可以与上面的生成的文件不同,你可以按照自己的喜好配置需要生成什么,不需要生成什么以及生成文件保存的路径。具体的映像(image)生成过程在make文件vendors/<company>/<board>/Makefile中描述。举例,我们上文使用BF533-STAMP的验证板作为编译目标,它的编译设置在vendors/AnalogDevices/BF533-EZKIT/Makefile中描述。

    然而为了避免重复设置,那个映像(image)目标可能指向vendors/AnalogDevices/vendor.mak中定义的目标。如果你希望自己的板子像上面那样结构生成image文件,你可以在不通过拷贝设置文件情况下重新使用那些设置。可以参考vendors/Bluetechnix/CM-BF537U/Makefile作为重写使用Analog Device验证板设置的例子。

    内核映像:

    内核映像有很多种。它可以是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 Kernel image)。例如,当根文件系统在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文件夹。因为它不包含设备节点(device nodes),创建工具会生产一个文件(通常称作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的后缀因此你很容易匹配两者。

    有时内核映像文件将以一种更直观的方式提供,从其名称就可了解其包含文件系统的类型。如果是这种情况,映像文件命令类似于rootfs带有.contents(.内容)的后缀。


    收藏到:Del.icio.us
    Tag: