【发布时间】:2012-08-14 15:03:41
【问题描述】:
我试图让 virtualbox 内核模块内置,我几乎在这里完成,但在最后一步,它停止编译,因为内核似乎将所有 vbox* 模块视为一个单一的:
drivers/vboxnetadp/built-in.o: In function `cleanup_module':
(.exit.text+0x0): multiple definition of `cleanup_module'
drivers/vboxdrv/built-in.o:(.exit.text+0x0): first defined here
drivers/vboxnetadp/built-in.o: In function `init_module':
(.init.text+0x0): multiple definition of `init_module'
.. suppressed output ...
make[1]: *** [drivers/built-in.o] Error 1
make: *** [drivers] Error 2
有什么想法吗?我是这样得到的:
我将所有模块源复制到驱动程序文件夹中,编辑makefile,放入obj-y += vbox/,并编辑vbox模块的所有Makefile,将obj-m更改为obj-y以使其成为内置的,非常肮脏的hack,但有效。
编辑
为什么需要这样做?我需要在我的机器上禁用模块加载,所以不应该存在任何模块,我已经将我自己编写的所有模块都内置了,现在只剩下 vbox 的了
【问题讨论】:
-
你想要完成什么?将驱动程序构建到内核中只是达到目的的一种手段;你真的在做什么?
-
嗨@MichaelHampton 只想通过使其成为静态的、无模块的方式来保护内核
-
声明这些函数
static有帮助吗? -
你真正的问题是什么?您想避免在您的机器上安装编译器吗?如果您必须进行内核更新,您的解决方案有什么帮助?为什么要禁用模块机制?
标签: linux kernel compilation virtualbox