的Linux内核已经成长为一个庞大的软件。在某些方面,这是一件好事。在其他情况下,它使它有些不灵活。解决方案是将内核的各个部分分解成模块。根据计算机的配置和您的需要,可以加载或不加载这些模块。modprobe命令在Linux系统上加载新的内核模块,允许您在不重新启动的情况下启用新特性和支持。
使用Modprobe
Modprobe通常使用起来很简单。知道了要加载的内核模块后,将它传递给modprobe命令。
Sudo modprobe rtl8723de
这就是它的全部。该模块一直加载到重新启动系统为止。
如果希望在不重新引导的情况下删除模块,请使用- r国旗。
Sudo modprobe -r rtl8723de
在大多数情况下,这就是modprobe的工作方式。要了解更多信息,请查看下面的技术文档。
Modprobe技术文档
modprobe命令执行可加载模块的高级处理。
剧情简介
modprobe[-adnqv] [- c配置模块[符号=值…]modprobe[-adnqv] [- c配置] [- t类型)模式modprobe- l - c (配置] [- t类型)模式modprobe(- c - c配置]modprobe-r [-dnv] [-C .配置[模块…]modprobevh
选项
——一个,——所有
加载所有匹配的模块,而不是在第一次成功加载后停止。
- c,——showconfig
显示当前使用的配置。
- c,——配置配置
使用文件配置而不是(可选的)/指定配置。环境变量MODULECONF也可以用来选择(和覆盖)不同的配置文件从默认/(或/etc/conf.modules已弃用)。
当环境变时UNAME_MACHINE时,modutils使用其值而不是uname()系统调用中的机器字段。这主要用于在32位用户空间中编译64位模块时,反之亦然UNAME_MACHINE到模块的类型。目前的模块不支持完全的模块交叉构建模式,只能在两者之间进行选择32位和64位主机架构的版本。
- d,——调试
显示关于模块堆栈的内部表示的信息。
- h,——帮助
显示选项摘要并立即退出。
- k,——autoclean
在加载的模块上设置自动清理。内核在调用modprobe以满足缺少的特性时使用(作为模块提供)。的q选择权隐含于- k。这些选项会自动发送到insmod。
- n,——显示
不要执行动作,只显示要做什么。
q,——安静
不要抱怨insmod安装模块失败。继续使用modprobe要测试的其他可能性,但是保持沉默。该选项会自动发送到insmod。
- r,——删除
删除模块(堆栈)或执行自动清理,这取决于命令行中是否提到了任何模块。
- s,——syslog
通过syslog而不是stderr报告。该选项会自动发送到insmod。
- tmoduletype;——类型moduletype
只考虑这种类型的模块。Modprobe只查看其目录路径包含的模块/ moduletype /。moduletype可以包含多个目录名,例如,- t司机/净列出的模块xxx /司机/ net/及其子目录。
- v,——详细
打印所有执行的命令。
- v,版本
显示modprobe的版本号。
模块名不能包含路径(不能包含路径)/),名称也不能包含尾名. o。例如,滑是有效的模块名吗modprobe,/lib/modules/2.2.19/net/slip而且slip.o是无效的。这适用于命令行和配置中的条目。
命令说明
modprobe和depmod实用程序旨在为用户、管理员和发行版维护者提供更易于管理的Linux模块化内核。
Modprobe使用一个由depmod创建的类似makefile的依赖文件,自动从预定义目录树中可用的模块集中加载相关模块。
Modprobe用于加载单个模块、一组相关模块或所有用指定标记标记的模块。
如依赖文件所述,Modprobe自动加载模块堆栈中所需的所有基本模块modules.dep。如果这些模块中的一个加载失败,则当前会话中加载的整个当前模块堆栈将自动卸载。
Modprobe有两种加载模块的方式。一种方法(探测模式)将尝试从列表(由模式).一旦一个模块加载成功,Modprobe就会停止加载。这可以用于从列表中自动加载一个以太网驱动程序。使用modprobe的另一种方法是从列表中加载所有模块。
有选项- r, modprobe自动卸载一堆模块,类似的方式rmmod - r所做的事。只使用modprobe - r清除未使用的自动加载模块,并在配置文件中执行删除前和删除后命令/。
组合选项- l而且- t列出某一类型的所有可用模块。
选项- c打印当前使用的配置(默认+配置文件)。
配置
modprobe(和depmod)的行为可以通过(可选的)配置文件修改/。有关该文件可以包含什么内容的详细描述,以及depmod和modprobe使用的默认配置,请参见modules.conf(5)。
如果一个模块被内核自动清理,则不执行pre-和post-remove命令。相反,请寻找即将出现的对持久模块存储的支持。如果你想使用安装前和安装后的特性,关闭内核的自动清理功能,而是在crontab中输入如下代码(这也用于kmod系统),每2分钟进行一次自动清理:
*/2 * * * * test -f /proc/modules && /sbin/modprobe -r
策略
其思想是,modprobe将首先查找包含为当前内核版本编译的模块的目录。如果在那里没有找到模块,modprobe将在内核版本(例如2.0、2.2)的公共目录中查找。如果仍然没有找到模块,modprobe将在包含模块的目录中查找默认版本,依此类推。
当您安装一个新的Linux时,模块应该移动到与您正在安装的内核的发行版(和版本)相关的目录。然后,从这个目录执行符号链接到默认目录。
每次编译一个新内核时,命令使modules_install创建一个新目录,但不会更改默认链接。
当您获得与内核发行版无关的模块时,请将其放在下面的版本独立目录之一中/lib/modules。
这是默认策略,可以在/。
例子
Modprobe -t net
加载存储在标记目录中的一个模块网。每个模块都要尝试,直到其中一个成功为止。
Modprobe -a -t boot
存储在有标签的目录中的所有模块引导正在加载。
modprobe滑
这将尝试加载模块slhc.o如果它之前没有加载,因为slip模块需要SLHC模块中的功能。该依赖关系在文件中进行了描述modules.dep由depmod自动创建。
Modprobe -r slip
这将卸载滑移模块。它还自动卸载slhc模块,除非它也被其他模块使用(例如,ppp)。
另请参阅:depmod(8), lsmod(8), kerneld(8), ksyms(8),rmmod(8)。
安全模式
如果有效uid不等于实际uid,那么modprobe会以极端怀疑的态度对待它的输入。最后一个参数总是被视为模块名,即使它以-。表单只能有一个模块名和选项变量=值是被禁止的。模块名始终被视为字符串,在安全模式下不执行元扩展。但是,从配置文件中读取的数据采用元扩展。
当从内核调用modprobe时,Euid可能不等于uid,对于内核2.4.0-test11和更高版本是这样。在理想情况下,modprobe可以信任内核只向modprobe传递有效参数。但是,由于高级内核代码将未经验证的参数直接从用户传递给modprobe,因此至少发生了一次本地根漏洞利用。因此modprobe不再信任内核输入。
当环境仅由这些字符串组成时,Modprobe自动设置安全模式
家= /
词= linux
路径= / sbin: / usr / sbin / bin: / usr / bin
这将检测来自内核2.2到2.4.0-test11上的内核的modprobe执行,即使uid == euid也是如此,就像它在早期内核上做的那样。
日志的命令
如果目录/var/log/ksymoops存在并且modprobe运行时带有加载或删除模块的选项,modprobe记录其命令并返回状态/var/log/ksymoops/“日期+ % Y % m % d.log”。没有禁用此自动日志记录的开关,如果您不希望发生这种情况,请不要创建/var/log/ksymoops。如果该目录存在,它应该由root拥有,模式为644或600,您应该运行脚本insmod_ksymoops_clean每天都这样。
所需的工具
depmod(8)、insmod(8)。
使用男人。命令(%的人),以了解如何在电脑上使用命令。