Linux内核镜像 —— vmlinux与xImage
0 前言
编译Linux内核生成的镜像主要有Image、zImage、bzImage和uImage四种:
- Image为内核映像文件;
- zImage为内核的一种映像压缩文件;
- uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别[11]。
1 vmlinux
vmlinux是可引导的、压缩的内核,其中vm代表Virtual Memory(使用硬盘空间作为虚拟内存)。vmlinux是可执行的Linux内核,它位于/boot目录:
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相关推荐
- Linux内核文件vmlinux 和压缩后的bzImage文件格式分析
Linux内核文件vmlinux 和压缩后的bzImage文件格式分析 ================= 1. 需要使用的命令 ================ readelf -- 显示el ...
- Linux内核镜像文件格式与生成过程(转)
<Linux内核镜像格式> Linux内核有多种格式的镜像,包括vmlinux.Image.zImage.bzImage.uImage.xipImage.bootpImage等. ➤k ...
- Linux内核镜像格式
版权声明:*本文章参考了<Linux内核官方文档>.未经作者允许,严禁用于商业出版**,否则追究法律责任.网络转载请注明出处,这是对原创者的起码的尊重!!!* 1 Linux内核镜像格 ...
- 测试linux内核镜像,测试Petalinux BSP镜像参考例子
测试预构建Petalinux镜像 现在,你可以尝试一个预构建参考例.这是通过petalinux-boot 工具来实现的.petalinux-boot可以在物理硬件或者QEMU上启动参考例子. 在硬件上 ...
- (二)linux内核镜像制作
(一)目的 在进行嵌入式开发的时候,我们往往会先在电脑上安装交叉编译器,然后编译目标板上的代码,最后把代码下载到电路板中,嵌入式系统组成包括:BootLoader+kernel+filesystem+ ...
- linux内核镜像的分层,Docker镜像分层的原理详解
base镜像 base镜像有两层含义: 不依赖其他镜像,从scratch构建 其他镜像可以之为基础进行扩展 所以,base镜像一般都是各种Linux发行版本的Docker镜像,比如:Ubuntu,De ...
- Linux内核之vmlinux与vmlinuz
由于是初次系统的学习Linux内核,过程中遇到了一些经常出现的名词.似曾相识,但对他们的含义又不是很清楚.因此,将搜索到的内容进行一下汇总. 1.vmlinux vmlinux是一个包含linux ...
- 内核镜像vmlinux和Image的区别
arm32平台 编译一个压缩后的内核镜像: make zImage 最后链接过程的log如下所示: LD vmlinuxSYSMAP System.mapSYSMAP .tmp_System.mapO ...
- linux内核镜像解压,解压内核镜像
uboot 将 zimage 复制到内存之后,跳转到 zimage 处开始执行,首先执行的代码是 arch/arm/boot/compressed/head.s 文件,首先是一些涉及不同体系结构调试相 ...
最新文章
- Nature:运动能力与空间竞争驱动的细菌共存及机制解析
- 《云计算揭秘企业实施云计算的核心问题》——3.5节中小型企业
- AR/QCA SPI 启动原理和 ART 地址定位原理
- 在 Java EE 组件中使用 Camel Routes
- rust建的怎么拆除_罗志祥私建泳池已拆除,后续还将接受物业的监督与教育
- Android系统启动过程
- 混合高斯模型_大数据小白入门高斯混合模型(GMM)聚类算法
- 蓝桥杯 C语言 试题 算法训练 猴子分苹果
- 抽头延时信道模型matlab,频率选择性衰落信道模型研究与仿真.docx
- 企业级代码静态测试工具Helix QAC——关键特性
- nginx 配置 apple-app-site-association
- 20200425-读后感-第五项修炼1-系统思考
- 测评 | 谷歌智能耳机Pixel Buds体验:耳朵里的语音助手
- 打开微信时站着的小人是谁?
- [转载]李开复针对马加爵事件写给中国学生的一封信
- android视频动态壁纸app,视频动态壁纸app下载-视频动态壁纸app安卓版下载V1.0安卓版 - 非凡软件站...
- 基于python+opencv+mediapipe实现手势识别详细讲解
- 2019-8-19 [Linux] 1.简介 发行版本 组成 应用领域 与Windows对比
- python实现模糊聚类绝对值减数法
- 融资不止,每日优鲜们的生鲜电商战不休
热门文章
- linux 网卡物理地址修改,Linux修改 网卡物理地址(Mac Address)
- 竞争对手复习状态+考研重要的时间节点,你必须知道!
- 荐书 | 2021年1季度我读过的十本好书!
- Examples osggeometry
- win10专业版(64位)安装sonar
- 构建3D虚拟世界,有哪些3D建模方式?
- QT5开发||01、灵魂三问:什么是QT?为什么要使用QT? 如何使用QT?
- 集成饿了么、美团、百度等外卖系统功能
- c++ set中各种方法的用法
- android 底座充电压力插拔,有概率没有提示音