linux常用的内核镜像格式
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内核镜像格式
版权声明:*本文章参考了<Linux内核官方文档>.未经作者允许,严禁用于商业出版**,否则追究法律责任.网络转载请注明出处,这是对原创者的起码的尊重!!!* 1 Linux内核镜像格 ...
- THREE DAY | 网络安全之Linux(包含Linux常用命令,镜像下载,docker命令等内容)超详细!!!
THREE DAY | 网络安全之Linux 一.Linux介绍 1.Linux系统简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多 ...
- Linux 5.4内核 exFAT格式U盘所需配置项
一.问题描述 linux 5.4 内核可以直接通过配置config文件从而支持exFAT文件系统格式U盘的挂载. 一.问题解决 1.进入内核根目录,命令行下通过make menuconfig开启图形化 ...
- linux 2.6内核镜像,Linux2.6内核镜像的构建过程
make menuconfig:修改.添加内核配置选项,最后生成.config配置文件. make all:首先编译.config得到没有压缩的内核核心vmlinux,然后将其压缩生成引导过程使用的内 ...
- Linux内核镜像文件格式与生成过程(转)
<Linux内核镜像格式> Linux内核有多种格式的镜像,包括vmlinux.Image.zImage.bzImage.uImage.xipImage.bootpImage等. ➤k ...
- linux系统print命令,linux常用命令 print格式输出
格式化输出命令 printf '输出类型 输出格式' 输出内容 输出类型: %ns 输出字符串,n是数字指代输出的几个字符 %ni 输出整数,n是数字指代输出几个数字 %m.nf 输出浮点数.m和n是 ...
- Linux常用命令之文件和目录处理命令
目录 1.Linux命令的普遍语法格式 2.目录处理命令 一.显示目录文件命令:ls 二.创建目录命令:mkdir 三.切换目录命令:cd 四.shell内置命令和外部命令的区别 五.显示当前目录命令 ...
- linux 解压安卓内核,解压内核镜像
这里将告诉您解压内核镜像,教程操作步骤: 步骤 0 uboot 将 zImage 复制到内存之后,跳转到 zImage 处开始执行,首先执行的代码是 arch/arm/boot/compressed/ ...
- Linux内核开发——内核镜像文件及启动过程
1. 内核镜像文件 1.1. vmlinux vmlinux是elf(Excutable And Linkable),即可执行文件.里面含有调试信息,可用于调试,所以占有空间较大.gcc编译连接之后直 ...
最新文章
- 怎么快速插入 100 条数据,用时最短
- css 动态rem_【面试题】CSS知识点整理(附答案)
- android 取消点击GridView的时候出现的那个黄色背景
- java 初始化的加载顺序问题
- java jni开发_Java JNI开发实践记录
- jquer each 遍历的结果不显示 null_SpringBoot系列(三十一)- Thymeleaf如何用th:each 做条件遍历
- 指针运算不同于算数运算,不能简单加减
- 常用JS库源码 - store.js源码/underscore.js源码
- 3D开发-AR技术基础
- python使用sql读取数据表并返回dataframe
- 添加Maven(mvn)、sbt的国内仓库
- hwd分别是长宽高_丰田重磅新RAV4荣放!不仅颜值高了 配置还再升级,仅18万
- 汇编语言王爽 实验七
- linux rz sz使用
- echarts官网折线图
- 手机号空号检测的几点建议
- 全减器及其相关概念的理解
- qt信号发送间隔短而槽耗时多_Qt 信号和槽机制详解
- vscode html可视化,在VSCode中可视化数据结构
- bzoj5064 B-number 数位dp
热门文章
- mysql 存储地理信息_使用Amazon Aurora存储和处理地理信息数据
- spring的多个.xml配置文件要保证在同一个容器中
- Linux查看谁修改的文件,linux如何查看近来修改的文件
- eclipseweb开发遇到的bug
- python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器
- const的使用CC++
- 树,森林与二叉树之间的转换
- 计算机网络期中考试总结反思,期中考试总结反思作文(通用6篇)
- c# 字典按ascii 排序_sort命令-将文件进行排序并输出
- 深入理解JVM虚拟机(四):Class类文件结构(一)