一、硬件
1、查看硬件状态
-
命令:/usr/sbin/hwinfo
-
名称
hwinfo - 探测系统中的硬件 -
用法
hwinfo [选项] -
描述
hwinfo 用于探测系统中存在的硬件。它可以用来生成系统概览日志,以便后续用于支持。 -
选项
注意,不带任何选项运行 hwinfo 大致相当于 ‘hwinfo --all --log=-’。-
- -<硬件项目>
此选项可以多次给出。用于探测特定的硬件项目。可用的硬件项目包括:all(全部), arch(架构), bios(基本输入输出系统), block(块设备), bluetooth(蓝牙), braille(盲文), bridge(桥接设备), camera(摄像头), cdrom(光盘驱动器), chipcard(智能卡), cpu(中央处理器), disk(磁盘), dsl(数字用户线路), dvb(数字视频广播), fingerprint(指纹识别), floppy(软盘驱动器), framebuffer(帧缓冲设备), gfxcard(图形卡), hub(集线器), ide(集成设备电路), isapnp(即插即用即插即用), isdn(综合业务数字网), joystick(游戏杆), keyboard(键盘), memory(内存), mmc-ctrl(多媒体卡控制器), modem(调制解调器), monitor(显示器), mouse(鼠标), netcard(网卡), network(网络), partition(分区),pci(外设组件互连), pcmcia(个人计算机存储卡国际协会), pcmcia-ctrl(pcmcia控制器), pppoe(点对点协议以太网), printer(打印机), redasd(冗余阵列独立磁盘), reallyall(真正全部), scanner(扫描仪), scsi(小型计算机系统接口), smp(对称多处理), sound(声音设备), storage-ctrl(存储控制器), sys(系统), tape(磁带驱动器), tv(电视设备), uml(用户模式Linux), usb(通用串行总线), usb-ctrl(usb控制器), vbe(视频生物电子学工程), wlan(无线局域网), xen(Xen虚拟化技术), zip(Zip驱动器) 注意,如果缺少此选项,则不会执行任何硬件探测!
-
- -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 --disk -
仅显示概览
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
-
二、驱动
1、管理驱动
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,可以确保内核模块的正确加载和卸载,从而提高系统的稳定性和性能。
-