<Linux内核镜像格式>

  Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.

➤kernel镜像格式vmlinux

  vmlinux是可引导的、未压缩、可压缩的内核镜像,vm代表Virtual Memory。(表示Linux支持虚拟内存,因此得名vm)它是由用户对内核源码编译得到,实质是elf格式的文件.也就是说vmlinux是编译出来的最原始的内核文件,未压缩.这种格式的镜像文件多存放在PC机上.

☢elf格式文件 :

ELF(Executable and Linkable Format)可执行可链接格式,是UNIX实验室作为应用程序二进制接口而发布的,扩展名为elf.可以简单的认为,在elf格式的文件中,除二进制代 码外,还包括该可执行文件的某些信息,比如符号表等。

  vmlinuz 是可执行 的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接,比如是 vmlinuz-3.13.0-32-generic 的软链接。vmlinuz是vmlinux的压缩文件。vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,二是内核编译时通过命令make bzImage创建。

➤kernel镜像格式:Image

  Image是经过objcopy处理的只包含二进制数据的内核代码,它已经不是elf格式了,但这种格式的内核镜像还没有经过压缩.

☢objcopy:

  GNU使用工具程序objcopy作用是拷贝一个目标文件的内容到另一个目标文件中,也就是说,可以将一种格式的目标文件转换成另一种格式的目标文件. 通过使用binary作为输出目标(-o binary),可产生一个原始的二进制文件,实质上是将所有的符号和重定位信息都将被抛弃,只剩下二进制数据。

➤kernel镜像格式:zImage

  zImage是ARM linux常用的一种压缩镜像文件,它是由vmlinux经过objcopy , objcopy实现由vmlinux的elf文件拷贝成纯二进制数据文件加上解压代码经gzip压缩而成,命令格式是#make zImage.这种格式的Linux镜像文件多存放在NAND上. 适用于小内核的情况,它的存在是为了向后的兼容性。

➤kernel镜像格式:bzImage

  bzImage不是用bzip2压缩的,bz表示big zImage,其格式与zImage类似,但采用了不同的压缩算法,注意,bzImage的压缩率更高 ,是压缩的内核映像。 
  zImage/bzImage:它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有解压缩代码。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个 640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。

➤kernel镜像格式:uImage

  uImage是uboot专用的镜像文件,它是在 zImage 之前加上一个长度为0x40的头信息(tag)(也就是说uImage 是一个二进制文件),在头信息内说明了该镜像文件的类型、加载 位置、生成时间、大小等信息.换句话说,若直接从uImage的0x40位置开始执行,则zImage和uImage没有任何区别.命令格式是#make uImage.这种格式的Linux镜像文件多存放在NAND上.

➣怎么生成uImage  

在uboot的/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行make uImage,如果成功,便可以在arch/arm/boot/目录下发现uImage文件,其大小比zImage多64个字节。 
  由于bootloader一般要占用0x0地址,所以,uImage相比zImage的好处就是可以和bootloader共存。其实就是一个自动跟手动的区别,有了uImage头部的描述,u-boot就知道对应Image的信息,如果没有头部则需要自己手动去搞那些参数。

➤kernel镜像格式:xipImage

  这种格式的Linux镜像文件多存放在NorFlash上,且运行时不需要拷贝到内存SDRAM中,可以直接在NorFlash中运行.

<Linux内核镜像的产生过程>

  在嵌入式Linux中,内核的启动过程分为两个阶段.其中,第一阶段启动代码放在arch/arm/kernel/head.S文件中,该文件与体系结构相关,与开发板周边硬件无关,主要是初始化ARM内核等.第二阶段启动代码是init目录下的main.c.现以执行命令#make zImage为例来说明,arm-linux内核镜像的产生过程.

➣当用户对Linux内核源码进行编译时,kernel的第1/2阶段代码会生成可执行文件vmlinux,该文件是未被压缩的镜像文件,非常大,不能直接下载到NAND中,通常放在PC机上,这也是最原始的Linux镜像文件.一般该文件约50M左右.

➣镜像文件vmlinux由于很大,肯定不能直接烧入NAND中,因此需要进行二进制化,即经过objcopy处理,使之只包含二进制数据的内核代 码,去除不需要的文件信息等,这样就制作成了image镜像文件.该镜像文件也是未压缩,只是经过了二进制化而变小.该文件约5M左右.

➣ 一般来说,内存SDRAM中的内核镜像是经过压缩的,只是在运行时再将其解压.所以,编译时会先使用gzip将镜像文件image进行压缩(压缩比约为 2:1),再将压缩后的镜像文件和源码中的两个文件arch/arm/boot/compressed/head.S、arch/arm/boot /compressed/misc.c一起链接生成压缩后的镜像文件compress/vmlinux.该文件约为2.5M左右。注意,这两个源码文件是解压程序,用于将内存SDRAM中的压缩镜像zImage进行解压.

➣压缩后的镜像文件compress/vmlinux经过二进制化,最终生成镜像文件zImage,试验时该文件约为2.5M.当然,在内存 SDRAM中运行压缩镜像文件zImage时,会首先调用两个解压程序arch/arm /boot/compressed/head.S、arch/arm/boot/compressed/misc.c将自身解压,然后再执行kernel 的第一阶段启动代码arch/arm/kernel/head.S.简而言之,在内存中运行内核时,kernel先自身解压,再执行第一阶段启动代码.试 验时运行在内存中的镜像文件约为5M,与image镜像文件大小相同.

<注意事项>

➣网站:http://lxr.linux.no/该网站通过了Linux内核源码,不用解压,在线查询,非常方便.

➣生成的镜像文件vmlinux放在源码的顶层目录下.

➣生成的镜像文件image、zImage均在arch/arm/boot目录下.

➣启动开发板时,在超级终端内会有许多的提示信息,其中:

➣booting linux … /表示正在将内核从NAND拷贝到内存中/

➣unpressed… /表示正在解压内核/

➣只有当用户输入boot命令或在boot_delay延时时间后,vivi才将NANDFlash中的内核kernel拷贝到内存SDRAM中.也就是说,当vivi进入命令行模式时,在SDRAM中并没有内核kernel.

➣在kernel源码目录下执行命令:

➣<1> #tree /打印出kernel源码的目录结构/

➣<2> #tree -L 1 /打印出kernel源码的第一级目录结构/

➣<3> #tree > /home/lishuai/linux.txt /将kernel源码的目录结构重定向到某个文件中,用户可以随时查看其目录结构,非常方便/

转载于:https://www.cnblogs.com/lemaden/p/10438499.html

Linux内核镜像文件格式与生成过程(转)相关推荐

  1. Linux内核镜像格式

      版权声明:*本文章参考了<Linux内核官方文档>.未经作者允许,严禁用于商业出版**,否则追究法律责任.网络转载请注明出处,这是对原创者的起码的尊重!!!* 1 Linux内核镜像格 ...

  2. 测试linux内核镜像,测试Petalinux BSP镜像参考例子

    测试预构建Petalinux镜像 现在,你可以尝试一个预构建参考例.这是通过petalinux-boot 工具来实现的.petalinux-boot可以在物理硬件或者QEMU上启动参考例子. 在硬件上 ...

  3. (二)linux内核镜像制作

    (一)目的 在进行嵌入式开发的时候,我们往往会先在电脑上安装交叉编译器,然后编译目标板上的代码,最后把代码下载到电路板中,嵌入式系统组成包括:BootLoader+kernel+filesystem+ ...

  4. linux内核镜像的分层,Docker镜像分层的原理详解

    base镜像 base镜像有两层含义: 不依赖其他镜像,从scratch构建 其他镜像可以之为基础进行扩展 所以,base镜像一般都是各种Linux发行版本的Docker镜像,比如:Ubuntu,De ...

  5. Linux内核镜像 —— vmlinux与xImage

    0 前言 编译Linux内核生成的镜像主要有Image.zImage.bzImage和uImage四种: Image为内核映像文件: zImage为内核的一种映像压缩文件: uImage是uboot专 ...

  6. linux内核镜像解压,解压内核镜像

    uboot 将 zimage 复制到内存之后,跳转到 zimage 处开始执行,首先执行的代码是 arch/arm/boot/compressed/head.s 文件,首先是一些涉及不同体系结构调试相 ...

  7. 国内linux内核镜像仓库,国内较快的maven仓库镜像

    国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. ====================国内OSChina提供的镜像,非常不错=========== ...

  8. linux内核镜像sd卡,【原创】Linux QT镜像的制作--制作SD卡启动盘

    最近买了个新的开发板,原生的是Android操作系统,需要自己少个启动盘,制作Linux+QT操作系统. 新的开发板带这个制作的源文件,要先把这个文件拷贝到虚拟机Ubunbtu的共享目录下. 打开sh ...

  9. Linux内核文件vmlinux 和压缩后的bzImage文件格式分析

    Linux内核文件vmlinux 和压缩后的bzImage文件格式分析 ================= 1. 需要使用的命令 ================ readelf    -- 显示el ...

最新文章

  1. silverlight实现2D人物动画
  2. ArrayAdapter的使用
  3. WinCE驱动编写小结
  4. Oracle-PL/SQL基础
  5. linux rm命令参数及用法详解---linux删除文件或目录命令
  6. 机器学习-关联之Apriori算法原理及实战
  7. BootstrapValidator验证
  8. u盘在磁盘管理可以显示 但是电脑中找不到_U盘无法识别怎么办?试试这种方法,没准还有救!...
  9. JAVA写的文件分割与文件合并程序
  10. 华为P50首发麒麟9000L:5nm EUV工艺打造 配置有所缩减
  11. BGP链路冗余使用直接接口和回环口分析
  12. AtCoder Beginner Contest 223
  13. 使用 Arduino 烧录全新的 ATmega328P
  14. Java入门级基础教学(史上最详细的整合)
  15. iOS视频开发(一):视频采集
  16. flex 调用 flash影片剪辑
  17. HDU4565 So Easy! (矩阵)
  18. Android-使用StaticLayout实现icon跟随TextView末尾效果
  19. 如何设置云服务器语言,云服务器如何更换语言
  20. 白光干涉仪能做什么丨科普篇

热门文章

  1. python数据分析及可视化(十六)金融量化(金融工具、金融分析、Tushare安装使用、双均线分析)
  2. html提交提示非法字符串,教你如何过滤高亮显示非法字符
  3. tomcat出现404的原因_详解Tomcat出现404的解决方法
  4. 透明传输 非透明传输
  5. QCustomPlot频繁绘画大数据 卡顿,添加支持OpenGL加速
  6. 益和VA 接入方案提升某制药业务效率
  7. 比树莓派强 mysql 性能_树莓派Raspberry Pi下MicroSD卡(TF卡)性能跑分对比测评|SanDisk vs 三星...
  8. 硬链接和软链接的区别
  9. 【人脸识别】人脸实时检测与跟踪【含GUI Matlab源码 673期】
  10. STM32(二)STM32F103RCT6板载资源介绍