运维开发网

linux-kernel – vmlinux和vmlinux.o之间的区别

运维开发网 https://www.qedev.com 2020-05-19 14:31 出处:网络
当我构建 Linux内核时,会生成两个映像vmlinux和vmlinux.o.它们的大小似乎也各不相同(分别为113KB和198KB).有人可以提供有关差异的见解吗?
当我构建 Linux内核时,会生成两个映像vmLinux和vmLinux.o.它们的大小似乎也各不相同(分别为113KB和198KB).有人可以提供有关差异的见解吗?

谢谢,

VJ

Linux构建期间生成的图像因架构和目标而异.除了问题中提到的那两个之外,还有许多中间构建目标.除了可能用于学术目的之外,大多数都是无趣的.不幸的是,有一个名为vmLinux的目标. vmLinux.o不是很有趣.在顶级Linux树中,您将找到一个名为vmLinux的ELF文件.执行

$file vmLinux

应该确认这是ELF文件.我不知道任何直接启动此文件的系统.该文件唯一有趣的是调试,因为它包含调试器可以读取的调试符号.实际的引导目标将在子目录中找到,具体取决于体系结构.对于x86,(认为这不是我的专业知识)我认为你会找到一个名为bzImage的目标.对于ARM体系结构,某些系统启动zImage,其他系统启动uImage(这是一个打包在U-Boot引导程序识别的标头中的Linux内核映像.即使删除了U-Boot标头,图像也是合成图像.这是它不是一个ELF文件,它不是纯粹的.o等.它是几个二进制blob的串联,它可以包括内核配置信息,内核本身,几乎总是被压缩,并且通常是一段可运行的代码(即我称之为“bootstrap”加载器,它通常包含机器和电路板特定的初始化例程.我对x86不太熟悉,但即使在该架构上,内核启动映像(你引导的映像)也是如此.包含多个组件的合成图像,即不是纯.o或ELF文件.

查看正在发生的事情的一个好方法是使用详细模式编译内核,然后观察最后的步骤以查看图像的操作方式.将“V = 1”添加到“make”命令行以打开详细模式.

快乐的黑客!

0

精彩评论

暂无评论...
验证码 换一张
取 消