PCI设备驱动加载后如何重新枚举设备
在加载PCI设备驱动后,有时需要重新枚举设备以确保系统正确识别和配置新加载的设备。以下是在Linux系统中重新枚举PCI设备的常用方法:
方法一:通过写入/sys
文件系统进行重新扫描
-
触发PCI总线重新扫描
通过向
/sys/bus/pci/rescan
文件写入1
,可以告诉内核重新扫描PCI总线以检测新的设备或更改。echo 1 | sudo tee /sys/bus/pci/rescan
-
验证设备是否被识别
重新扫描后,可以使用
lspci
命令查看PCI设备列表,确认新设备是否已被识别。lspci -vv
方法二:解绑并重新绑定设备驱动
有时候,重新绑定设备驱动可以强制设备重新初始化。
-
查找设备的总线ID
使用
lspci
查找目标设备的总线ID。例如,假设设备的总线ID是0000:03:00.0
。lspci -nn | grep <设备名称或ID>
-
解绑驱动
将设备从当前驱动中解绑。
echo -n "0000:03:00.0" | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind
-
绑定驱动
重新绑定设备到相应的驱动。
echo -n "0000:03:00.0" | sudo tee /sys/bus/pci/drivers/<驱动名称>/bind
替换
<驱动名称>
为实际的驱动模块名称,例如e1000e
。
方法三:使用rescan-scsi-bus.sh
脚本(适用于SCSI设备)
如果涉及到基于PCI的SCSI设备,可以使用rescan-scsi-bus.sh
脚本来重新扫描SCSI总线。
-
安装
sg3_utils
工具sudo apt-get install sg3-utils
-
运行扫描脚本
sudo rescan-scsi-bus.sh
注意事项
- 权限要求:上述操作通常需要超级用户权限,因此建议使用
sudo
命令。 - 热插拔支持:确保你的硬件和内核配置支持PCI热插拔,否则重新扫描可能不会生效。
- 驱动兼容性:确保加载的驱动程序与设备兼容,必要时检查驱动的日志信息(如
dmesg
)以排查问题。
示例流程
假设你刚刚加载了一个新的网络接口卡(NIC)的驱动,步骤如下:
-
加载驱动模块:
sudo modprobe e1000e
-
触发PCI总线重新扫描:
echo 1 | sudo tee /sys/bus/pci/rescan
-
检查设备是否已识别:
lspci -nn | grep Ethernet
-
若设备未正确初始化,尝试解绑并重新绑定驱动:
echo -n "0000:03:00.0" | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind echo -n "0000:03:00.0" | sudo tee /sys/bus/pci/drivers/e1000e/bind
-
再次验证设备状态:
dmesg | tail
通过以上步骤,你应该能够成功重新枚举PCI设备并确保其驱动正确加载和配置。
本文来自博客园,作者:闹闹爸爸,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/18720130
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)