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常用的内核镜像格式相关推荐

  1. Linux内核镜像格式

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

  2. THREE DAY | 网络安全之Linux(包含Linux常用命令,镜像下载,docker命令等内容)超详细!!!

    THREE DAY | 网络安全之Linux 一.Linux介绍 1.Linux系统简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多 ...

  3. Linux 5.4内核 exFAT格式U盘所需配置项

    一.问题描述 linux 5.4 内核可以直接通过配置config文件从而支持exFAT文件系统格式U盘的挂载. 一.问题解决 1.进入内核根目录,命令行下通过make menuconfig开启图形化 ...

  4. linux 2.6内核镜像,Linux2.6内核镜像的构建过程

    make menuconfig:修改.添加内核配置选项,最后生成.config配置文件. make all:首先编译.config得到没有压缩的内核核心vmlinux,然后将其压缩生成引导过程使用的内 ...

  5. Linux内核镜像文件格式与生成过程(转)

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

  6. linux系统print命令,linux常用命令 print格式输出

    格式化输出命令 printf '输出类型 输出格式' 输出内容 输出类型: %ns 输出字符串,n是数字指代输出的几个字符 %ni 输出整数,n是数字指代输出几个数字 %m.nf 输出浮点数.m和n是 ...

  7. Linux常用命令之文件和目录处理命令

    目录 1.Linux命令的普遍语法格式 2.目录处理命令 一.显示目录文件命令:ls 二.创建目录命令:mkdir 三.切换目录命令:cd 四.shell内置命令和外部命令的区别 五.显示当前目录命令 ...

  8. linux 解压安卓内核,解压内核镜像

    这里将告诉您解压内核镜像,教程操作步骤: 步骤 0 uboot 将 zImage 复制到内存之后,跳转到 zImage 处开始执行,首先执行的代码是 arch/arm/boot/compressed/ ...

  9. Linux内核开发——内核镜像文件及启动过程

    1. 内核镜像文件 1.1. vmlinux vmlinux是elf(Excutable And Linkable),即可执行文件.里面含有调试信息,可用于调试,所以占有空间较大.gcc编译连接之后直 ...

最新文章

  1. 怎么快速插入 100 条数据,用时最短
  2. css 动态rem_【面试题】CSS知识点整理(附答案)
  3. android 取消点击GridView的时候出现的那个黄色背景
  4. java 初始化的加载顺序问题
  5. java jni开发_Java JNI开发实践记录
  6. jquer each 遍历的结果不显示 null_SpringBoot系列(三十一)- Thymeleaf如何用th:each 做条件遍历
  7. 指针运算不同于算数运算,不能简单加减
  8. 常用JS库源码 - store.js源码/underscore.js源码
  9. 3D开发-AR技术基础
  10. python使用sql读取数据表并返回dataframe
  11. 添加Maven(mvn)、sbt的国内仓库
  12. hwd分别是长宽高_丰田重磅新RAV4荣放!不仅颜值高了 配置还再升级,仅18万
  13. 汇编语言王爽 实验七
  14. linux rz sz使用
  15. echarts官网折线图
  16. 手机号空号检测的几点建议
  17. 全减器及其相关概念的理解
  18. qt信号发送间隔短而槽耗时多_Qt 信号和槽机制详解
  19. vscode html可视化,在VSCode中可视化数据结构
  20. bzoj5064 B-number 数位dp

热门文章

  1. mysql 存储地理信息_使用Amazon Aurora存储和处理地理信息数据
  2. spring的多个.xml配置文件要保证在同一个容器中
  3. Linux查看谁修改的文件,linux如何查看近来修改的文件
  4. eclipseweb开发遇到的bug
  5. python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器
  6. const的使用CC++
  7. 树,森林与二叉树之间的转换
  8. 计算机网络期中考试总结反思,期中考试总结反思作文(通用6篇)
  9. c# 字典按ascii 排序_sort命令-将文件进行排序并输出
  10. 深入理解JVM虚拟机(四):Class类文件结构(一)