重新插入时USB驱动程序崩溃

时间:2017-04-10 09:17:21

标签: android usb linux-device-driver embedded-linux qualcomm

我是linux设备驱动程序的新手,目前正在研究USB驱动程序。我需要将USB相关驱动程序作为可加载模块,并随意删除/重新插入它们。但是我遇到了一些问题。我正在使用基于Qualcomm Snapdragon 820处理器(APQ8096)的Dragonboard 820。

  

Linux内核版本:3.18.20

     

Android版本:6.0

首次插入司机工作。这是插入的顺序 insmod dbm.ko
insmod dbm-1_4.ko
insmod dbm-1_5.ko
insmod dwc3.ko
insmod dwc3-msm.ko
insmod dwc3-pci.ko

insmod ehci-hcd.ko
insmod ehci-pci.ko

insmod xhci-hcd.ko

insmod xhci-pci.ko
insmod xhci-plat-hcd.ko

insmod phy-msm-ssusb-qmp.ko
insmod phy-msm-qusb.ko

insmod usb-storage.ko

'lsmod'给出以下输出;

root@msm8996:/system/lib/modules # lsmod Module Size Used by usb_storage 55391 0 phy_msm_qusb 18820 4 phy_msm_ssusb_qmp 17033 2 xhci_plat_hcd 6509 0 xhci_pci 4916 0 xhci_hcd 158558 2 xhci_plat_hcd,xhci_pci,[permanent] ehci_pci 4594 0 ehci_hcd 69125 1 ehci_pci dwc3_pci 2890 0 dwc3_msm 50671 0 dwc3 237561 1 dwc3_msm dbm_1_5 6526 0 dbm_1_4 6197 0 dbm 2119 3 dwc3_msm,dbm_1_5,dbm_1_4

插入后USB工作正常。但是在尝试删除驱动程序时(按相反的顺序),三个驱动程序-phy_msm_qusb,phy_msm_ssusb_qmp和xhci_hcd都没有删除,其他驱动程序重新插入崩溃(重新插入xhci_plat_hcd) 。如果我强行删除这些驱动程序,它会非常不稳定,并且在删除剩余驱动程序或重新插入时崩溃。 所以,如果有人对此有任何意见 - 这是非常感谢。

1 个答案:

答案 0 :(得分:0)

xhci_hcd 永久,无法使用modprobe

卸载

Why is this kernel module marked at permanent on 2.6.39

如果 phy 代表 physical ,则可能与phy_msm_ssusb_qmpphy_msm_qusb相似,并且意味着USB主机使用的最低级别固件控制器芯片

这三个模块是无法改变的最低级别。也许问题是由于依赖性而重新插入其他模块的顺序。 '使用' 帖子中lsmod输出的列表示ehci_hcd使用了ehci_pci 但是,每个加载的模块都由系统上的(未知)进程使用,这就是为什么你不能再卸载这三个模块(由内核进程锁定)

  

例如,在上面的示例输出中,iptable_filter由一个使用   (未知)Linux进程,而ip_tables模块由一个内核使用   模块名为iptable_filter。   来源:http://xmodulo.com/how-to-check-kernel-module-dependencies-on-linux.html

也许你必须接受,一旦加载它们就会停留并根据依赖关系命令更改重新插入的顺序

另一种可能性是它们有问题,请参阅Why is this kernel module marked at permanent on 2.6.39

中的案例 http://pritambankar.blogspot.de/2012/10/solution-to-problem-of-module-getting.html中的

是永久标记模块的解决方案(使用-DCC_HAVE_ASM_GOTO标志重新编译)