ARM&Linux环境搭建
+ -

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"

注意事项

  1. 如果 modprobe -r xhci_pci 失败(提示模块正在使用),可以尝试:

    sudo modprobe -rf xhci_pci
    
  2. 如果加载后 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
      
  3. 在虚拟机中操作:即使 USB 失效,你仍然可以通过虚拟机的控制台(VNC/SPICE)或 SSH 继续操作,所以比较安全。

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!