linux常用的内核镜像格式

原创 2016年08月31日 10:02:22

linux常用的内核镜像格式

 

Linux内核有多种格式的镜像,包括vmlinux、Image、zImage等。

 

1.     Linux内核镜像格式

1.1 vmlinux

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

 

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

 

Android平台,生成的vmlinux文件位于:

out \target\product\msm8909\obj\KERNEL_OBJ

 

1.2  Image

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

 

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

 

Android平台,生成的Image文件位于:

out \target\product\msm8909\obj\KERNEL_OBJ\arch\arm\boot

 

1.3 zImage

  zImage是ARM linux常用的一种压缩镜像文件,它是由vmlinux加上解压代码经gzip压缩而成,命令格式是#make zImage.这种格式的Linux镜像文件多存放在EMMC上.

 

Android平台,生成的zImage文件位于:

out \target\product\msm8909\obj\KERNEL_OBJ\arch\arm\boot

 

 

2.     Linux内核镜像的产生过程

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

(1)  当用户对Linux内核源码进行编译时,kernel的第1/2阶段代码会生成可执行文件vmlinux,该文件是未被压缩的镜像文件,非常大,不能直接下载到EMMC中,通常放在PC机上,这也是最原始的Linux镜像文件,我们Android平台下此文件大小为144MB左右。

 

(2)  镜像文件vmlinux由于很大,肯定不能直接烧入EMMC中,因此需要进行二进制化,即经过objcopy处理,使之只包含二进制数据的内核代码,去除不需要的文件信息等,这样就制作成了image镜像文件.该镜像文件也是未压缩,只是经过了二进制化而变小,我们Android平台下此文件大小为17MB左右。

 

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

 

(4)  压缩后的镜像文件compress/vmlinux经过二进制化,最终生成镜像文件zImage,我们Android平台下此文件大小为7M左右。当然,在内存 SDRAM中运行压缩镜像文件zImage时,会首先调用两个解压程序arch/arm /boot/compressed/head.S、arch/arm/boot/compressed/misc.c将自身解压,然后再执行kernel 的第一阶段启动代码arch/arm/kernel/head.S.简而言之,在内存中运行内核时,kernel先自身解压,再执行第一阶段启动代码。

 

 

 

Linux内核镜像格式

Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等. (1)kernel镜像格式:vmlinux ...
  • zddxmu
  • zddxmu
  • 2013年08月20日 00:10
  • 647

linux的几个内核镜像格式

Linux内核镜像格式 kernel镜像格式vmlinux kernel镜像格式Image kernel镜像格式zImage kernel镜像格式bzImage kernel镜像格式uImage ke...
  • XscKernel
  • XscKernel
  • 2015年08月28日 16:33
  • 2459

linux内核镜像格式

一、Linux内核镜像格式     Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.(1)kern...
  • jacktar_du
  • jacktar_du
  • 2011年07月20日 22:56
  • 559

Linux kernel 分析之一:内核镜像

跌跌撞撞的在软件开发行业这么久了,各种语言也都见识过了各种平台也都差不多见识了一下,但都了解不够深入,唯独对Linux内核知之甚少,想想今天开始学习还来得及,所以Just do it.......
  • vanquishedzxl
  • vanquishedzxl
  • 2015年07月19日 22:00
  • 2453

Linux内核镜像

内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。    ...
  • xiedapang_pang
  • xiedapang_pang
  • 2017年05月23日 16:42
  • 325

内核镜像

内核映像: 内核映像有很多种。它可以是ELF格式,或者是可引导的U-Boot映像格式。它可以和一个根文件系统捆绑在一起。或者仅仅是内核本身。 格式: 内核如果是可引导的U-Boot格式,它一般地...
  • luckywang1103
  • luckywang1103
  • 2014年11月16日 18:19
  • 1725

嵌入式 友善之臂ARM2440烧写程序注释

Linux OS 是安装在NAND flash里面的,在烧制LinuxOS时候是用nor flash启动的 从nand flash启动后,首先要有bootloader来引导系统 我们这里安装的bo...
  • mrjy1475726263
  • mrjy1475726263
  • 2012年07月25日 21:01
  • 1663

Linux的常用命令大全(精华版)

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、驱动、键盘、鼠标,还是用户等都是文件,Linux命令是它正常运行的核心。接下来,就来看看xp系统下载编辑...
  • h254541060
  • h254541060
  • 2014年07月02日 09:23
  • 1217

Linux常用文件系统格式

Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文...
  • chunlovenan
  • chunlovenan
  • 2014年08月15日 16:02
  • 1182

Linux下的五种I/O通信模型

同步,异步,阻塞,非阻塞的概念首先,需要明确的一个问题就是,通常程序是运行在用户态下,如果需要进行I/O操作,那么就会发出系统调用(System call),由用户态转变为内核态,由操作系统去完成I/...
  • z137657747
  • z137657747
  • 2017年11月12日 21:03
  • 156
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux常用的内核镜像格式
举报原因:
原因补充:

(最多只允许输入30个字)