使内置的虚拟机内核模块,而不是模块,完成一半

dai*_*isy 5 linux kernel virtualbox compilation

我正在尝试内置虚拟机内核模块,我几乎已经在这里完成了,但是在最后一步,它停止了编译,因为内核似乎将所有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
Run Code Online (Sandbox Code Playgroud)

有什么想法吗 ?这是我如何得到的:

我将所有模块源复制到驱动程序文件夹,编辑makefile,obj-y += vbox/编辑和编辑vbox模块的所有Makefile,将obj-m更改为obj-y以使它们内置,非常脏的黑客,但工作.

编辑

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

Nil*_*ils 0

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

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

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