加载/卸载驱动?

参考回答

加载驱动(模块)
– 使用 insmod 命令加载内核模块(驱动):

“`
insmod my_driver.ko
“`
其中,`my_driver.ko` 是编译后的驱动模块文件。

  • 也可以使用 modprobe 命令加载模块(推荐):
    modprobe my_driver
    

    `modprobe` 会自动处理依赖关系,而 `insmod` 需要手动加载所有依赖模块。

卸载驱动(模块)
– 使用 rmmod 命令卸载模块:

“`
rmmod my_driver
“`

  • 也可以使用 modprobe -r 进行卸载:
    modprobe -r my_driver
    

详细讲解与拓展

1. 加载内核模块

(1)使用 insmod
  • insmod(insert module)命令用于手动加载 .ko(Kernel Object)文件,它是 Linux 内核驱动的可加载模块格式。
  • 示例:
    insmod my_driver.ko
    

    但是 `insmod` **不会自动加载依赖的模块**,如果你的模块依赖于其他内核模块,需要先手动加载它们。例如:

    insmod dependency.ko
    insmod my_driver.ko
    
(2)使用 modprobe(推荐)
  • modprobe 可以自动解析模块依赖关系,因此是推荐的方式:
    modprobe my_driver
    
  • modprobe 的优点:
    • 自动加载依赖的模块(无需手动 insmod 依赖项)。
    • 只需要提供模块名,而不需要 .ko 文件的完整路径。
  • 如果你的模块不在标准路径 /lib/modules/$(uname -r)/ 下,需要先手动复制过去:
    cp my_driver.ko /lib/modules/$(uname -r)/kernel/drivers/
    depmod
    

2. 卸载内核模块

(1)使用 rmmod
  • rmmod(remove module)用于卸载已加载的内核模块:
    rmmod my_driver
    
  • rmmod 不会处理模块依赖,如果模块被其他模块使用,卸载可能会失败。
(2)使用 modprobe -r(推荐)
  • modprobe -r 会自动处理依赖,先卸载依赖于该模块的其他模块:
    modprobe -r my_driver
    

3. 查看已加载的模块

  • 使用 lsmod 命令可以查看当前加载的所有内核模块:
    lsmod | grep my_driver
    
  • 也可以使用 /proc/modules
    cat /proc/modules | grep my_driver
    

4. 查看模块信息

  • 使用 modinfo 查看内核模块的详细信息:
    modinfo my_driver.ko
    

    这会显示模块的描述、作者、依赖关系、许可证等信息。

5. 强制卸载模块

  • 如果模块无法正常卸载,可以使用 rmmod -f 强制卸载:
    rmmod -f my_driver
    

    但这可能会导致系统不稳定,应谨慎使用。

6. 在系统启动时自动加载驱动

  • 如果你希望在系统启动时自动加载模块,可以将模块名添加到 /etc/modules-load.d/custom.conf
    echo "my_driver" >> /etc/modules-load.d/custom.conf
    

总结
加载驱动insmod 手动加载 .ko 文件,但不处理依赖;modprobe 更推荐,可自动处理依赖。
卸载驱动rmmod 卸载模块,但不会考虑依赖;modprobe -r 更安全,自动处理依赖模块。
查看模块lsmod 查看已加载的模块,modinfo 查看模块信息。

发表评论

后才能评论