当前位置:网站首页>内核映像文件格式
内核映像文件格式
2022-08-10 05:36:00 【刘十彡】
1.vmlinux
vmlinux是一个包含linux kernel的静态链接的可执行文件,文件类型是linux接受的可执行文件格式之一(ELF、COFF或a.out)。
2.vmlinuz
vmlinuz是可引导的,压缩的linux内核,“vm”代表的“virtual memory”。vmlinuz是vmlinux经过gzip和objcopy(*)制作出来的压缩文件。vmlinuz不仅是一个压缩文件,而且在文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
vmlinuz是一个统称,有两种具体的表现形式:zImage和bzImage(big zImage)。
zImage和bzImage的区别在于本身的大小和加载到内存的地址不同。zImage是0~640KB,bzImage是1M以上。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
3.综述
总结起来就是如下的几句话:
vmlinux 是ELF文件,即编译出来的最原始的文件。
vmlinuz应该是由ELF文件vmlinux经过OBJCOPY后,并经过压缩后的文件
zImage是vmlinuz经过gzip压缩后的文件,适用于小内核
bzImage是vmlinuz经过gzip压缩后的文件,适用于大内核
一、Linux内核镜像格式
Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.
(1)kernel镜像格式:vmlinux
vmlinuz是可引导的、可压缩的内核镜像,vm代表Virtual Memory.Linux支持虚拟内存,因此得名vm.它是由用户对内核源码编译得到,实质是elf格式的文件.也就是说,vmlinux是编译出来的最原始的内核文件,未压缩.这种格式的镜像文件多存放在PC机上.
【 attention】elf格式文件
ELF,Executable and Linkable Format,可执行可链接格式,是UNIX实验室作为应用程序二进制接口而发布的,扩展名为elf.可以简单的认为,在elf格式的文件中,除二进制代 码外,还包括该可执行文件的某些信息,比如符号表等.
(2)kernel镜像格式:Image
Image是经过objcopy处理的只包含二进制数据的内核代码,它已经不是elf格式了,但这种格式的内核镜像还没有经过压缩.
【 attention】objcopy
GNU使用工具程序objcopy作用是拷贝一个目标文件的内容到另一个目标文件中,也就是说,可以将一种格式的目标文件转换成另一种格式的目标文件. 通过使用binary作为输出目标(-o binary),可产生一个原始的二进制文件,实质上是将所有的符号和重定位信息都将被抛弃,只剩下二进制数据.
(3)kernel镜像格式:zImage
zImage是ARM linux常用的一种压缩镜像文件,它是由vmlinux加上解压代码经gzip压缩而成,命令格式是
make zImage.
这种格式的Linux镜像文件多存放在NAND上.
(4)kernel镜像格式:bzImage
bz表示big zImage,其格式与zImage类似,但采用了不同的压缩算法,注意,bzImage的压缩率更高.
(5)kernel镜像格式:uImage
uImage是uboot专用的镜像文件,它是在zImage之前加上一个长度为0x40的头信息(tag),在头信息内说明了该镜像文件的类型、加载 位置、生成时间、大小等信息.换句话说,若直接从uImage的0x40位置开始执行,则zImage和uImage没有任何区别.命令格式是#make uImage.这种格式的Linux镜像文件多存放在NAND上.
(6)kernel镜像格式:xipImage
这种格式的Linux镜像文件多存放在NorFlash上,且运行时不需要拷贝到内存SDRAM中,可以直接在NorFlash中运行.
二、Linux内核镜像的产生过程
在嵌入式Linux中,内核的启动过程分为两个阶段.其中,第一阶段启动代码放在arch/arm/kernel/head.S文件中,该文件与体系 结果相关,与用户的开发板无关,主要是初始化ARM内核等.第二阶段启动代码是init目录下的main.c.现以执行命令#make zImage为例来说明,arm-linux内核镜像的产生过程.
(1)当用户对Linux内核源码进行编译时,kernel的第1/2阶段代码会生成可执行文件vmlinux,该文件是未被压缩的镜像文件,非常大,不能直接下载到NAND中,通常放在PC机上,这也是最原始的Linux镜像文件.试验时该文件约50M.
(2)镜像文件vmlinux由于很大,肯定不能直接烧入NAND中,因此需要进行二进制化,即经过objcopy处理,使之只包含二进制数据的内核代 码,去除不需要的文件信息等,这样就制作成了image镜像文件.该镜像文件也是未压缩,只是经过了二进制化而变小.试验时该文件约5M.
(3) 一般来说,内存SDRAM中的内核镜像是经过压缩的,只是在运行时再将其解压.所以,编译时会先使用gzip将镜像文件image进行压缩(压缩比约为 2:1),再将压缩后的镜像文件和源码中的两个文件arch/arm/boot/compressed/head.S、arch/arm/boot /compressed/misc.c一起链接生成压缩后的镜像文件compress/vmlinux.试验时该文件约为2.5M.注意,这两个源码文件 是解压程序,用于将内存SDRAM中的压缩镜像zImage进行解压.
(4)压缩后的镜像文件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镜像文件大小相同.
边栏推荐
猜你喜欢

Notes for SVM

以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例

Flutter Package 插件开发

STM32F407ZG TIM通用定时器

【图像识别】训练一个最最简单的AI使其识别Vtuber

Tensorflow 2.0 使用流程详解

Unity中实现Animation Clip动画片段的倒播(该案例可以防止动画延迟)

STM32单片机手机APP蓝牙高亮RGB彩灯控制板任意颜色亮度调光

The way for programmers to make money from a sideline business and increase their monthly income by 20K

STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
随机推荐
电路建模的要点
二维卷积定理的验证(下,cv2.filter2D())
请亲们关注下我,谢谢了。
LruCache与DiskLruCache结合简单实现ImageLoader
Explain the principle of MySql index in detail
酸回收树脂工艺技术详解
接口自动化2.0
STM32单片机OLED经典2048游戏单片机小游戏
51单片机营养液自动配置搅拌系统TDS浓度采集自动加水加营养液
Flutter的生命周期
KDE框架介绍
Notes for RNN and Decision Tree
21天学习挑战赛--图像物体的边界
Unity中实现Animation Clip动画片段的倒播(该案例可以防止动画延迟)
ASP.NET有关于文件上传、下载、全选、删除选中重要干货(亲测有效)
动态规划、背包问题 6/24 106-110
51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
51单片机教室人数进出统计检测数码管显示装置红外传感器
系统架构和问题定位
51单片机智能蓝牙APP加油站火灾预警安防防控报警监控系统MQ2DHT11