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 进行转储(进行了文件类型的转换),生成了更简单的内核镜像文件。

相关推荐
panamera1219 分钟前
linux下SPI、IIC、UART、CAN的编码
linux·运维·服务器
欲盖弥彰131431 分钟前
linux设备驱动 -- RK3568 led驱动 (led子系统&设备树)
linux·led·嵌入式linux·led子系统
三万棵雪松1 小时前
【Linux 物联网网关主控系统-Linux主控部分(四)】
linux·物联网·嵌入式linux
优化控制仿真模型1 小时前
【26年最新英语六级真题】2015-2025年12月英语六级历年真题及答案PDF电子版+六级核心词汇
经验分享·pdf
returnthem1 小时前
虚拟机sda紧急处理扩容(used100%,无空间剩余,开不了机)
linux·运维·服务器
Sean‘1 小时前
Linux系统下安装Trivy
linux·运维·服务器
上海运维Q先生2 小时前
SUSE 报错修复:unable to open display ““
linux·运维
云栖梦泽2 小时前
Linux内核与驱动:5.并发与竞争
linux·c++
牢七2 小时前
CVE-2022-37202 nday 研究 sql
linux·windows·microsoft
打工人1379号2 小时前
2K3000常见问题合集
linux·运维·服务器