(1)vmlinux:是内核编译出来的原始的内核文件未经压缩的。是ELF格式的,即编译出来的最原始的文件。用于kernel-debug,产生system.map符号表,不能用于直接加载,不可以作为启动内核。只是启动过程中的中间媒体。
(2)Image:是 Linux 内核镜像文件,但是 Image 仅包含可执行的二进制数据。 Image 就是使用 objcopy 取消掉 vmlinux 中的一些其他信息,比如符号表什么的。但是 Image 是没有压缩过的, Image 保存在 arch/arm/boot 目录下。Image是经过objcopy处理的只包含二进制数据的内核代码,它已经不是elf格式了,但这种格式的内核镜像还没有经过压缩.
objcopy的作用
GNU使用工具程序objcopy作用是拷贝一个目标文件的内容到另一个目标文件中,也就是说,可以将一种格式的目标文件转换成另一种格式的目标文件. 通过使用binary作为输出目标(-o binary),可产生一个原始的二进制文件,实质上是将所有的符号和重定位信息都将被抛弃,只剩下二进制数据。
(3)zImage:是经过 gzip 压缩后的 Image。一般用作uboot的镜像文件。它是由vmlinux经过objcopy , objcopy实现由vmlinux的elf文件拷贝成纯二进制数据文件加上解压代码经gzip压缩而成。mkimage可以用zImage来生成uImage
(4)uImage:是老版本 uboot 专用的镜像文件, uImag 是在 zImage 前面加了一个长度为 64字节的“头”,这个头信息描述了该镜像文件的类型、加载位置、生成时间、大小等信息。但是新的 uboot 已经支持了 zImage 启动!所以已经很少用到 uImage 了,除非你用的很古老的 uboot。
(5)bzImage:是压缩的内核镜像文件,bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。比zImage有更高的压缩率。
(6)vmlinuz:是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。一般是一个软链接。但是,它已经丢失了调试信息等,不可用于调试,这就是为什么perf和systemtap等内核级别的调试软件安装的时候,需要重新编译内核的原因。同理,解压缩vmlinuz是可以得到vmlinux的。但是失去了调试信息。相对于vmlinux,它增加了解压缩和boot的部分

zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。

linux中Image、zImage、bzImage、uImage、vmlinux和vmlinux的区别相关推荐

  1. linux挂载到哪个分区,Linux中直接挂载硬盘和挂载分区有什么区别?

     1.问题 Linux中直接挂载硬盘和挂载分区有什么区别? 比如 /dev/sdb 的硬盘,直接mkfs.ext4 /dev/sdb 后mount 使用, 和 先fdisk 分区 ,在 mkfs ...

  2. linux中进程退出函数:exit()和_exit()的区别

    linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...

  3. Linux 中 which、whereis、locate、find的区别

    Linux 中 which.whereis.locate.find的区别 which whereis locate find 总结 which which [-a] cmdname1 cmdname2 ...

  4. Linux中静态库和动态库(共享库)的区别

    1. 静态库和动态库的制作过程区别 1.1 静态库的制作过程 详见博客:Linux中静态库的制作与使用 1.2 动态库的制作过程 详见博客:Linux中动态库(共享库)的制作与使用 2. 静态库和动态 ...

  5. Linux中fstat、stat和lstat的用法与区别

    stat系统调用系列包括了fstat.stat和lstat,它们都是用来返回"相关文件状态信息"的,三者的不同之处在于设定源文件的方式不同. struct stat结构体 首先隆重 ...

  6. Linux中rz -y命令和rz -E命令的区别

    把文件上传到Linux中可以用rz指令,一般小文件我们都是用rz -y来进行上传文件,除此之外还可以用rz -E. 我是用的xshell6来链接Linux的,通常手敲指令都是用rz -y,另外还可以直 ...

  7. linux egrep和grep区别,Linux中的Grep,Egrep和Fgrep有什么区别?

    在Unix系统上的一个着名的搜索工具,可以用于搜索任何东西,无论是一个文件,或一行或多行的文件是grep实用程序.它在功能上非常庞大,这可以归因于它支持的大量选项:使用字符串模式或reg-ex模式或基 ...

  8. linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别

    shell变量包括两种变量 1.本shell私有的变量:通过赋值语句定义好的变量,可以通过如下方法定义shell变量 A1="1234" delcare A2="2345 ...

  9. Linux中rename和mv命令用法学习修改文件名区别和总结

    如何用命令修改文件名呢?在Linux下可以用rename命令,当然还可以使用mv命令,这里分享下Linux rename命令的用法. 有一部分人说Linux下没有rename命令,建议大家用mv命令. ...

  10. Linux 中/etc/profile、~/.bash_profile 环境变量配置以及区别

    环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell.对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell.对于UNIX,可能是CShelll.环境变量是通过 ...

最新文章

  1. 记录PCLVisualizer问题
  2. Spring Cloud Netflix Eureka 配置参数说明
  3. js获取上传文件内容
  4. 与variant有关的几个FUNCTION
  5. 凤凰os linux界面,让deepin linux系统与凤凰os共用个人目录的方法
  6. php连接oracle很慢是什么原因_通过DB LINK插入速度很慢的问题
  7. Java中对象的串行化(Serialization)和transient关键字
  8. android 每日构建_Android构建类型和产品风味
  9. 拓端tecdat|R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
  10. python实现嵌套列表按指定位置元素排序、按子列表长度、子列表之和、绝对值和、最大/最小值排序
  11. 虚拟机下安装BackTrack5 (BT5)教程及BT5汉化
  12. 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键
  13. 如果局域网当中两台电脑互相ping不通
  14. Stack的三种含义
  15. chrome+链接android手机,为什么android手机限制chrome浏览器数据连接还可以上网
  16. 基于 Web SDK 实现视频通话场景 | 声网 SDK 教程
  17. html5制作奥运五环,第一讲:使用html5——canvas绘制奥运五环
  18. 慕尼黑工业大学人形机器人,不依赖人类感知和决策能力自主行走
  19. python math ceil_python中math.ceil什么意思
  20. C语言中所有,C语言所有关键字.doc

热门文章

  1. 2021-2027全球及中国半框式深蹲架行业研究及十四五规划分析报告
  2. PyCharm + Docker:打造最舒适的深度学习炼丹炉
  3. Oracle 12c 手动创建CDB和非CDB
  4. C# WPF 实现鼠标固定在指定范围内运动
  5. WPF实现窗体在屏幕内移动拖拽,不超过屏幕边界
  6. Linux系统基础——系统调用
  7. wangEditor的一些坑记录
  8. 【瑞萨RA_FSP】GPT—— PWM功能详解
  9. 无线高清会议室终端之Airplay
  10. leetcode 86