58、Linux设备管理全解析

Linux设备管理全解析

1. 设备识别与dmesg命令

在Linux系统中,当新的USB设备插入时,内核需要一系列步骤来识别它。通过 dmesg 命令的输出,我们可以看到内核识别新USB设备的具体步骤。例如:

[ 2525.821094] usb 1-­2: Product: UDisk           
[ 2525.821099] usb 1-­2: Manufacturer: General 
[ 2525.821104] usb 1-­2: SerialNumber: [ 2525.927096] usb-­storage 1-­2:1.0: USB 
Mass Storage device detected
[ 2525.927096] usb-storage 1-2:1.0: USB Mass Storage device detected
[ 2525.927950] scsi host3: usb-­storage 1-­2:1.0
[ 2525.928033] usbcore: registered new interface driver usb-­storage
[ 2525.940376] usbcore: registered new interface driver uas
[ 2526.961754] scsi 3:0:0:0: Direct-­Access     General  UDisk           
 5.00 PQ: 0 ANSI: 2
[ 2526.966646] sd 3:0:0:0: Attached scsi generic sg2 type 0
[ 2526.992707] sd 3:0:0:0: [sdb] 31336448 512-­byte logical blocks: (16.0
 GB/14.9 GiB)
[ 2527.009197] sd 3:0:0:0: [sdb] Write Protect is off
[ 2527.009200] sd 3:0:0:0: [sdb] Mode Sense: 0b 00 00 08
[ 2527.026764] sd 3:0:0:0: [sdb] No Caching mode page found
[ 2527.026770] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[ 2527.127613]  sdb: sdb1
[ 2527.229943] sd 3:0:0:0: [sdb] Attached SCSI removable disk

由于内核负责检测设备并安装正确的模块,所以当设备出现问题时, dmesg 命令是一个很好的故障排除工具。它可以帮助我们确定硬件设备模块是否正确加载。

2. 处理PCI设备

2.1 lspci命令概述

lspci 命令允许我们查看Linux系统上当前安装和识别的PCI和PCIe设备。该命令有很多命令行选项,可用于显示系统上安装的PCI和PCIe卡的相关信息。常见选项如下表所示:
| Option | Description |
| ---- | ---- |
| -­A | 定义访问PCI信息的方法 |
| -­b | 从卡的角度显示连接信息 |
| -­k | 显示每个安装的PCI卡的内核驱动模块 |
| -­m | 以机器可读格式显示信息 |

2.2 lspci命令示例

不使用任何选项时, lspci 命令的输出会显示所有连接到系统的设备,示例如下:

$ lspci
00:00.0 Host bridge: Intel Corporation 440FX -­ 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox
 Graphics Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet
 Controller (rev 02)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest 
Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio
 Controller (rev 01)
00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-­E) SATA 
Controller [AHCI mode] (rev 02)
$

我们可以使用 lspci 命令的输出结果来排查PCI卡的问题,例如判断Linux系统是否识别该卡。

3. 处理USB设备

3.1 lsusb命令概述

通过 lsusb 命令,我们可以查看连接到Linux系统的USB设备的基本信息。该命令有以下可用选项:
| Option | Description |
| ---- | ---- |
| -­n | 以数字形式显示供应商和设备信息,而不是文本 |
| -­q | 查询集中式PCI数据库以获取已安装PCI卡的信息 |
| -­t | 显示显示卡和总线之间连接的树形图 |
| -­v | 显示卡的额外信息(详细模式) |
| -­x | 显示卡信息的十六进制输出转储 |
| -­d | 仅显示指定供应商ID的设备 |
| -­D | 仅显示指定设备文件的设备信息 |
| -­s | 仅显示使用指定总线的设备信息 |
| -­t | 以树形格式显示信息,显示相关设备 |
| -­v | 显示设备的额外信息(详细模式) |
| -­V | 显示lsusb程序的版本 |

3.2 lsusb命令示例

lsusb 命令的基本输出示例如下:

$ lsusb
Bus 001 Device 003: ID abcd:1234 Unknown 
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
$

大多数系统都包含一个标准的USB集线器,用于将多个USB设备连接到USB控制器。幸运的是,市场上的USB集线器种类有限,所有Linux发行版都包含与这些USB集线器通信所需的设备驱动程序,这保证了Linux系统至少能够检测到USB设备的连接。

4. 支持显示器

4.1 X Window System简介

在Linux系统中,视频环境由视频卡和显示器这两个基本元素控制。为了显示任何类型的文本或图形,Linux系统必须知道如何与它们进行交互,这就是X Window System软件发挥作用的地方。

X Window System是由麻省理工学院(MIT)开发的,用于提供与显示器交互的标准协议。由于最后定义的版本是11,所以它通常被简称为X或X11。X11系统在Linux系统的图形桌面环境之下运行,其作用是与系统视频环境的硬件层(视频卡、显示器、键盘和鼠标)进行交互,并提供一个标准接口,供任何桌面管理软件(如KDE或GNOME)使用。

4.2 X11软件包

最初用于Linux的X11软件是XFree86包,但它以难以配置和与不同类型的视频硬件兼容而闻名。因此,出现了一些更新的X11软件包:
- X.org :这是一个用户友好的Linux X11软件包,作为XFree86的直接替代品开发,使用简单的基于文本的配置文件,配置文件存储在 /etc/X11 目录中。
- Wayland :这是一个更简单、更安全的图形软件包,由Red Hat开发并作为开源软件发布。Wayland在Linux发行版中越来越受欢迎,甚至迅速取代了X.org。它为每个用户在其主目录的 ~/.config/weston.ini 文件中存储单独的配置文件。

这两个系统都试图在每次启动时自动检测系统上安装的视频卡、显示器、键盘和鼠标,并相应地动态更改配置文件。如果对视频卡或显示器进行了更改,它们会自动检测新设备并相应地调整配置,方便更换新的视频设备。不过,如果系统使用的是特殊的显卡或显示器,最好获取相应的Linux驱动程序,并按照文档手动安装更新后的驱动程序,以获得更好的视频体验。

5. 使用打印机

5.1 CUPS简介

在Linux中,打印可能会比较复杂,因为有不同类型的打印机,安装正确的打印机驱动程序以及使用正确的打印机协议进行通信可能会很困难。幸运的是,Common Unix Printing System(CUPS)解决了许多这些问题。

CUPS为Linux系统上的任何类型的打印机提供了一个通用接口,它接受PostScript文档格式的打印作业,并使用打印队列系统将它们发送到打印机。打印队列是一个用于存储待打印文件的区域,通常配置为支持特定的打印机和特定的打印格式,如横向或纵向模式、单面或双面打印、彩色或黑白打印等。一个打印机可以分配多个打印队列,一个打印队列也可以被多个打印机接受作业。

5.2 CUPS的工作原理

CUPS软件使用Ghostscript程序将PostScript文档转换为不同打印机能够理解的格式。Ghostscript程序需要不同类型打印机的不同驱动程序,以知道如何转换文档使其能够在特定类型的打印机上打印。这通过配置文件和驱动程序来实现,幸运的是,CUPS为市场上常见的打印机安装了许多不同的驱动程序,并自动设置使用它们的配置要求,配置文件存储在 /etc/cups 目录中。

5.3 CUPS的使用方法

要在Linux系统上定义新的打印机,可以使用CUPS的Web界面。打开浏览器并导航到URL http://localhost:631 ,该界面允许我们定义新打印机、修改现有打印机以及检查发送到每个打印机的打印作业的状态。CUPS不仅可以识别直接连接的打印机,还可以使用一些标准的网络打印协议(如Internet Printing Protocol(IPP)或Microsoft Server Message Block(SMB)协议)配置网络打印机。

5.4 打印队列的命令行工具

除了CUPS的Web界面,还有一些命令行工具可用于与打印队列进行交互:
- lpc :启动、停止或暂停打印队列。
- lpq :显示打印队列的状态以及队列中等待的任何打印作业。
- lpr :向打印队列提交新的打印作业。
- lprm :从打印队列中删除特定的打印作业。

在命令行中使用这些命令时,可以使用 -­P 命令行选项指定打印机名称。示例如下:

$ lpq -­P EPSON_ET_3750_Series
EPSON_ET_3750_Series is ready
no entries
$ lpr -­P EPSON_ET_3750_Series test.txt
$ lpq -­P EPSON_ET_3750_Series
EPSON_ET_3750_Series is ready and printing
Rank    Owner   Job     File(s)                         Total Size
active  rich    1       test.txt                        1024 bytes
$ 

上述示例中,第一行使用 lpq 命令检查打印队列的状态,显示打印机已准备好接受新作业且当前队列中没有作业。 lpr 命令提交了一个新的打印作业,之后再次使用 lpq 命令显示打印机正在打印,并显示正在打印的作业。

6. 使用热插拔设备

6.1 设备分类

计算机硬件通常分为两类:
- 冷插拔设备 :这类硬件只能在系统完全断电时连接到系统,通常包括计算机机箱内常见的部件,如内存、PCI卡和硬盘。在系统运行时不能移除这些设备。
- 热插拔设备 :通常可以随时添加和移除,它们通常是外部组件,如网络连接、显示器和USB设备。热插拔设备的关键在于Linux内核需要知道设备何时连接,并自动加载正确的设备驱动模块来支持该设备。

6.2 检测动态设备

udev设备管理器是一个在系统启动时由init进程(通常在运行级别5通过 /etc/rc5.d/udev 脚本)或systemd系统自动启动的程序,它会一直在后台运行。udev监听内核关于硬件设备的通知,当新的硬件设备插入正在运行的系统或现有硬件设备被移除时,内核会发出通知事件消息。

udev程序监听这些通知消息,并将消息与一组配置文件中定义的规则进行比较,这些配置文件通常存储在 /etc/udev/rules.d 目录下。如果设备与定义的规则匹配,udev将按照规则对事件通知进行处理。每个Linux发行版都定义了一套标准的udev规则,例如将USB记忆棒插入时挂载到 /media 文件夹,或在移除USB网卡时禁用网络访问等。虽然可以修改这些规则,但通常没有必要。

6.3 处理动态设备

虽然udev程序在Linux系统后台运行,但我们可以使用 udevadm 命令行工具与它进行交互。 udevadm 命令的格式如下:

udevadm command [options]

udevadm 程序可用的命令如下表所示:
| Command | Description |
| ---- | ---- |
| control | 修改udev的内部状态 |
| info | 查询udev数据库以获取设备信息 |
| monitor | 监听内核事件并显示它们 |
| settle | 监视udev事件队列 |
| test | 模拟udev事件 |
| test-­builtin | 运行内置设备命令进行调试 |
| trigger | 向内核请求设备事件 |

例如,使用 control 命令并添加 -­R 选项,可以强制udev重新加载 /etc/udev/rules.d 目录中定义的规则。

6.4 添加USB存储设备的操作步骤

以下是向Linux系统添加USB存储设备的详细步骤:
1. 登录到Linux图形桌面并打开命令提示符窗口。
2. 在命令提示符下,输入 lsusb 命令,查看连接到系统的任何USB控制器和设备。
3. 将USB存储设备(如记忆棒)插入USB端口,等待大约一分钟,让内核检测到它。
4. 输入 dmesg 命令,观察内核检测到新USB设备时输入的内核环缓冲区条目,记录分配给新设备的设备名称(如 sdb1 )。
5. 再次输入 lsusb 命令,查看新设备是否出现在输出中。
6. 输入 lsblk 命令,查看块表中的设备和分区,并记录分区在虚拟目录中的挂载位置。
7. 输入 ls /dev/sd* 命令,查看系统上的SCSI设备,应该会看到 dmesg 输出中出现的USB设备名称作为设备文件出现在 /dev 文件夹中。
8. 使用图形桌面界面安全地弹出USB存储设备。
9. 输入 dmesg 命令,查看设备移除时的内核条目。
10. 输入 ls /dev/sd* 命令,查看设备文件是否已被移除。

7. 总结

Linux系统提供了多种方式来连接硬件设备,PCI和USB接口为设备与主板之间的通信提供了标准方式,而较新的GPIO接口则可用于与使用单线进行输入和输出控制的小型设备(如传感器、开关、继电器和电机)进行交互。

除了物理接口,Linux还使用文件与设备进行通信。当连接设备时,Linux会在 /dev 目录中自动创建一个文件,供应用程序向设备发送数据和从设备接收数据。内核使用 /proc 目录创建包含设备和系统状态信息的虚拟文件, /sys 目录也用于创建有助于故障排除设备问题的文件。

Linux提供了一些有用的命令行工具来排查设备问题,如 lsdev 命令可查看系统上所有设备的状态和设置, lsblk 命令可提供连接的块设备(如硬盘和网卡)的信息, dmesg 命令可查看内核事件消息, lspci lsusb 命令可查看连接到Linux系统的PCI和USB设备。

在显示器和打印机方面,X11协议(由XFree86和X.org软件包使用)可检测并与系统上的视频卡、显示器、键盘和鼠标进行交互,为应用程序提供标准接口;CUPS软件则为应用程序向本地和网络打印机发送文档提供了标准方法。

最后,Linux通过udev应用程序处理热插拔设备。udev监控内核事件,以获取USB端口上检测到的新硬件信息。如果检测到新设备,udev将按照规则集处理该设备,而 udevadm 应用程序则允许我们控制udev在系统上的工作方式。

通过以上介绍,我们可以更全面地了解Linux系统中设备管理的各个方面,包括设备识别、PCI和USB设备处理、显示器和打印机支持以及热插拔设备的管理,从而更好地使用和维护Linux系统。

8. 设备通信原理与文件系统

8.1 设备文件的作用

Linux系统通过在 /dev 文件夹中创建文件来与设备进行通信。应用程序使用这些设备文件向设备发送数据和从设备接收数据。设备文件主要分为两种类型:
- 字符文件 :这种文件以一次一个字符的方式发送和接收数据,适用于那些需要逐字符处理数据的设备,如串口设备。
- 块文件 :它以块为单位发送和接收数据,通常用于存储设备,如硬盘。

8.2 其他相关文件系统

除了 /dev 文件夹,内核还使用 /proc /sys 目录来辅助设备管理。
- /proc目录 :内核在这个目录中创建虚拟文件,这些文件包含了设备和系统状态的信息。例如, /proc/interrupts 文件记录了系统中各个设备的中断信息, /proc/ioports 包含了I/O端口的使用情况, /proc/dma 则显示了DMA通道的使用信息。
- /sys目录 :这个目录中的文件对于故障排除设备问题非常有用,它提供了关于设备的详细信息,包括设备的属性、驱动程序等。

9. 硬件设置查询方法

9.1 查询PCI板卡硬件设置

如果要查找插入Linux系统的PCI板卡的硬件设置,可以使用以下方法:
- lspci命令 :该命令可以显示当前连接到系统的PCI设备信息。例如:

$ lspci
00:00.0 Host bridge: Intel Corporation 440FX -­ 82441FX PMC [Natoma] (rev 02)
...
  • 结合lsdev命令 :将 lspci 命令的输出信息与 lsdev 命令结合使用, lsdev 可以显示每个设备使用的中断、I/O端口和DMA通道。
  • 查看特定文件 :还可以直接查看 /proc/interrupts /proc/ioports /proc/dma 文件来获取相关信息。

9.2 查询其他设备硬件设置

对于其他类型的设备,也可以通过相应的命令和文件来查询硬件设置。例如,对于USB设备,可以使用 lsusb 命令查看其基本信息,然后结合 dmesg 命令了解设备的识别和加载过程。

10. 热插拔设备检测原理

10.1 udev的监控机制

udev应用程序在后台运行,持续监控内核环缓冲区,以获取新设备的信息。当有新设备添加时,内核会在环缓冲区中记录相关消息,udev通过监听这些消息来检测新设备。

10.2 规则文件的作用

udev检测到新设备后,会将内核消息与 /etc/udev/rules.d 目录中的规则文件进行匹配。这些规则文件定义了udev在检测到特定设备时应执行的操作。例如,当插入USB记忆棒时,规则可能会指定将其挂载到 /media 文件夹。

10.3 流程图展示

graph TD;
    A[新设备插入] --> B[内核发送通知消息];
    B --> C[udev监听消息];
    C --> D{匹配规则文件};
    D -- 匹配成功 --> E[执行规则操作];
    D -- 匹配失败 --> F[不做处理];

11. 常见问题及解决方法

11.1 设备识别问题

  • 现象 :使用 dmesg 命令查看时,发现设备模块未正确加载,或者 lspci lsusb 命令未显示预期的设备信息。
  • 解决方法 :首先检查设备是否正确连接,然后使用 dmesg 命令详细查看内核日志,确定是否有错误信息。如果是驱动问题,可以尝试手动加载驱动模块,或者更新驱动程序。

11.2 打印问题

  • 现象 :打印作业无法正常进行,或者打印机状态显示异常。
  • 解决方法 :使用 lpq 命令查看打印队列状态,检查是否有作业阻塞。如果是打印机驱动问题,可以通过CUPS的Web界面重新配置打印机,或者更新打印机驱动程序。

11.3 热插拔设备问题

  • 现象 :热插拔设备插入后无法正常使用,或者移除设备后系统出现异常。
  • 解决方法 :检查 udev 规则文件是否正确配置,使用 udevadm 命令进行调试,如使用 monitor 命令监听内核事件,查看设备插入和移除时的详细信息。

12. 总结与展望

12.1 总结回顾

通过前面的介绍,我们深入了解了Linux系统中设备管理的各个方面。从设备的识别和检测,到PCI和USB设备的处理,再到显示器、打印机的支持以及热插拔设备的管理,每个环节都有其独特的机制和工具。我们学习了如何使用 dmesg lspci lsusb udevadm 等命令来进行设备管理和故障排除,也了解了X11和CUPS等软件在视频和打印方面的重要作用。

12.2 未来展望

随着技术的不断发展,Linux系统的设备管理也会不断改进和完善。例如,对于新兴的硬件设备,如物联网设备、人工智能加速卡等,Linux系统需要更好地支持和管理它们。未来可能会出现更智能的设备检测和驱动加载机制,以及更友好的用户界面来进行设备配置和管理。同时,安全性也将成为设备管理的一个重要方面,确保设备在连接和使用过程中的安全性。

总之,掌握Linux系统的设备管理知识对于系统管理员和开发者来说至关重要,它不仅可以提高系统的稳定性和性能,还能为新设备的应用和开发提供有力支持。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值