1. 一个模块在一个内核中编译后,是没办法在另外一个不同的内核中使用,除非内核中开启了CONFIG_MODVERSIONS这个配置

  2. UEFI中开启SecureBoot这是一个安全标准,可以确保设备仅使用原始设备制造商信任的软件启动,一些linux发行版中默认开启了SecureBoot,对于这样的版本内核模块必须要用security key来签名

  3. 模块参数

    module_param
    MODULE_PARM_DESC
    
  4. MODULE_FORCE_UNLOAD

    forced module unloading,通过rmmod -f xxx.ko,强制卸载模块

  5. vermagic

    version magic strings are stored in the module object in the form of a static string, starting with vermagic:. Version data are inserted in your module when it is linked against the kernel/module.o file

    内核通过vermagic来识别ko的版本,通常来说linux内核会拒绝不同版本的内核模块

    root@tianqian:~/code/linux-modules# modinfo hello-1.ko 
    filename:       /root/code/linux-modules/hello-1.ko
    license:        GPL
    srcversion:     BD5B750371AAA3261064E51
    depends:        
    retpoline:      Y
    name:           hello_1
    vermagic:       5.15.0-40-generic SMP mod_unload modversions