出于各种原因,我构建了一个具有可加载模块支持的内核,其中之一是可以编译模块并在不重新启动的情况下加载它们。当我需要一个未在内核配置中启用的模块时,这应该很有用。
现在,使用像 nouveau 这样的驱动程序,只需转到源目录并运行make M=drivers/gpu/drm/nouveau
.如何iptables
在不编译整个内核并重新启动的情况下构建更新的模块?有可能吗?
答案1
只需转到您的内核源目录,进行所需的更改,然后make
, 然后make modules_install
。
仅此而已。
如果您只想构建一个特定模块,请使用:
make M=path/to/module/directory
例如(来自内核顶级目录):
make M=fs/ext4
make M=fs/ext4 modules_install
要激活更改的模块,您必须卸载然后重新插入它们。如果先前未加载该模块,则无需执行任何特殊操作。
请注意,您无法以这种方式将某些内容从内置更改为模块(需要重新启动),并且某些模块可能具有需要更改内置配置的依赖项 - 您也需要为此重新启动。
答案2
马特的回答总结了这一点,但我还想补充一件事。
最好确保您使用与构建内核映像相同的 GCC 版本来编译外部模块。您可以通过读取“/proc/version”文件来确定这一点。
许多树外和专有驱动程序模块将拒绝使用不匹配的编译器版本进行构建。