内核的文件类型是什么(例如 Linux 内核)?

What is the file type of a kernel (Linux kernel for example)?

总的来说,我对 Linux 内核和操作系统非常感兴趣。 我想知道的是,内核的文件类型或扩展名是什么? 它显然没有 .exe 或 .out 扩展名,因为它们用于安装在操作系统上的应用程序。

内核只是一个二进制文件吗?

奖金问题: 我知道 Linux 内核源代码分为许多 .c 文件,但我想知道在编译时,所有这些文件是否都被编译成一个二进制文件或外部链接?

(希望我的问题不要含糊)

Linux 内核(或任何其他 OS 内核)只是一个包含目标体系结构机器代码的二进制映像。它有点像一个静态 linked 的可执行文件,因为在它 运行 之前没有操作系统 link 任何依赖,所以一旦加载到主内存中,它就可以在没有任何其他帮手。这并不意味着它不能动态加载任何其他模块。在 Linux 中,当您从用户空间加载模块时很容易看到这种行为(这与加载 .so 文件的过程不同)。

该图像在存储到文件系统之前可能会被压缩,这就是为什么您可能会从 "file":

得到类似这样的输出的原因

文件/boot/vmlinuz-2.6.39-400.215.7.el6uek.x86_64

/boot/vmlinuz-2.6.39-400.215.7.el6uek.x86_64: Linux 内核 x86 启动可执行文件 bzImage, 版本 2.6.39 -400.215.7.el6uek.x86_64,RO-rootFS,swap_dev 0x3,正常 VGA

内核可能包含也可能不包含单个文件。当您在某些 USB 或驱动器上刻录 OS 图像时,它会更改该 USB 或驱动器的文件系统,这样 OS 就可以轻松搜索 .bin 文件,因此链接已完成.是的,内核可以是一个 exe 文件。我刚刚创建了一个只有一个 exe 文件的小内核。

可以制作一个独立于 OS 的 exe 文件。 check here to see a kernel of only one exe file. Also check this 了解如何链接多个二进制文件。