[转帖]Linux内核映像vmlinux、Image、zImage、uImage区别

linux,内核,映像,vmlinux,image,zimage,uimage,区别 · 浏览次数 : 0

小编点评

## Linux内核映像的几种类型 **1. vmlinux** * 是Linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。 * 可用于定位内核问题,但不能直接引导Linux系统启动。 * 使用readelf命令查看RockPI 4A单板Linux内核编译的vmlinux,内容如下: ``` root@ubuntu:/home/run/code/rockchip-bsp/kernel# readelf -h vmlinuxELF 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 ``` **2. Image** * 是Linux内核编译时,使用objcopy处理vmlinux后生成的二进制内核映像。 * 该映像未压缩,可直接引导Linux系统启动。 **3. zImage** * 使用gzip压缩Image后,使用objcopy命令生成的Linux内核映像。 * 该映像一般作为uboot的引导映像文件。 **4. uImage** * 在zImage前面增加一个64字节的头,描述映像文件类型,加载位置,大小等信息。 * 该映像是老版本uboot专用的引导映像。 **总结:** * vmlinux 是内核编译出来的原始内核文件,无法直接引导Linux系统启动。 * Image 是内核编译时,使用objcopy处理的二进制内核映像,可直接引导Linux系统启动。 * zImage 是使用gzip压缩后的内核映像,通常作为uboot的引导映像文件。 * uImage 是在zImage前面增加64字节的头,描述映像文件类型,加载位置,大小等信息,通常用于老版本uboot引导映像。

正文

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

一、vmlinux

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

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

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

root@ubuntu:/home/run/code/rockchip-bsp/kernel# readelf -h vmlinuxELF 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命令生成uImageImage Name:   Linux-3.0.35-2666-gbdde708-g5083Created:      Sun May  2 08:38:41 2021Image Type:   ARM Linux Kernel Image (uncompressed)Data Size:    3250684 Bytes = 3174.50 kB = 3.10 MBLoad Address: 0x10008000Entry Point:  0x10008000  Image arch/arm/boot/uImage is ready
复制

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

Linux映像生成过程

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux25440 人正在系统学习中
一口Linux
微信公众号
嵌入式Linux硬核号主!

与[转帖]Linux内核映像vmlinux、Image、zImage、uImage区别相似的内容:

[转帖]Linux内核映像vmlinux、Image、zImage、uImage区别

本文介绍几种常用的Linux内核映像的区别。 一、vmlinux vmlinux:Linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。 该映像可用于定位内核问题,但不能直接引导Linux系统启动。 使用readelf命令查看RockPI 4A单板Linux内核编译的vmlinux,内容

[转帖]Linux内核映像vmlinux、Image、zImage、uImage区别

https://zhuanlan.zhihu.com/p/466226177 本文介绍几种常用的Linux内核映像的区别。 一、vmlinux vmlinux:Linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。 该映像可用于定位内核问题,但不能直接引导Linux系统启动。 使用rea

[转帖]《Linux性能优化实战》笔记(八)—— 内存是怎么工作的

一、 内存映射 我们通常所说的内存容量,指的是物理内存。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。那么,进程要访问内存时,该怎么办呢? Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以

[转帖]Linux 页表、大页与透明大页

一、 内存映射与页表 1. 内存映射 我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以。 Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内

[转帖]Linux 页表、大页与透明大页

一、 内存映射与页表 1. 内存映射 我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以。 Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内

[转帖]Linux中的零拷贝技术

https://www.jianshu.com/p/a757a93b6e5f 内存映射--mmap 内核和用户空间,共享内存。数据copy到内核区后,只需要把地址共享给应用程序即可,无需再copy一次数据到用户空间。 image.png 优点: 用户程序可以读取和修改共享内存的数据,就像读取用户空间

[转帖]Linux性能优化和内核观测 - 内存篇(一)

内存虚拟内存Linux 采用的是​​虚拟内存​​机制,每个进程都有自己的虚拟内存地址空间,仅当实际使用内存的时候才会映射到物理内存地址之上。这种设计提供了物理内存的超额分配,Linux 中的内存管理机制包括页换出守护进程(page out daemon)、物理换页设备(swap device),以及

[转帖]linux性能优化-内存回收

linux文件页、脏页、匿名页 缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做文件页(File-backed Page)。通过内存映射获取的文件映射页,也是一种常见的文件页。它也可以被释放掉,下次再访问的时候,从文件重新读取。 大部分文件页,都可以直接回收,以后有需要时,再从磁盘重新读

[转帖]Linux 写时复制技术

https://www.cnblogs.com/dwtfukgv/p/15125933.html 目录 Linux fork Linux exec Linux 进程虚拟地址空间 栈 内存映射段 堆 BSS段 数据段 代码段 分段的优点 页表 写时复制原理 非写时复制fork一个子进程 写时复制for

[转帖]Linux内核 TCP/IP、Socket参数调优

文章系转载,便于整理和分类,原文地址:http://www.360doc.com/content/14/0606/16/3300331_384326124.shtml Doc1: /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sy