2017-04-10 2 views
1

Je suis très nouveau pour les pilotes de périphériques Linux et travaille actuellement sur le pilote USB actuellement. J'ai besoin de faire des pilotes liés à l'USB en tant que modules chargeables et de les retirer/réinsérer sur volonté. Mais je suis confronté à certains problèmes. Je travaille sur Dragonboard 820 basé sur le processeur Qualcomm Snapdragon 820 (APQ8096).Pilote USB se bloque lors de la réinsertion

Linux Kernel Version: 3.18.20

Android Version: 6,0

insertion des conducteurs Les premiers travaux time.Here est l'ordre d'insertion.

dbm.ko insmod insmod dbm-1_4.ko
insmod dbm-1_5.ko

dwc3.ko insmod 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 'donne la sortie suivante;

[email protected]:/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 fonctionne bien après insertion.However tout en essayant de supprimer les pilotes (dans l'ordre inverse), trois pilotes -phy_msm_qusb, phy_msm_ssusb_qmp et xhci_hcd ne sont pas supprimés et la réinsertion des autres conducteurs plantages (lors de la réinsertion de xhci_plat_hcd). Si je fais un retrait forcé de ces pilotes, il est très instable et se bloque lors de la suppression des pilotes restants ou lors de la réinsertion. Donc, si quelqu'un a quelque chose à dire à ce sujet, c'est très apprécié.

Répondre

0

xhci_hcd est permanente et ne peut pas être déchargé avec modprobe

Why is this kernel module marked at permanent on 2.6.39

peut-être est similaire avec phy_msm_ssusb_qmp et phy_msm_qusb si le PHY signifie physique et signifie firmware le plus bas niveau utilisé par les puces de contrôleur hôte USB

ces trois modules sont le niveau le plus bas qui ne peut pas être modifié. peut-être que le problème est la commande en ce que les autres modules sont réinsérés à cause des dépendances. La colonne 'Utilisé par' de la sortie lsmod de votre message indique par exemple:que ehci_hcd est utilisé par ehci_pci Toutefois, chaque module chargé est utilisé par un processus (inconnu) sur le système, ce qui est le point pourquoi vous ne pouvez pas décharger les trois modules plus (verrouillé par le processus du noyau)

Par exemple , dans l'exemple de sortie ci-dessus, iptable_filter est utilisé par un processus Linux (inconnu), tandis que le module ip_tables est utilisé par un module du noyau appelé iptable_filter. source: http://xmodulo.com/how-to-check-kernel-module-dependencies-on-linux.html

peut-être vous devez accepter que, une fois chargé, ils restent et commander le changement de la commande de ré-insertion selon les dépendances

Une autre possibilité est qu'ils sont bogués, voir le cas Why is this kernel module marked at permanent on 2.6.39

dans http://pritambankar.blogspot.de/2012/10/solution-to-problem-of-module-getting.html est une solution pour les modules permanents marqués (recompiler en utilisant -DCC_HAVE_ASM_GOTO drapeau)

+0

Merci pour la réponse Ralf. 'xhci_hcd' est affiché permanent car il manque une fonction de sortie. Si vous en ajoutez un, il n'apparaît plus permanent et vous pouvez le supprimer. À propos des deux autres, vous avez raison, ils sont utilisés par des processus inconnus. J'ai été informé que ces pilotes ne sont pas destinés à être compilés en tant que modules chargeables et ont donc abandonné cette approche. – Jay