vmlinuz/vmlinux、Image、zImage与uImage的区别

2023-10-28

前言

内核镜像和其他的镜像并没有本质上的区别,都是用同一套交叉编译工具链来生成的,内核有这么多不同类型的镜像是为了满足各种启动方式,本质上和其他镜像都是一样的,只是在此基础上做了修改。生成镜像的过程:
(1)源代码经过编译链接变成elf格式的可执行文件;
(2)elf文件经过objcopy工具,变成bin文件,bin文件就是可烧录文件;

生成各种内核镜像的过程:

在这里插入图片描述

(1)编译生成vmlinuz/vmlinux,就是普通的elf可执行文件,嵌入式设备一般部署时不会用这种格式的镜像,因为体积太大,并且elf格式也不能直接烧录使用;
(2)用交叉编译工具链里的objcopy,将elf格式的vmlinuz/vmlinux变成bin格式的可烧录文件,名字为Image,objcopy把几十M大的vmlinuz/vmlinux精简成了几M大小的Image,因此这个制作烧录镜像主要目的就是缩减大小,节省磁盘;
(3)实际上Image已经可以直接烧录到flash中进行执行,但是人们觉得内核还是太大了,于是对Image进行压缩,再在压缩得到的文件前端加一段解压缩代码,这样就得到了zImage;(zImage= 解压缩代码 + Image压缩得到的文件)
(4)uImage是用uboot中的mkimage工具根据zImage制作而来。uImage是专门给uboot使用的,在zImage头部添加64个字节的头,说明这个内核的版本、加载位置、生成时间、大小等信息,其0x40之后与zImage没区别。
补充:uboot都支持uImage,不一定支持zImage;现在uImage的方式被设备树的方式替代;

uImage的64字节头结构

typedef struct image_header {
    uint32_t    ih_magic;    /* Image Header Magic Number    */
    uint32_t    ih_hcrc;    /* Image Header CRC Checksum    */
    uint32_t    ih_time;    /* Image Creation Timestamp    */
    uint32_t    ih_size;    /* Image Data Size        */
    uint32_t    ih_load;    /* Data     Load  Address        */
    uint32_t    ih_ep;        /* Entry Point Address        */
    uint32_t    ih_dcrc;    /* Image Data CRC Checksum    */
    uint8_t        ih_os;        /* Operating System        */
    uint8_t        ih_arch;    /* CPU architecture        */
    uint8_t        ih_type;    /* Image Type            */
    uint8_t        ih_comp;    /* Compression Type        */
    uint8_t        ih_name[IH_NMLEN];    /* Image Name        */
} image_header_t;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vmlinuz/vmlinux、Image、zImage与uImage的区别 的相关文章

  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是

随机推荐

  • OKEX行情接口对接实例

    系统说明 开发语言 net core mssql2019 采用socket 订阅官方接收行情数据 可接收 市场 深度 行情 交易等数据
  • 炫酷的倒计时效果,祝福春节

    前言 春节将至 小福利 炫酷的倒计时效果 效果图 实现源码
  • JVM系列(七) JVM 垃圾收集器

    我们知道JVM会回收垃圾 但是每种垃圾收集器的收集机制和收集的方法都不一样 今天我们讨论下几种垃圾回收机制 1 按照垃圾区域划分垃圾收集器 我们可以按照垃圾存在的区域来划分垃圾收集器 垃圾在堆内的区域分为 新生代垃圾 老年代垃圾 新生代老年
  • aligned_alloc

    aligned alloc 函数 C C 函数签名 void aligned alloc size t alignment size t size 函数定义在
  • java代码实现下拉列表框多选操作

    实现操作 实现如图所示功能 前端没有学习 故本文只写后端内容 一 数据库 CREATE TABLE axa risk quantification id bigint 20 NOT NULL AUTO INCREMENT assets va
  • VSCode Remote-SSH (Windows)

    1 VSCode 安装 VSCode 2 安装扩展 Remote SSH Getting started Follow the step by step tutorial or if you have a simple SSH host s
  • Canny边缘检测算法原理及其VC实现详解(一)

    目录 1 边缘检测原理及步骤 2 Canny边缘检测算法原理 2 1 对原始图像进行灰度化 2 2 对图像进行高斯滤波 2 3 用一阶偏导的有限差分来计算梯度的幅值和方向 2 4 对梯度幅值进行非极大值抑制 2 5 用双阈值算法检测和连接边
  • jsp下拉框级联查询以及java代码实现

    需求描述 我们在开发过程中 很多页面查询 新增修改页面的下拉 需要通过一个下拉框的值 确定另一个下拉的值 典型的就是 选择年级 另一个下拉需要展示对应的班级 选择了班级 需要展示对应的学生 下面是存放地方 建筑物 级联查询建筑物与房间的例子
  • 《二叉搜索树OJ》

    文章目录 1 根据二叉树创建字符串 https leetcode cn problems construct string from binary tree 2 二叉树的层序遍历 https leetcode cn problems bin
  • v4l2框架API详解

    v4l2是linux内核中视频设备驱动框架 主要为了上层访问视频提供统一得标准接口 用户空间系统调用 open write read 内核空间 video device gt v4l2 device gt v4l2 subdev gt se
  • 【Windows系统】磁盘、Partition和Volume的联系与区别

    1 磁盘 Disk 磁盘 以下摘自微软 磁盘设备和分区 Win32 apps Microsoft Learn 硬盘由一组堆积的盘片组成 其中每个盘片的数据都以电磁方式存储在同心圆或 轨道中 每个盘片都有两个头 一个在盘片的两侧 在磁盘旋转时
  • ubuntu16安装新软件之后无法看到运行中的新软件

    安装新软件后 在启动器上点击新软件图标后 有小圆圈转动 看不到新软件界面 解决方法 系统设置 硬件显示 勾选 镜像显示 M 提醒 可能会限制分辨率选项 点击 应用 按钮 但字体模糊 解决方案 ctrl alt t打开命令行模式 xrandr
  • php yii2模块,Yii2模块自定义模块目录

    请教一下各位 yii2的模块创建后 比如如下的forum模块 官方的标准是如下目录结构 请问可以在该模块下手动创建一个目录么 比如common目录 如果可以的话调用该目录里的类文件与Yii1 1中的components一样么 现在想把该模块
  • Integer和int及String的总结

    Integer和int及String的总结 秉承着总结发表是最好的记忆 我把之前遇到的问题在这里总结和大家分享一下 希望大家共同进步 一 Integer和int 首先说下自动拆装箱 基本数据类型转换为包装类型的过程叫装箱 反之则是拆箱 其中
  • matlab 利用while循环计算平均值和方差

    一 该程序是用来测输入数据的平均值和方差的 公式 二 项目流程 1 State the problem假定所有测量数为正数或者0 计算这一系列测量数的平均值和方差 假定我们预先不知道有多少测量数据被录入 一个负数标志着测量数据输入结束 2
  • 网络层重点协议-IP协议(结构分析)

    IP协议数据报格式 一 4位版本号 用来表示IP协议的版本 现有的IP协议只有两个版本IPv4和IPv6 二 4位首部长度 IP协议数据报报头的长度 三 8位服务类型 3位优先权字段 已经弃用 4位TOS字段 和1位保留 字段 必须置为0
  • 实验4

    一 实验目的 1 掌握DPCM编解码系统的基本原理 2 初步掌握实验用C C Python等语言编程实现DPCM 编码器 并分析其压缩效率 二 实验内容 1 DPCM编解码原理 DPCM是差分预测编码调制的缩写 是比较典型的预测编码系统 在
  • 基于SPI机制和DataX插件热加载破坏双亲委派的思考

    在开始阅读之前请先思考以下两个问题 并希望您能再接下来的文章中找到答案 1 如果我自己实现了一个新的java lang String类 并通过UrlClassLoader加载使用该类 能否覆盖JDK中的 java lang String 2
  • 五、Eureka服务注册、续约、剔除、下线源码分析

    Eureka 概念的理解 1 服务的注册 当项目启动时 eureka 的客户端 就会向 eureka server 发送自己的元数据 原始数据 运行的 ip 端口 port 健康的状态监控等 因为使用的是 http ResuFul 请求风格
  • vmlinuz/vmlinux、Image、zImage与uImage的区别

    前言 内核镜像和其他的镜像并没有本质上的区别 都是用同一套交叉编译工具链来生成的 内核有这么多不同类型的镜像是为了满足各种启动方式 本质上和其他镜像都是一样的 只是在此基础上做了修改 生成镜像的过程 1 源代码经过编译链接变成elf格式的可