如何:Linux添加或删除Linux内核模块/驱动程序

时间:2020-01-09 10:37:04  来源:igfitidea点击:

如何从正在运行的Linux内核中添加或删除硬件设备驱动程序(模块)?

Linux系统带有modprobe命令,用于从Linux内核中添加和删除模块。
请注意:

=>在MS-Windows下,将术语设备驱动程序用于模块。

=>在Linux下,您将术语模块用于设备驱动程序。

=> Linux内核具有模块化设计。

=>在引导时,只有最小的驻留内核被加载到内存中。

=>如果添加新硬件,则需要添加驱动程序,即模块。

=>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/

输出示例:基于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

输出示例:显示有关名为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