当前位置: 首页 > news >正文

1.分析vmlinux可执行文件是如何生成的? 2.整理内核编译流程:uImage/zImage/Image/vmlinx之间关系

一、分析vmlinux可执行文件是如何生成的?

1、分析内核的底层 makefile 如下:

vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE+$(call if_changed,link-vmlinux)vmlinux_prereq: $(vmlinux-deps) FORCE

 发现vmlinux的生成主要依赖于 vmlinux-deps。


vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN) $(KBUILD_VMLINUX_LIBS)

KBUILD_LDS:是一个链接文件。

KBUILD_VMLINUX_MAIN:是一些库和驱动。

分析一下KBUILD_VMLINUX_INIT

init-y        := $(patsubst %/, %/built-in.o, $(init-y))
...
KBUILD_VMLINUX_INIT := $(head-y) $(init-y)


可以看出来 KBUILD_VMLINUX_INIT 是一些目录下的 built-in.o 文件。

二、整理内核编译流程:uImage/zImage/Image/vmlinx之间关系

1、Image和内核顶层目录下vmlinx关系?

         vmlinux通过objcopy格式化转换为Image

2、rch/arm/boot/compressedvmlinux文件和Image之间关系?

         将Image镜像文件经过gzip压缩生成rch/arm/boot/compressed/vmlinx镜像文件

3、zImage和arch/arm/boot/compressed/vmlinux关系?

        zImage是通过vmlinux格式化转换为的文件

4、uImage和zImage之间关系?

        1)uImage使用在zImage使用mkimage工具得到的,uImage在zImage前添加64字节头部信息。

        2)每次编译打印信息的内容就是编译到uImage中内容:

        Image Name: Linux-5.10.61

         Created: Wed Mar 8 16:15:39 2023

        Image Type: ARM Linux Kernel Image (uncompressed)

         Data Size: 7172080    Bytes = 7003.98   KiB = 6.84 MiB         

        Load Address: c2000000

        Entry Point: c2000000

总结内核编译流程:

vmlinx--->objcopy--->Image--->gzip--->arch/arm/boot/compressed/vmlinx--->objcopy--->zImage--->mkimage--->uImage

http://www.lryc.cn/news/34574.html

相关文章:

  • 数据结构4——线性表3:线性表的链式结构
  • weblogic 忘记密码重置密码
  • 安卓开发之动态设置网络访问地址
  • 深度学习模型训练工作汇报(3.8)
  • 【ns-3】添加nr(5G-LENA)模块
  • (枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组
  • mysql五种索引类型(实操版本)
  • 微服务进阶之 SpringCloud Alibaba
  • 前端性能优化笔记2 第二章 度量
  • 关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理
  • 一场以数字技术深度影响和改造传统实业的新风口,正在开启
  • 【LeetCode】13. 罗马数字转整数
  • 2023/3/8集合之TreeSet HashSet简介 不含代码
  • 【面试1v1实景模拟】面试中常见的Java关键字详解
  • MySQL8.0.16存储过程比5.7.22性能大幅下降
  • 基于MATLAB的无线信道的传播与衰落(附完整代码与分析)
  • SDX62如何查看Kernel版本和Operating System Version Patch Level
  • 001+limou+HTML——(1)HTML入门知识
  • 使用Arduino Uno构建一个巡线机器人
  • 【C++】类和对象(收尾)
  • Linux延迟操作
  • np.insert()函数用法
  • 学习笔记-架构的演进之容器的封装-3月day06
  • Gorm根据关系模型中的属性查询原模型数据
  • 车载技术【USB接口】—Android配件协议AOA【AOA连接】
  • SpringBoot的基本概念和使用
  • 基于计算机软件技术的化工设计特点
  • Nativefier把网页打包成exe
  • STM32U5开发(1)----通过 USART1 发送数据
  • 20230308 Apdl lsdyna两杆撞击案例学习笔记