linux-kernel – vmlinux和vmlinux.o之间的区别
当我构建
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”命令行以打开详细模式. 快乐的黑客! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |