如何:Linux 添加或删除 Linux 内核模块/驱动程序
Linux 系统自带命令modprobe,用于从 Linux 内核添加和删除模块。请注意:
=> 在 MS-Windows 下,您使用术语设备驱动程序来表示模块。
=> 在 Linux 下,您使用术语模块来表示设备驱动程序。
教程详细信息 | |
---|---|
难度等级 | 先进的 |
Root 权限 | 是的 |
要求 | modprobe/lsmod/modinfo 实用程序 |
预计阅读时间 | 2 分钟 |
=> 在启动时,只有最小的驻留内核被加载到内存中。
=> 如果添加新硬件,则需要添加驱动程序,即模块。
=> 该modprobe命令智能地从 Linux 内核中添加或删除模块
=> 通常,所有 Linux 内核模块(驱动程序)都存储在该目录下的模块目录中/lib/modules/$(uname -r)。要查看当前模块,请输入:
$ ls /lib/modules/$(uname -r)
输出:
build modules.ccwmap modules.order initrd modules.dep modules.pcimap kernel modules.dep.bin modules.seriomap misc modules.devname modules.softdep modules.alias modules.ieee1394map modules.symbols modules.alias.bin modules.inputmap modules.symbols.bin modules.builtin modules.isapnpmap modules.usbmap modules.builtin.bin modules.ofmap updates
使用以下命令列出各种设备的所有驱动程序:
$ ls /lib/modules/$(uname -r)/kernel/drivers/
示例输出:
图 01:基于 Linux 的系统上的设备驱动程序
任务:添加一个名为 foo 的模块(驱动程序)
以 root 用户身份输入以下命令:
# modprobe foo
在此示例中,我正在加载一个名为 i8k 的模块,输入:
# modprobe -v i8k
示例输出:
insmod /lib/modules/3.5.0-30-generic/kernel/drivers/char/i8k.ko
查找有关已加载模块的信息
您需要使用该modinfo命令来查看有关 Linux 内核模块的信息。语法如下:
示例输出:
# modinfo -v {module-name-here}
# modinfo i8k
图 02:显示有关名为 i8k 的 Linux 内核模块的信息
任务:列出所有已加载的模块
使用该lsmod命令显示 Linux 内核中模块的状态:
# lsmod
示例输出:
Module Size Used by smbfs 75465 0 md5 5953 1 ipv6 284193 10 ipt_TOS 4033 2 iptable_mangle 4545 1 ip_conntrack_ftp 74801 0 ip_conntrack_irc 74033 0 ipt_REJECT 8897 43 ipt_LOG 8513 2 ipt_limit 4033 6 iptable_filter 4673 1 ipt_multiport 3521 4 ipt_state 3393 16 ip_conntrack 54297 3 ip_conntrack_ftp,ip_conntrack_irc,ipt_state ip_tables 21825 8 ipt_TOS,iptable_mangle,ipt_REJECT,ipt_LOG,ipt_limit,iptable_filter,ipt_multiport,ipt_state i2c_dev 13889 0 i2c_core 28865 1 i2c_dev dm_mirror 32721 0 dm_mod 68609 1 dm_mirror button 9313 0 battery 11465 0 ac 6985 0 ohci_hcd 24529 0 ehci_hcd 33989 0 tg3 109381 0 floppy 66065 0 ext3 137937 2 jbd 69105 1 ext3 sata_svw 10053 3 libata 78345 1 sata_svw sd_mod 19393 4 scsi_mod 141457 2 libata,sd_mod
任务:删除名为 foo 的模块
将-r选项传递给 modprobe 命令来删除模块,输入:
# modprobe -r foo
您也可以使用 rmmod 命令,这是一个从 Linux 内核中删除模块的简单程序:
# rmmod foo
推荐阅读
- 手册页 – modinfo、lsmod、insmod 和 modprobe