Linux可加载模块和内置模块之间的区别

可加载模块和内置(静态链接)模块有什么区别?

我find了这个问题,同时find了系统调用subsys_initcall()module_init()之间差异的答案。

Linux内核支持以两种方式插入模块(aka设备驱动程序):

  1. 内置内核模块 – 内核启动时,内核会自动将该驱动程序插入到内核中(更像是内核代码的一部分)。
  2. 可加载内核模块(LKM)内核不自动加载的驱动程序,用户可以在运行时通过insmod driver.komodprobe driver.ko插入此模块modprobe driver.ko

可加载模块相对于内置模块优点是可以在运行时加载卸载它们。 如果你正在使用一个模块,并且你需要测试它,这是很好的。 每次你测试它,你需要修改它,你可以轻松地卸载它( rmmod driver.komodprobe -r driver.ko ),然后在修改之后,可以将其重新插入。 但是对于内置模块,如果您需要对模块进行任何更改,则需要编译整个内核,然后使用内核的新映像重新引导系统。

组态:
您可以通过编辑内核源文件的根文件夹中的.config文件来将模块配置为两者之一:

 DRIVER_1=y // y indicate a builtin module DRIVER_1=m //m inicates a loadable module 

注意: lsmod只显示dynamically loaded modules而不是built-in dynamically loaded modules

请阅读: http //www.tldp.org/HOWTO/modulee-HOWTO/x73.html