ELF 文件和 Linux 内核镜像文件

bash 复制代码
m@m-ThinkPad-T14-Gen-2i:~/chy/linux-6.18.5/arch/arm64/boot$ file Image
Image: Linux kernel ARM64 boot executable Image, little-endian, 4K pages

m@m-ThinkPad-T14-Gen-2i:~/chy/busybox-1.36.1/_install/bin$ file busybox 
busybox: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=1c93cc9354e5fb781e3275078645b4b4433a090e, for GNU/Linux 3.7.0, stripped

m@m-ThinkPad-T14-Gen-2i:~/chy/linux-6.18.5$ file vmlinux
vmlinux: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]=beec8d7a606f6a96c69a8bb96002ae323fceb7e7, with debug_info, not stripped

编译 Linux 时,默认情况下是一个名为 Image 的二进制文件,我们约定将其称为"内核镜像文件"。通过 file 查看他的类型,发现与平常的 ELF 文件不同。同时,我们发现与"内核镜像文件"一同产生了一个名为 vmlinux 的文件,他正是一个 ELF 文件。

ELF 文件和内核镜像文件有本质的区别,也有紧密的联系。ELF 文件是给操作系统看的,其中包含 ELF Header, Program Headers, Section Headers 等元数据。linux 的 exec 系统调用能解析 ELF 文件,把其中的数据和代码加载到内存中以待运行。内核镜像文件是给 bootloader 看的,他的内容只是扁平的二进制数据,或者说遵循一个很简单的数据格式,bootloader 不用做太多解析的工作,直接把他 copy 到内存中就能跑。

上面提到 vmlinux 也是编译内核的产物之一,并且是一个 ELF 文件。其实他是内核镜像文件的来源。编译过程中使用 objcopy 工具将 vmlinux 进行转储(进行了文件类型的转换),生成了更简单的内核镜像文件。

相关推荐
中云DDoS CC防护蔡蔡5 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery5 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧6 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery6 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
上海广测检测科技有限公司6 小时前
蓝牙音箱的 BQB 认证:音频服务层组合、引用链判定与测试状态设定
经验分享
qetfw6 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁8 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
网安小学生(兼顾数据库版)10 小时前
Black Duck 退出中国市场后,替代方案怎么选?5 项核心能力评估
经验分享
沫璃染墨12 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AAwangzong13 小时前
AI时代RPA技术解析:如何构建兼顾流程执行与智能决策的自动化平台?
人工智能·经验分享·rpa·智能体