https://zhuanlan.zhihu.com/p/466226177

本文介绍几种常用的Linux内核映像的区别。

一、vmlinux

vmlinux:Linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。

该映像可用于定位内核问题,但不能直接引导Linux系统启动。

使用readelf命令查看RockPI 4A单板Linux内核编译的vmlinux,内容如下:

root@ubuntu:/home/run/code/rockchip-bsp/kernel# readelf -h vmlinux
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: AArch64 ## 64位系统
Version: 0x1
Entry point address: 0xffffff8008080000
Start of program headers: 64 (bytes into file)
Start of section headers: 264512168 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 4
Size of section headers: 64 (bytes)
Number of section headers: 36
Section header string table index: 35

二、Image

Image:Linux内核编译时,使用objcopy处理vmlinux后生成的二进制内核映像。

该映像未压缩,可直接引导Linux系统启动。

RockPI 4A单板Linux内核编译vmlinux和Image过程如下:

root@ubuntu:/home/run/code/rockchip-bsp# ./build/mk-kernel.sh rockpi4a
Building kernel for rockpi4a board!
4.4.154 ## 4.4.154内核
...
LINK vmlinux
LD vmlinux.o
MODPOST vmlinux.o
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
KSYM .tmp_kallsyms1.o
KSYM .tmp_kallsyms2.o
LD vmlinux
SORTEX vmlinux
SYSMAP System.map
OBJCOPY arch/arm64/boot/Image ## 使用objcopy命令将vmlinux变为Image映像

objcopy命令的用法后续介绍。

三、zImage

zImage:使用gzip压缩Image后,使用objcopy命令生成的Linux内核映像。

该映像一般作为uboot的引导映像文件。uboot引导命令后续介绍。

四、uImage

uImage:在zImage前面增加一个64字节的头,描述映像文件类型,加载位置,大小等信息。

该映像是老版本uboot专用的引导映像。

下图是基于imx6 处理器Linux内核编译出的zImage和uImage的差异,区别如下:

zImage和uImage的差异

imx6单板Linux内核编译zImage和uImage过程如下:

root@ubuntu:/home/run/code/imx6/linux-3.0.35# ./mk_kernel.sh
arch/arm/configs/imx6_defconfig:1629:warning: override: reassigning to symbol SND_SOC_IMX_WM8962
...
LD vmlinux ## 1.制作vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image ## 2.使用objcopy命令生成Image
Kernel: arch/arm/boot/Image is ready
GZIP arch/arm/boot/compressed/piggy.gzip ## 3.压缩
AS arch/arm/boot/compressed/piggy.gzip.o
SHIPPED arch/arm/boot/compressed/lib1funcs.S
AS arch/arm/boot/compressed/lib1funcs.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage ## 4.使用objcopy命令生成zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage ## 5.使用mkimage命令生成uImage
Image Name: Linux-3.0.35-2666-gbdde708-g5083
Created: Sun May 2 08:38:41 2021
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3250684 Bytes = 3174.50 kB = 3.10 MB
Load Address: 0x10008000
Entry Point: 0x10008000
Image arch/arm/boot/uImage is ready

下图展示了不同类型的Linux映像生成过程。

Linux映像生成过程

注:zImage和uImage用于32位内核。

[转帖]Linux内核映像vmlinux、Image、zImage、uImage区别的更多相关文章

  1. [转帖]Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有

    Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有 之前用 千兆的机器 下载速度 一般只能到 50MB 左右 没法更高 万兆的话 可能也就是 200MB左右的速度 很难更高 不知道后续的服 ...

  2. [转帖]Linux内核系统体系概述

    Linux内核系统体系概述 https://www.cnblogs.com/alantu2018/p/8447369.html Linux 内核主要由 5 个模块构成,它们分别是: 进程调度模块 用来 ...

  3. [转帖]Linux内核剖析(一)Linux的历史

    Linux内核剖析(一)Linux的历史 https://www.cnblogs.com/alantu2018/p/8991158.html Unix操作系统 Unix的由来 汤普逊和里奇最早是在贝尔 ...

  4. linux内核中的每cpu变量

    一.linux中的每cpu变量 看linux内核代码的时候,会发现大量的per_cpu(name, cpu),get_cpu_var(name)等出现cpu字眼的语句.从语句的意思可以看出是要使用与当 ...

  5. 20169212《Linux内核原理与分析》第五周作业

    关于linux内核源码 两个很关键的目录,一个是arch(architecture),支持不同cpu体系架构的源代码,其中最重要的就是x86(一般把x86留下,其他的目录删掉),另一个是init(其中 ...

  6. linux内核编译相关

    参考:http://www.arm.linux.org.uk/docs/kerncomp.php 一. 内核编译1) linux 2.4make clean/make mrpropermake dep ...

  7. linux 内核 zImage 生成过程分析

    1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号表的最初的内核,大小约23MB: arm ...

  8. Linux内核剖析(五)Linux内核的构建过程

    参考 一次实验引发的故事 – kernel build system探索—vmlinux是如何炼成的– kernel makefile 深度探索Linux操作系统:系统构建和原理解析.pdf 问题 在 ...

  9. Linux内核启动流程分析(一)【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接 ...

  10. 20169211《Linux内核原理与分析》第三周作业

    假期中抽时间学习了一下linux内核的启动过程,在此做一下学习总结. Linux启动过程描述: 1.启动BootLoader 2.Linux系统的初始化 3.Linux的应用程序的初始化 通用寄存器的 ...

随机推荐

  1. 2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金, 现在有一位小偷计划从这些房屋中窃取现金, 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋, 小

    2023-11-01:用go语言,沿街有一排连续的房屋.每间房屋内都藏有一定的现金, 现在有一位小偷计划从这些房屋中窃取现金, 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋, 小 ...

  2. GetView介绍 以及 GetxController生命周期

    etView 只是对已注册的 Controller 有一个名为 controller 的getter的 const Stateless 的 Widget,如果我们只有单个控制器作为依赖项,那我们就可以 ...

  3. 第三部分_Shell脚本简单四则运算

    简单四则运算 算术运算:默认情况下,shell就只能支持简单的整数运算 运算内容:加(+).减(-).乘(*).除(/).求余数(%) 1. 四则运算符号 表达式 举例 $(( )) | echo $ ...

  4. 十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略

    摘要: 性能调优是应用迁移或开发过程中的关键步骤,同时也在整个项目实施过程中占据很大的份量,本篇主要介绍数据库级别的性能调优思路和总体策略. 性能调优是应用迁移或开发过程中的关键步骤,同时也在整个项目 ...

  5. 这是你没见过的MindSpore 2.0.0 for Windows GPU版

    摘要:一文带你看看MindSpore 2.0.0 for Windows GPU版. 本文分享自华为云社区<MindSpore 2.0.0 for Windows GPU泄漏版尝鲜>,作者 ...

  6. 总结vue3 的一些知识点:MySQL NULL 值处理

    MySQL NULL 值处理 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. ...

  7. 大数据 - ODS&DWD&DIM-SQL分享

    大数据 ODS&DWD&DIM-SQL分享 需求 思路一:等差数列 断2天.3天,嵌套太多 1.1 开窗,按照 id 分组,同时按照 dt 排序,求 Rank -- linux 中空格 ...

  8. MappedByteBuffer 写文件

    MappedByteBuffer中"put"和"force"的区别是什么 put()将数据存储在缓冲区中,force()通知操作系统将缓冲区刷新到磁盘. put ...

  9. Python中节省内存的方法之一:__slots__属性

    Python是一门动态语言,可以在运行过程中,修改实例的属性和增删方法.任何实例都包含一个字典__dict__,该字典保存了实例所有的属性和方法.Python也通过这个字典可以将任意属性绑定到实例上. ...

  10. 生成学习全景:从基础理论到GANs技术实战

    本文全面探讨了生成学习的理论与实践,包括对生成学习与判别学习的比较.详细解析GANs.VAEs及自回归模型的工作原理与结构,并通过实战案例展示了GAN模型在PyTorch中的实现. 关注TechLea ...