本文介绍了一种重新启动 PCI 设备的方法。 它演示了重述无线设备。 但是这个概念应该适用于任何设备驱动程序具有足够的热插拔支持的设备。[1]
计算机通常由多个互连的设备组成。 一些设备可以轻松地物理断开和重新连接(例如 example, 大多数 USB 设备)。 其他人可能需要与操作系统或特定软件进行特定交互。 而其他人则需要完全重启。
内置笔记本电脑无线网卡是 PCI 设备,可能会在运行时出现故障,但在不完全重启的情况下可能不容易物理断开和重新连接。 在许多情况下,这些设备可以通过 Linux 的 sysfs 接口重新启动,而无需完全重新启动计算机。
本文将具体演示如何重启卡死的Atheros无线网卡。
如何重启 PCI 设备
根据您的特定桌面环境和硬件,可以使用 GUI 或硬件开关或按钮关闭和重新打开 PCI 卡。 但是,如果这些选项都不存在或不起作用,则以下重启 PCI 卡的 CLI 方法可能会很有用。
要重新启动无线网卡,您需要它的 PCI 域、总线、设备和功能地址。 运行 lspci 命令,如下所示,并搜索其输出以查找您的无线网卡的 PCI 地址。
$ lspci <snip> 3d:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
在上面 exampleAtheros 卡的 PCI 地址是 3d:00.0. 如果显示的地址不包含域部分(即行首的数字仅包含一个冒号字符),则计算机只有一个 PCI 域,并且它是 0000.
以下命令(大写字母替换为设备的 PCI 地址)可用于在正在运行的系统上重新启动 PCI 设备。[2]
# echo "1" > /sys/bus/pci/devices/DDDD:BB:DD.F/remove # sleep 1 # echo "1" > /sys/bus/pci/rescan
在上面 example,占位符 DDDD、BB、DD 和 F 分别代表 PCI 设备域、总线、设备和功能。
替换值从 example 上面显示的 lspci 命令的输出给出了需要运行的命令来重新启动 Atheros 无线网卡 example 系统。
$ sudo /bin/sh -c "echo '1' > /sys/bus/pci/devices/0000:3d:00.0/remove" $ sleep 1 $ sudo /bin/sh -c "echo '1' > /sys/bus/pci/rescan"
如果需要,上述命令可以通过将它们放入脚本中来自动执行。
$ nano restart-wireless-card.sh #!/bin/bash echo "1" > /sys/bus/pci/devices/0000:3d:00.0/remove sleep 1 echo "1" > /sys/bus/pci/rescan
为启用可执行权限 examplechmod +x restart-wireless-card.sh 并运行 sudo ./restart-wireless-card.sh 每当您需要重新启动 PCI 设备时。
最后的笔记
并非所有 PCI 设备都可以使用此方法重新启动。 但现实生活 example 上面演示的确实可以让 WiFi 卡再次运行,而无需完全重启 PC。