4 votes

Y a-t-il un moyen définitif de savoir si mon téléphone prend en charge USB-OTG ou non?

J'ai un téléphone Samsung Galaxy Win, rooté et avec adbd insecure installé (en utilisant le lien ici).

Voici les informations affichées par l'application USB OTG Checker :

J'ai ajouté le fichier android.hardware.usb.host.xml dans le dossier /system/etc/permissions et l'application USB-OTG indique que mon téléphone est désormais compatible OTG (avant, elle indiquait que OTG n'était pas pris en charge uniquement en raison de l'absence du fichier xml).

Lorsque je connecte un câble OTG et une clé USB, rien ne se passe du tout. Même chose avec une souris USB. L'application USB Device Info indique qu'aucun appareil n'est connecté. Il est possible que le matériel USB OTG lui-même manque à ce téléphone, mais il est très difficile de trouver des informations sur ce modèle (il a été vraiment difficile de rooter ce téléphone en premier lieu).

Existe-t-il un moyen définitif de savoir si le téléphone prend en charge l'OTG ou non ? Existe-t-il une fonction Java que je pourrais appeler pour confirmer l'OTG, ou existe-t-il une fonction qui planterait si l'OTG n'est pas présent au niveau matériel ?

EDIT 1 :

Sortie après avoir effectué la procédure mentionnée dans le commentaire :

"Faites avec des privilèges root : cd /sdcard && find /sys | sort >1. Connectez l'USB. Ensuite : find /sys | sort >2 && diff 1 2. Cela vous permettra de savoir comment le noyau traite le matériel USB."

--- 1
+++ 2
@@ -17357,10 +17357,15 @@
 /sys/kernel/debug/binder/failed_transaction_log
 /sys/kernel/debug/binder/proc
 /sys/kernel/debug/binder/proc/19015
-/sys/kernel/debug/binder/proc/19034
 /sys/kernel/debug/binder/proc/21683
 /sys/kernel/debug/binder/proc/22063
 /sys/kernel/debug/binder/proc/22112
+/sys/kernel/debug/binder/proc/22152
+/sys/kernel/debug/binder/proc/22166
+/sys/kernel/debug/binder/proc/22185
+/sys/kernel/debug/binder/proc/22197
+/sys/kernel/debug/binder/proc/22212
+/sys/kernel/debug/binder/proc/22224
 /sys/kernel/debug/binder/proc/2788
 /sys/kernel/debug/binder/proc/2796
 /sys/kernel/debug/binder/proc/2797
@@ -17402,12 +17407,7 @@
 /sys/kernel/debug/binder/proc/5383
 /sys/kernel/debug/binder/proc/5972
 /sys/kernel/debug/binder/proc/6076
-/sys/kernel/debug/binder/proc/6343
 /sys/kernel/debug/binder/proc/6358
-/sys/kernel/debug/binder/proc/6370
-/sys/kernel/debug/binder/proc/6382
-/sys/kernel/debug/binder/proc/6397
-/sys/kernel/debug/binder/proc/6410
 /sys/kernel/debug/binder/proc/6423
 /sys/kernel/debug/binder/proc/6439
 /sys/kernel/debug/binder/proc/6479

2 votes

Vérifiez le journal du noyau via dmesg avant et après la connexion d'un périphérique USB OTG. Habituellement, vous devriez voir quelque chose dans le journal du noyau si un nouveau périphérique USB est détecté. Une autre raison potentielle pour laquelle OTG ne fonctionne pas est si le port USB ne fournit pas d'alimentation. Essayez d'utiliser un concentrateur actif alimenté entre les deux.

0 votes

@Robert dois-je exécuter cela sur le téléphone? Comment puis-je exécuter ceci? En tapant ceci dans une application de terminal, cela affiche /system/bin/sh: dmseg: introuvable

0 votes

Exécutez-le via adb et tapez-le correctement, puis il fonctionnera.

2voto

Irfan Latif Points 16863

USB OTG est une capacité matérielle. Le logiciel ne peut pas dire si le matériel a cette capacité ou non s'il n'est pas configuré pour le faire. L'application que vous montrez confirme simplement la présence du fichier host.xml que vous avez vous-même mis en place. Vous pouvez également confirmer cela à partir de adb shell:

~$ pm list features | grep usb.host
# OU
~$ dumpsys package features | grep usb.host

Pour que USB OTG fonctionne, tout d'abord votre kernel doit créer une entrée matérielle dans /sys selon le mapping de l'arborescence des périphériques lorsque vous connectez un lecteur USB.
Ensuite, un périphérique doit être peuplé dans /dev/bus/usb/... (et /dev/block/... s'il s'agit d'un périphérique de stockage). Cela dépend de la configuration de uevent sur votre ROM. Ou vous pouvez également créer manuellement un périphérique en utilisant mknod.

Ensuite, vous devez placer le fichier host.xml afin que le système d'exploitation et les applications sachent que le support USB OTG est présent sur l'appareil. Désormais, les applications peuvent accéder directement au périphérique USB (à condition que les autorisations appropriées soient définies sur le chemin du périphérique et du nœud) en utilisant les API du mode hôte .
Enfin, si votre ROM prend en charge le montage automatique des périphériques de stockage USB (disponible sur Android 6+), vous devriez avoir une entrée pour vold dans fstab. Voir Comment désactiver USB OTG sur Android 8.1?

Comme suggéré, votre Édition 1 montre que les modifications dans sysfs après la connexion d'un USB se trouvent uniquement dans debugfs, aucun matériel n'est détecté par le kernel.

Une dernière chose que vous pouvez faire est d'utiliser un hub USB alimenté comme suggéré par @Robert en commentaire. Vérifiez également le journal dmesg pour les messages du kernel et logcat pour les messages de USBManager et USBHost dans la pile Java. Si aucun matériel n'est détecté, alors votre matériel ou du moins votre kernel ne prend pas en charge l'USB.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X