0 前言

编译Linux内核生成的镜像主要有Image、zImage、bzImage和uImage四种:

  • Image为内核映像文件;
  • zImage为内核的一种映像压缩文件;
  • uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别[11]。

1 vmlinux

vmlinux是可引导的、压缩的内核,其中vm代表Virtual Memory(使用硬盘空间作为虚拟内存)。vmlinux是可执行的Linux内核,它位于/boot目录:

图1 Ubuntu /boot/vmlinux

Image、zImage、Image.gz以及bzImage等镜像其实都依赖于vmlinux:

(1)arm

zImage Image xipImage bootpImage uImage: vmlinux$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
# @file: linux-3.10.65/arch/arm/Makefile

(2)arm64

Image Image.gz: vmlinux$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
# @file: linux-3.10.65/arch/arm64/Makefile

(3)x86

bzImage: vmlinux
@ file: linux-3.10.65/arch/x86/Makefile

2 xImage

不同平台对这三个镜像的支持情况是不一样的。

2.1 ARM

ARM平台支持zImage、Image、xipImage、uImage以及bootpImage:

define archhelpecho  '* zImage        - Compressed kernel image (arch/$(ARCH)/boot/zImage)'echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'echo  '* xipImage      - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)'echo  '  uImage        - U-Boot wrapped zImage'echo  '  bootpImage    - Combined zImage and initial RAM disk'echo  '                  (supply initrd image via make variable INITRD=<path>)'
# @file: linux-3.10.65/arch/arm/Makefile

ARM平台中,无论是make zImage还是make bzImage生成的都是zImage,因为bzImage被转成zImage了:

# Convert bzImage to zImage
bzImage: zImage
# @file: linux-3.10.65/arch/arm/Makefile

2.2 ARM64

而ARM64平台则仅支持Image.gz和Image

define archhelpecho  '* Image.gz      - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)'echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
# @file: linux-3.10.65/arch/arm64/Makefile

2.3 x86

x86平台仅支持bzImage:

define archhelpecho  '* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)'
# @file: linux-3.10.65/arch/x86/Makefile

3 uImage

编译U-Boot,将会生成mkimage工具,将其复制到/usr/bin目录,或将其所在路径添加到PATH环境变量,然后通过下面方法之一生成uImage即可。

3.1 方法一[4][6]

1)通过make命令编译内核,完成后将会在arch/arm/boot目录中生成Image和zImage两个镜像。

2)进入zImage所在目录执行下面命令生成uImage:

mkimage -n 'linux-2.6.39.4' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage

3.2 方法二(推荐)

配置完毕内核后,直接make uImage即可在arch/arm/boot目录中生成uImage镜像。

参考资料

[1]uImage与zImage的区别

[2]Image uImage与zImage的区别
[3]比较zImage和uImage的区别

[4]制作uImage镜像

[5]uboot启动zImage(go)和uImage(bootm)分析

[6]“转”使用UBOOT烧写根文件系统和内核的方法

[7]zimage 和bzimage 有什么区别

[8]vmlinux uImage与zImage的区别

[9]linux kernel编译生成zImage过程详解

[10]vmlinux

[11]Image uImage与zImage的区别

Linux内核镜像 —— vmlinux与xImage相关推荐

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

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

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

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

  3. Linux内核镜像格式

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

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

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

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

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

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

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

  7. Linux内核之vmlinux与vmlinuz

    由于是初次系统的学习Linux内核,过程中遇到了一些经常出现的名词.似曾相识,但对他们的含义又不是很清楚.因此,将搜索到的内容进行一下汇总. 1.vmlinux   vmlinux是一个包含linux ...

  8. 内核镜像vmlinux和Image的区别

    arm32平台 编译一个压缩后的内核镜像: make zImage 最后链接过程的log如下所示: LD vmlinuxSYSMAP System.mapSYSMAP .tmp_System.mapO ...

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

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

最新文章

  1. Nature:运动能力与空间竞争驱动的细菌共存及机制解析
  2. 《云计算揭秘企业实施云计算的核心问题》——3.5节中小型企业
  3. AR/QCA SPI 启动原理和 ART 地址定位原理
  4. 在 Java EE 组件中使用 Camel Routes
  5. rust建的怎么拆除_罗志祥私建泳池已拆除,后续还将接受物业的监督与教育
  6. Android系统启动过程
  7. 混合高斯模型_大数据小白入门高斯混合模型(GMM)聚类算法
  8. 蓝桥杯 C语言 试题 算法训练 猴子分苹果
  9. 抽头延时信道模型matlab,频率选择性衰落信道模型研究与仿真.docx
  10. 企业级代码静态测试工具Helix QAC——关键特性
  11. nginx 配置 apple-app-site-association
  12. 20200425-读后感-第五项修炼1-系统思考
  13. 测评 | 谷歌智能耳机Pixel Buds体验:耳朵里的语音助手
  14. 打开微信时站着的小人是谁?
  15. [转载]李开复针对马加爵事件写给中国学生的一封信
  16. android视频动态壁纸app,视频动态壁纸app下载-视频动态壁纸app安卓版下载V1.0安卓版 - 非凡软件站...
  17. 基于python+opencv+mediapipe实现手势识别详细讲解
  18. 2019-8-19 [Linux] 1.简介 发行版本 组成 应用领域 与Windows对比
  19. python实现模糊聚类绝对值减数法
  20. 融资不止,每日优鲜们的生鲜电商战不休

热门文章

  1. linux 网卡物理地址修改,Linux修改 网卡物理地址(Mac Address)
  2. 竞争对手复习状态+考研重要的时间节点,你必须知道!
  3. 荐书 | 2021年1季度我读过的十本好书!
  4. Examples osggeometry
  5. win10专业版(64位)安装sonar
  6. 构建3D虚拟世界,有哪些3D建模方式?
  7. QT5开发||01、灵魂三问:什么是QT?为什么要使用QT? 如何使用QT?
  8. 集成饿了么、美团、百度等外卖系统功能
  9. c++ set中各种方法的用法
  10. android 底座充电压力插拔,有概率没有提示音