5

我试图使 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,放入a obj-y += vbox/,并编辑vbox模块的所有Makefile,将obj-m更改为obj-y以使其成为内置的,非常肮脏的hack,但有效。

编辑

为什么需要这样做?我需要在我的机器上禁用模块加载,所以不应该存在任何模块,我已经将自己编写的所有模块都内置了,现在只剩下 vbox 的了

4

1 回答 1

0

我想说您的问题属于 Stack Overflow,因为它基本上是一个 c 编程语言问题。

您面临的问题是您尝试将两个(以前分开的)程序编译为一个。两者似乎都使用相同的功能 - 意味着在他们自己的上下文中。

我的猜测是,您必须将所有这些多次出现的init_module函数或其他函数重命名为单独的命名空间(如net_init_moduleand drv_init_module)。或者也许有一种方法可以将这些函数声明为“本地”——我用 C 编程已经有一段时间了……

于 2012-08-08T20:03:03.943 回答