加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:01:02 所属栏目:Linux 来源:网络整理
导读:当我构建 Linux内核时,会生成两个映像vmlinux和vmlinux.o.它们的大小似乎也各不相同(分别为113KB和198KB).有人可以提供有关差异的见解吗? 谢谢, VJ 解决方法 Linux构建期间生成的图像因架构和目标而异.除了问题中提到的那两个之外,还有许多中间构建目标.除
当我构建 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”命令行以打开详细模式.

快乐的黑客!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读