本文已使用 Google Cloud Translation API 自动翻译。
某些文档最好以原文阅读。
Linux 内核模块是一段目标代码,可以在运行时加载到内核中,而无需重新编译内核。
可加载内核模块提供了一种无需重新编译内核或重新启动系统即可扩展内核功能的机制。
内核模块可用于向内核添加设备驱动程序、文件系统和其他功能。
有两种类型的内核模块:
与静态编译的内核模块相比,可加载内核模块有许多优点:
与静态编译的内核模块相比,可加载内核模块有许多缺点:
可以使用 insmod 命令将内核模块加载到内核中,并使用 rmmod 命令从内核中卸载。
insmod
命令将内核模块的名称作为参数并将其加载到内核中。 rmmod
命令将内核模块的名称作为参数并将其从内核中删除。
内核模块是一段目标代码,可以在运行时加载到内核中,而无需重新编译内核。内核模块通常用 C 编程语言编写。
内核模块必须使用“-DMODULE”编译器标志进行编译。这个标志告诉编译器代码被编译为内核模块。
内核模块也必须使用“-fPIC”编译器标志进行编译。该标志告诉编译器生成与位置无关的代码。与位置无关的代码可以加载到内存中的任何地址并执行。
可以使用 CFLAGS 环境变量将“-DMODULE”和“-fPIC”编译器标志传递给编译器。
$ export CFLAGS=-DMODULE -fPIC
一旦设置了 CFLAGS 环境变量,就可以使用 make 命令编译内核模块。
$ make
可以使用 insmod 命令将内核模块加载到内核中。 insmod
命令将内核模块的名称作为参数并将其加载到内核中。
$ insmod hello.ko
可以使用 rmmod 命令从内核中卸载内核模块。 rmmod
命令将内核模块的名称作为参数并将其从内核中删除。
$ rmmod hello
https://www.kernel.org/doc/Documentation/kmod/modules.txt
https://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.kernel/loadable_kernel_modules.htm
https://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.kernel/creating_kernel_modules.htm
https://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.kernel/loading_unloading_kernel_modules.htm