xhci-pci模块驱动修改
2026-06-28
10
0
1. 修改 xhci-pci.c
首先编辑源码文件:
cd ~/linux-5.15.0/drivers/usb/host
vim xhci-pci.c
在文件开头的 #include 区域后面,添加一个测试用的打印信息。比如在 xhci_pci_probe() 函数中添加 pr_info():
static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
int retval;
struct xhci_hcd *xhci;
/* 添加这行测试代码 - 会在 dmesg 中显示 */
pr_info("=== USBXBH: xhci-pci probe called, my custom test message ===\n");
/* 原有代码继续 ... */
...
}
或者找一个更靠前的位置,比如在文件开头的 MODULE_AUTHOR 附近添加模块加载时的打印:
/* 在文件开头,所有 #include 之后添加 */
static int __init xhci_pci_init(void)
{
pr_info("=== USBXBH: xhci-pci module loaded (custom version) ===\n");
return 0;
}
module_init(xhci_pci_init);
2. 只编译 xhci-pci.ko 模块
回到内核源码根目录,单独编译这个模块:
cd ~/linux-5.15.0
# 准备编译环境(生成必要的依赖)
make modules_prepare
# 进入 xHCI 目录单独编译
cd drivers/usb/host
# -C ~/linux-5.15.0 切换工作目录到内核源码根目录(即 ~/linux-5.15.0)
# M=$(pwd) 指定外部模块源码路径为当前目录,即drivers/usb/host
# modules 只编译模块
make -C ~/linux-5.15.0 M=$(pwd) modules
编译成功后,确认生成了新的 xhci-pci.ko:
ls -la ~/linux-5.15.0/drivers/usb/host/xhci-pci.ko
3. 备份当前系统的原模块
# 确认当前运行的内核版本
uname -r
# 备份原模块
sudo cp /lib/modules/$(uname -r)/kernel/drivers/usb/host/xhci-pci.ko \
/lib/modules/$(uname -r)/kernel/drivers/usb/host/xhci-pci.ko.bak
4. 替换为新编译的模块
# 复制新模块到系统模块目录
sudo cp ~/linux-5.15.0/drivers/usb/host/xhci-pci.ko \
/lib/modules/$(uname -r)/kernel/drivers/usb/host/
# 更新内核模块的依赖关系数据库,让系统(特别是 modprobe 命令)知道在加载某个驱动时,需要先加载哪些其他驱动作为前提
sudo depmod
5. 卸载旧模块并加载新模块
# 卸载当前的 xhci_pci 模块,-r 代表 --remove
sudo modprobe -r xhci_pci
# 加载新模块
sudo modprobe xhci_pci
# 或者直接使用 insmod 加载你编译的模块(测试用,不替换系统文件)
# sudo insmod ~/linux-5.15.0/drivers/usb/host/xhci-pci.ko
6. 查看 dmesg 中的输出
# 查看最新的内核日志
dmesg | tail -20
# 或者过滤你的自定义消息
dmesg | grep "USBXBH"
# 实时查看日志(方便调试)
dmesg -w
完整命令汇总
# ==================== 1. 修改源码 ====================
cd ~/linux-5.15.0/drivers/usb/host
vim xhci-pci.c
# 在合适位置添加 pr_info("=== USBXBH: my test message ===\n");
# ==================== 2. 编译模块 ====================
cd ~/linux-5.15.0
make modules_prepare
cd drivers/usb/host
make -C ~/linux-5.15.0 M=$(pwd) modules
# ==================== 3. 备份并替换 ====================
sudo cp /lib/modules/$(uname -r)/kernel/drivers/usb/host/xhci-pci.ko \
/lib/modules/$(uname -r)/kernel/drivers/usb/host/xhci-pci.ko.bak
sudo cp ~/linux-5.15.0/drivers/usb/host/xhci-pci.ko \
/lib/modules/$(uname -r)/kernel/drivers/usb/host/
sudo depmod
# ==================== 4. 重新加载模块 ====================
sudo modprobe -r xhci_pci
sudo modprobe xhci_pci
# ==================== 5. 查看结果 ====================
dmesg | grep "USBXBH"
注意事项
如果
modprobe -r xhci_pci失败(提示模块正在使用),可以尝试:sudo modprobe -rf xhci_pci如果加载后 USB 设备失效(键盘鼠标不能用):
- 这是正常的,因为 xHCI 驱动控制所有 USB 3.0 接口
- 重启系统即可恢复,因为系统会从
/lib/modules/加载你替换的模块 - 如果重启后还是有问题,可以进入恢复模式恢复备份:
sudo cp /lib/modules/$(uname -r)/kernel/drivers/usb/host/xhci-pci.ko.bak \ /lib/modules/$(uname -r)/kernel/drivers/usb/host/xhci-pci.ko sudo depmod
在虚拟机中操作:即使 USB 失效,你仍然可以通过虚拟机的控制台(VNC/SPICE)或 SSH 继续操作,所以比较安全。
ARM&Linux环境搭建





