- 命令:/usr/sbin/hwinfo
- 名称
hwinfo - 探测系统中的硬件 - 用法
hwinfo [选项] - 描述
hwinfo 用于探测系统中存在的硬件。它可以用来生成系统概览日志,以便后续用于支持。 - 选项
注意,不带任何选项运行 hwinfo 大致相当于 ‘hwinfo --all --log=-’。- - -<硬件项目>
此选项可以多次给出。用于探测特定的硬件项目。可用的硬件项目包括: - - -short
仅显示摘要。将此选项与硬件探测选项结合使用。 - - -listmd
通常 hwinfo 不报告 RAID 设备。添加此选项以查看它们。 - - -only DEVNAME
此选项可以多次给出。如果添加此选项,则仅显示设备列表中与 DEVNAME 匹配的条目。请注意,您还必须指定 --<硬件项目> 以触发任何设备探测。 - - -save-config SPEC
将特定设备的配置存储在 /var/lib/hardware 下。SPEC 可以是设备名称、UDI 或 ‘all’。此选项必须与硬件探测选项一起给出。 - - -show-config UDI
显示特定设备的保存配置数据。 - - -map
如果磁盘名称已更改(例如,在内核更新之后),则打印磁盘名称映射列表。请注意,您必须在此之前已经使用了 --save-config,此功能才能工作。 - - -debug N
将调试级别设置为 N。调试信息仅显示在日志文件中。如果指定了日志文件,则调试级别将隐式设置为合理值(N 是各个标志的位掩码)。 - - -verbose
增加详细程度。仅与 --map 结合使用。 - - -log FILE
将日志信息写入 FILE。不要忘记还要指定 --<硬件项目> 以触发任何设备探测。 - - -dump-db N
转储硬件数据库。N 为 0 表示转储 /var/lib/hardware 中的外部数据库,1 表示转储内部数据库。 - - -version
打印 libhd 版本。 - - -help
打印用法。
- - -<硬件项目>
- 环境
hwprobe 可以包含一个由 ‘+’ 或 ‘-’ 开头的探测标志的逗号分隔列表,以打开或关闭它们。要获取支持的标志的完整列表,请运行 ‘hwinfo -all’(注意:不是 ‘–all’)并查看输出的顶部。
hwinfo 还会查看 /proc/cmdline 以获取 hwprobe 选项。
- 示例
- 仅显示概览
hwinfo --short --block - 显示特定磁盘
hwinfo --disk --only /dev/sdb - 保存磁盘配置状态
hwinfo --disk --save-config=all - 尝试 4 个图形卡端口以获取显示器数据(默认:3)
hwprobe=bios.ddc.ports=4 hwinfo --monitor - 显示器检测运行视频 BIOS 以获取显示器数据;将完整的 BIOS 代码执行跟踪转储到日志
hwprobe=bios.ddc.ports=1,x86emu=trace:dump:trace.only=0:dump.only=0 hwinfo --monitor --log=foo
hwinfo --disk
1.1驱动类型
- 内核模块:
- 扩展Linux内核的功能
- 允许内核提供对硬件的访问
- 可以在运行时加载或卸载
- 用户空间驱动程序:
- 在用户空间中工作
为了理解Linux如何处理硬件,首先必须了解“设备”和“接口”这两个术语之间的区别。用户、管理员甚至软件开发者经常会混淆这两个术语。本文采用以下定义:
● 设备:设备是指物理硬件,如PCI网卡、AGP图形适配器或USB打印机。
● 接口:接口是与设备相关联的软件组件。要使用物理硬件,需要通过软件接口进行访问。一个设备可以有多个接口。
接口通常由驱动程序创建。在Linux中,驱动程序通常是可以加载到Linux内核中的软件模块。驱动程序可以被视为设备和其接口之间的“粘合剂”。设备驱动程序访问和使用设备。
设备驱动程序有两种基本类型:
● 内核模块:可以通过添加内核模块来扩展Linux内核的功能。它们允许内核在运行时提供对硬件的访问,并且可以在运行时加载或卸载。
● 用户空间驱动程序:有些硬件需要额外的在用户空间中工作的驱动程序。这类硬件的例子包括打印机或扫描仪。
1.2内核设备驱动
- 内核模块:
/lib/modules/<kernel-version>/*/ - 硬件驱动内核模块:
/lib/modules/<kernel-version>/kernel/drivers/
安装在/boot/目录中的内核支持广泛的硬件。除非你想测试实验性功能或驱动程序,否则通常不需要编译自定义内核。
Linux内核的驱动程序和功能既可以编译进内核中,也可以作为内核模块加载。这些模块可以在系统运行期间稍后加载,而无需重新启动计算机。
这对于系统启动时不必需的内核模块尤其如此。通过在系统启动后将其作为组件加载,可以保持内核相对较小。
内核模块作为文件存储在/lib/modules/<内核版本>/目录的子目录中。
硬件模块存储在/lib/modules/<内核版本>/kernel/drivers/目录中。
模块通常仅与它们为之构建的内核版本一起工作,因此每安装一次内核更新,都会创建一个新目录。
模块存储在具有.ko(内核对象)文件扩展名的多个子目录中。使用modprobe加载模块时,可以省略扩展名,而仅使用模块名称。
1.3设备驱动如何加载
- initrd
- systemd
- udev
- X Server
- Manually
用于自动加载内核模块的几种方法,特别是针对SUSE Linux Enterprise Server中设备驱动程序的加载方式:
● initrd:initrd是一个特殊的文件,由引导加载程序加载到内存中。从initrd中加载对访问根分区至关重要的重要设备驱动程序,例如SCSI主机控制器和文件系统驱动程序。
● systemd:某些systemd服务文件用于加载和设置硬件设备。例如,ALSA声音脚本用于加载声卡驱动程序。
● udev:用于加载内核模块。
● X服务器:虽然显卡驱动程序不是内核模块,但X服务器会加载特殊驱动程序以启用硬件3D支持。
● 手动加载:您可以使用modprobe命令从命令行或在脚本中手动加载内核模块。
1.4维护内核模块
要从命令行管理模块,您可以使用以下命令:
- lsmod:列出内核中当前已加载的模块,例如:
列表中包含模块名称、模块大小、模块使用次数以及哪些其他模块正在使用它的信息。 - insmod <模块>:将指定的模块加载到内核中。模块必须位于/lib/modules/<版本号>/目录中。
但是,我们建议您使用modprobe而不是insmod来加载模块。 - rmmod <模块>:从内核中移除指定的模块。只有当没有进程正在访问与该模块连接的硬件或相应服务时,才能移除模块。但是,我们建议您使用modprobe -r而不是rmmod来移除模块。
- modprobe <模块>:将指定的模块加载到内核中或将其移除(如果使用-r选项)。使用modprobe时,会考虑其他模块的依赖关系。modprobe还会读取/etc/modprobe.conf文件,并使用您可能已添加的任何自定义配置设置。
如果/lib/modules/version/modules.dep文件(由depmod命令创建)存在,则可以使用此命令。该文件用于确定模块的依赖关系。
modprobe的附加配置文件位于/etc/modprobe.d/目录中。modprobe会自动评估此目录中的所有文件。
自内核版本2.2.x以来,kmod软件包确保使用modprobe自动加载运行操作中所需的模块,例如在访问CD-ROM驱动器时。 - depmod:创建/lib/modules/version/modules.dep文件。该文件包含各个模块的依赖关系。当使用modprobe加载模块时,modules.dep文件确保加载它所依赖的所有模块。
在SUSE Linux Enterprise Server上,depmod还会创建modules.aliases文件,modprobe使用该文件来确定需要为哪个设备加载哪个驱动程序。 - modinfo <选项> <模块>:显示有关指定模块的信息(如许可证、作者和描述)。例如:
- modprobe的配置
modprobe的配置主要涉及对内核模块的加载、卸载以及参数设置等操作,这些操作可以通过modprobe命令及其配置文件来实现。以下是对modprobe配置的详细解释:- modprobe命令
modprobe命令用于智能地添加或移除Linux内核中的模块。它会自动处理模块的依赖关系,并根据需要加载或卸载相关模块。modprobe命令的基本语法如下:
modprobe [选项] 模块名 [模块参数…]
其中,常用的选项包括:
-r:移除指定的模块。
-l:列出所有可用的模块,或使用通配符匹配特定条件的模块。
-v:显示详细的信息,包括模块加载或卸载的过程。
-C:指定配置文件的路径,以覆盖默认的配置文件。 - 配置文件
modprobe的配置文件主要包括etc/modprobe.d/目录下的文件。这些文件用于指定模块的加载选项、别名、黑名单等。
/etc/modprobe.d/:这个目录包含了多个配置文件,modprobe在加载模块时,会依次读取这些文件,并根据其中的配置来加载模块。 - 配置指令
modprobe的配置文件中可以包含多种指令,这些指令用于指定模块的加载方式、参数等。以下是一些常用的配置指令:- alias:为模块指定别名。这可以用于简化模块名称,或解决模块名称冲突的问题。
- options:为模块指定参数。这些参数将在模块加载时传递给内核。
- install 和 remove:这两个指令用于指定加载或卸载模块时执行的自定义命令。这可以用于执行一些额外的操作,如加载额外的依赖模块、设置设备参数等。
- blacklist:将指定的模块列入黑名单,防止其被modprobe加载。这通常用于禁用与当前系统不兼容或存在问题的模块。
- 示例
以下是一些modprobe配置的示例:- 为模块指定别名:
alias my-mod really_long_modulename
这表示可以使用modprobe my-mod来加载名为really_long_modulename的模块。 - 为模块指定参数:
options module_name param1=value1 param2=value2
这表示在加载名为module_name的模块时,将param1和param2参数分别设置为value1和value2。 - 将模块列入黑名单:
blacklist nouveau
这表示将名为nouveau的模块列入黑名单,防止其被modprobe加载。
- 为模块指定别名:
- 注意事项
在修改modprobe的配置文件之前,建议备份原始文件,以防止配置错误导致系统无法启动或硬件无法正常工作。
modprobe的配置文件通常不需要手动编辑,因为大多数现代Linux发行版都使用systemd或其他服务管理器来管理内核模块的加载。但是,在某些情况下,手动编辑这些文件可能是必要的,例如禁用不兼容的模块或调整模块参数等。
总之,modprobe的配置涉及多个方面,包括命令的使用、配置文件的编辑以及配置指令的设置等。通过合理配置modprobe,可以确保内核模块的正确加载和卸载,从而提高系统的稳定性和性能。
- modprobe命令
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-qdgl/71343.html