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

Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf

🧠 Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf

在嵌入式 Linux 系统中,启动流程涉及多个关键文件和机制。不同的镜像格式和配置文件承担着不同的职责,从内核编译到 bootloader 加载,再到系统启动。本文将系统梳理 vmlinux、Image、zImage、uImage、System.map、extlinux.conf 的作用、生成方式及它们之间的关系。


✅ 一、vmlinux:原始内核文件(调试专用)

📦 是什么?

  • vmlinux 是 Linux 内核编译完成后生成的 ELF 格式可执行文件
  • 包含完整的符号表、调试信息、段信息
  • 不能直接用于启动系统,但是调试内核的关键文件

🔧 用途:

  • GDB 调试内核
  • crash 工具分析 vmcore
  • 提供 System.map 符号表参考

📁 位置:

通常在内核源码根目录下生成:

./vmlinux

✅ 二、Image:可启动的内核镜像(未压缩)

📦 是什么?

  • Image 是从 vmlinux 中提取出的纯内核代码二进制文件
  • 去掉了调试信息和符号表
  • 可直接被 bootloader(如 U-Boot)加载并启动

🔧 用途:

  • 嵌入式设备启动(如 RK3588)
  • 配合 extlinux.conf 或 FIT image 使用

📁 位置:

arch/arm64/boot/Image

✅ 三、zImage:压缩内核镜像(含解压引导)

📦 是什么?

  • zImageImage 的压缩版本,附带一个 boot stub(解压引导代码)
  • 启动时自动解压并跳转到内核入口

🔧 用途:

  • ARM 平台常用,适合空间受限设备
  • 可通过 bootz 命令启动(U-Boot)

📁 位置:

arch/arm/boot/zImage

✅ 四、uImage:U-Boot 专用镜像(加头信息)

📦 是什么?

  • uImage 是在 ImagezImage 前加上 U-Boot 识别的头部信息
  • 包含加载地址、镜像大小、类型等元数据
  • 使用 mkimage 工具生成

🔧 用途:

  • 老版本 U-Boot 使用 uImage 加载内核
  • 新版 U-Boot 已支持直接加载 ImagezImage

📁 生成方式:

mkimage -A arm -O linux -T kernel -C none -a 0x00200000 -e 0x00200000 -n "Linux Kernel" -d Image uImage

✅ 五、System.map:符号表文件(定位地址)

📦 是什么?

  • System.map 是编译内核时生成的符号表文件
  • 记录了所有函数、变量的地址与名称

🔧 用途:

  • 分析内核崩溃日志(定位 PC/LR 地址)
  • 查找符号是否存在
  • 配合 /proc/kallsyms 做符号对比
  • crash 工具分析 vmcore(需配合 vmlinux)

📁 位置:

/boot/System.map-<kernel-version>

✅ 六、extlinux.conf:启动配置文件(U-Boot 菜单)

📦 是什么?

  • extlinux.conf 是 U-Boot 支持的启动配置文件
  • 定义启动项、内核路径、设备树路径、initrd 路径、启动参数等

🔧 用途:

  • 多启动项管理
  • 设置默认启动项、超时、菜单背景
  • 配合 Image 使用,简化启动流程

📁 示例配置:

LABEL linux-6.1.118KERNEL /Image-6.1.118FDT /rk3588-firefly.dtbINITRD /initrd-6.1.118APPEND root=/dev/mmcblk0p7 rw console=ttyFIQ0 loglevel=8

🔗 七、它们之间的关系图解

vmlinux ──▶ System.map│├──(objcopy)──▶ Image ──▶ zImage ──▶ uImage│                      │           ││                      └──▶ extlinux.conf 引用└──▶ GDB / crash 工具调试


文章转载自:

http://dfgXcVPh.dzgyr.cn
http://BTSUDtzw.dzgyr.cn
http://KNsXKMJN.dzgyr.cn
http://vqAsnRuu.dzgyr.cn
http://APcZ8hSy.dzgyr.cn
http://lh5Cyr83.dzgyr.cn
http://8hLrlaTN.dzgyr.cn
http://4sY8mvZS.dzgyr.cn
http://YqTZcILL.dzgyr.cn
http://Krg8vs5N.dzgyr.cn
http://EkKWJXiv.dzgyr.cn
http://s50IVIOp.dzgyr.cn
http://TIhhOe1w.dzgyr.cn
http://shUibPK5.dzgyr.cn
http://gyl7OnnN.dzgyr.cn
http://942KzJdD.dzgyr.cn
http://rFBIZIHE.dzgyr.cn
http://w3DMG3gX.dzgyr.cn
http://Xy3lnjT0.dzgyr.cn
http://We69ueFy.dzgyr.cn
http://vMAcpnCN.dzgyr.cn
http://vmP77Wg3.dzgyr.cn
http://LR8dEUst.dzgyr.cn
http://7iFgPoBZ.dzgyr.cn
http://eHHVzOKb.dzgyr.cn
http://4RBNXLBg.dzgyr.cn
http://STB7o05t.dzgyr.cn
http://TwpTCNsT.dzgyr.cn
http://YG5n71RE.dzgyr.cn
http://GHoycxWF.dzgyr.cn
http://www.dtcms.com/a/381564.html

相关文章:

  • HIS架构智能化升级编程路径:从底层原理到临床实践的深度解析(上)
  • leetcode-加油站
  • Coze源码分析-资源库-创建知识库-前端源码-总结
  • 【PHP7内核剖析】-1.2 执行流程
  • Java 多线程进阶(四)-- 锁策略,CAS,synchronized的原理,JUC当中常见的类
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进
  • UE5版本Windows构建pc平台报错googletest的问题记录
  • 【LeetCode】杨辉三角,轮转数组,洗牌算法
  • 5.Three.js 学习(基础+实践)
  • 在 React 中如何使用 useMemo 和 useCallback 优化性能?
  • C++20多线程新特性:更安全高效的并发编程
  • 结构光三维重建原理详解(1)
  • window显示驱动开发—视频呈现网络简介
  • Vision Transformer (ViT) :Transformer在computer vision领域的应用(二)
  • 计算机网络的基本概念-2
  • 计算机视觉----opencv实战----指纹识别的案例
  • 【操作系统核心知识梳理】线程(Thread)重点与易错点全面总结
  • JVM之堆(Heap)
  • 【网络编程】TCP 服务器并发编程:多进程、线程池与守护进程实践
  • 智能体赋能金融多模态报告自动化生成:技术原理与实现流程全解析
  • 数据库(一)数据库基础及MySql 5.7+的编译安装
  • 将 x 减到 0 的最小操作数
  • Java 开发工具,最新2025 IDEA使用(附详细教程)
  • 基于STM32单片机的OneNet物联网粉尘烟雾检测系统
  • 注意力机制与常见变种-概述
  • Linux内核TCP协议实现深度解析
  • 数据治理进阶——40页数据治理的基本概念【附全文阅读】
  • Spring Boot 与前端文件下载问题:大文件、断点续传与安全校验
  • 认知语义学中的象似性对人工智能自然语言处理深层语义分析的影响与启示
  • 游戏服务器使用actor模型