Comment faire fonctionner Ethernet sur Android sur OTG? -- networking domaine et usb-connection-mode domaine et kernel domaine et usb-on-the-go domaine et usb-drivers domain android en relation problème

How to make Ethernet work on Android over OTG?



2
vote

problème

français

J'essaie d'utiliser un modem LTE connecté à un périphérique Android 7 sur un câble OTG. Le noyau reconnaît l'appareil et les enregistre avec cdc_ether , mais je ne parviens pas à utiliser la connexion à partir du périphérique. Est-ce parce qu'il est ensuite monté comme stockage USB?

Le périphérique ne figure pas en tant que périphérique dans la barre d'interface utilisateur Android.

Si je désactive la prise en charge MTP, le périphérique ne regrette pas cdc_ether du tout.

dmesg :

[10946.408785] usb 1-1.3: new high-speed USB device number 21 using msm_hsusb_host [10946.525287] usb 1-1.3: New USB device found, idVendor=19d2, idProduct=1225 [10946.525306] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10946.525316] usb 1-1.3: Product: ZTE Mobile Broadband [10946.525325] usb 1-1.3: Manufacturer: ZTE,Incorporated [10946.525335] usb 1-1.3: SerialNumber: MF8610ZTED000000 [10946.529662] usb-storage 1-1.3:1.0: USB Mass Storage device detected [10946.532702] scsi host19: usb-storage 1-1.3:1.0 [10947.538579] scsi 19:0:0:0: CD-ROM ZTE USB SCSI CD-ROM 2.31 PQ: 0 ANSI: 2 [10952.740595] usb 1-1.3: USB disconnect, device number 21 [10953.087891] usb 1-1.3: new high-speed USB device number 22 using msm_hsusb_host [10953.232955] usb 1-1.3: New USB device found, idVendor=19d2, idProduct=1405 [10953.232969] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10953.232977] usb 1-1.3: Product: ZTE Mobile Broadband [10953.232984] usb 1-1.3: Manufacturer: ZTE,Incorporated [10953.232991] usb 1-1.3: SerialNumber: MF8610ZTED000000 [10953.260856] cdc_ether 1-1.3:1.0 usb0: register 'cdc_ether' at usb-msm_hsusb_host-1.3, CDC Ethernet Device, 36:4b:50:b7:ef:da [10953.262322] usb-storage 1-1.3:1.2: USB Mass Storage device detected [10953.262652] scsi host20: usb-storage 1-1.3:1.2 [10954.261139] scsi 20:0:0:0: CD-ROM ZTE USB SCSI CD-ROM 2.31 PQ: 0 ANSI: 2

dmesg avec MTP désactivé:

[10664.987934] usb 1-1.3: new high-speed USB device number 19 using msm_hsusb_host [10665.105272] usb 1-1.3: New USB device found, idVendor=19d2, idProduct=1225 [10665.105291] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10665.105301] usb 1-1.3: Product: ZTE Mobile Broadband [10665.105310] usb 1-1.3: Manufacturer: ZTE,Incorporated [10665.105320] usb 1-1.3: SerialNumber: MF8610ZTED000000 [10665.110339] usb-storage 1-1.3:1.0: USB Mass Storage device detected [10665.111320] scsi host17: usb-storage 1-1.3:1.0 [10666.110748] scsi 17:0:0:0: CD-ROM ZTE USB SCSI CD-ROM 2.31 PQ: 0 ANSI: 2 [10671.223090] usb 1-1.3: USB disconnect, device number 19 [10671.407859] msm_otg 78db000.usb: OTG runtime idle [10671.407887] msm_otg 78db000.usb: OTG runtime suspend

ifconfig :

TB-8504F:/ # ifconfig wlan0 Link encap:Ethernet HWaddr 40:a1:08:36:5b:0d inet addr:192.168.1.133 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 2605:a601:ab2b:9900:b19e:4f2e:5d28:5fa9/64 Scope: Global inet6 addr: fe80::42a1:8ff:fe36:5b0d/64 Scope: Link inet6 addr: 2605:a601:ab2b:9900:42a1:8ff:fe36:5b0d/64 Scope: Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:27906 errors:0 dropped:4 overruns:0 frame:0 TX packets:17795 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14342222 TX bytes:8697917 dummy0 Link encap:Ethernet HWaddr c6:b9:c8:82:8f:7e inet6 addr: fe80::c4b9:c8ff:fe82:8f7e/64 Scope: Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 TX bytes:210 p2p0 Link encap:Ethernet HWaddr 42:a1:08:36:5b:0d UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 TX bytes:0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope: Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 TX bytes:0

ip l :

255|TB-8504F:/ # ip l 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default link/ether c6:b9:c8:82:8f:7e brd ff:ff:ff:ff:ff:ff 3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default link/sit 0.0.0.0 brd 0.0.0.0 20: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 link/ether 40:a1:08:36:5b:0d brd ff:ff:ff:ff:ff:ff 21: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000 link/ether 42:a1:08:36:5b:0d brd ff:ff:ff:ff:ff:ff 31: usb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 36:4b:50:b7:ef:da brd ff:ff:ff:ff:ff:ff

Le périphérique apparaît comme cdc_ether0 avec l'adresse MAC répertoriée dans cdc_ether1 .

langue Anglaise

I am trying to use an LTE modem connected to an Android 7 device over an OTG cable. The kernel recognizes the device and registers it with cdc_ether, but I am unable to use the connection from the device. Is this because it is subsequently mounted as USB storage?

The device does not show up as a device in the Android UI / status bar.

If I disable MTP support, then the device wont register cdc_ether at all.

dmesg:

[10946.408785] usb 1-1.3: new high-speed USB device number 21 using msm_hsusb_host [10946.525287] usb 1-1.3: New USB device found, idVendor=19d2, idProduct=1225 [10946.525306] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10946.525316] usb 1-1.3: Product: ZTE Mobile Broadband [10946.525325] usb 1-1.3: Manufacturer: ZTE,Incorporated [10946.525335] usb 1-1.3: SerialNumber: MF8610ZTED000000 [10946.529662] usb-storage 1-1.3:1.0: USB Mass Storage device detected [10946.532702] scsi host19: usb-storage 1-1.3:1.0 [10947.538579] scsi 19:0:0:0: CD-ROM            ZTE      USB SCSI CD-ROM  2.31 PQ: 0 ANSI: 2 [10952.740595] usb 1-1.3: USB disconnect, device number 21 [10953.087891] usb 1-1.3: new high-speed USB device number 22 using msm_hsusb_host [10953.232955] usb 1-1.3: New USB device found, idVendor=19d2, idProduct=1405 [10953.232969] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10953.232977] usb 1-1.3: Product: ZTE Mobile Broadband [10953.232984] usb 1-1.3: Manufacturer: ZTE,Incorporated [10953.232991] usb 1-1.3: SerialNumber: MF8610ZTED000000 [10953.260856] cdc_ether 1-1.3:1.0 usb0: register 'cdc_ether' at usb-msm_hsusb_host-1.3, CDC Ethernet Device, 36:4b:50:b7:ef:da [10953.262322] usb-storage 1-1.3:1.2: USB Mass Storage device detected [10953.262652] scsi host20: usb-storage 1-1.3:1.2 [10954.261139] scsi 20:0:0:0: CD-ROM            ZTE      USB SCSI CD-ROM  2.31 PQ: 0 ANSI: 2 

dmesg with MTP disabled:

[10664.987934] usb 1-1.3: new high-speed USB device number 19 using msm_hsusb_host [10665.105272] usb 1-1.3: New USB device found, idVendor=19d2, idProduct=1225 [10665.105291] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [10665.105301] usb 1-1.3: Product: ZTE Mobile Broadband [10665.105310] usb 1-1.3: Manufacturer: ZTE,Incorporated [10665.105320] usb 1-1.3: SerialNumber: MF8610ZTED000000 [10665.110339] usb-storage 1-1.3:1.0: USB Mass Storage device detected [10665.111320] scsi host17: usb-storage 1-1.3:1.0 [10666.110748] scsi 17:0:0:0: CD-ROM            ZTE      USB SCSI CD-ROM  2.31 PQ: 0 ANSI: 2 [10671.223090] usb 1-1.3: USB disconnect, device number 19 [10671.407859] msm_otg 78db000.usb: OTG runtime idle [10671.407887] msm_otg 78db000.usb: OTG runtime suspend 

ifconfig:

TB-8504F:/ # ifconfig                                                                                                                   wlan0     Link encap:Ethernet  HWaddr 40:a1:08:36:5b:0d           inet addr:192.168.1.133  Bcast:192.168.1.255  Mask:255.255.255.0            inet6 addr: 2605:a601:ab2b:9900:b19e:4f2e:5d28:5fa9/64 Scope: Global           inet6 addr: fe80::42a1:8ff:fe36:5b0d/64 Scope: Link           inet6 addr: 2605:a601:ab2b:9900:42a1:8ff:fe36:5b0d/64 Scope: Global           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:27906 errors:0 dropped:4 overruns:0 frame:0            TX packets:17795 errors:0 dropped:0 overruns:0 carrier:0            collisions:0 txqueuelen:1000            RX bytes:14342222 TX bytes:8697917   dummy0    Link encap:Ethernet  HWaddr c6:b9:c8:82:8f:7e           inet6 addr: fe80::c4b9:c8ff:fe82:8f7e/64 Scope: Link           UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0            TX packets:3 errors:0 dropped:0 overruns:0 carrier:0            collisions:0 txqueuelen:0            RX bytes:0 TX bytes:210   p2p0      Link encap:Ethernet  HWaddr 42:a1:08:36:5b:0d           UP BROADCAST MULTICAST  MTU:1500  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0            collisions:0 txqueuelen:1000            RX bytes:0 TX bytes:0   lo        Link encap:Local Loopback             inet addr:127.0.0.1  Mask:255.0.0.0            inet6 addr: ::1/128 Scope: Host           UP LOOPBACK RUNNING  MTU:65536  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0            collisions:0 txqueuelen:0            RX bytes:0 TX bytes:0  

ip l:

255|TB-8504F:/ # ip l 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default      link/ether c6:b9:c8:82:8f:7e brd ff:ff:ff:ff:ff:ff 3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default      link/sit 0.0.0.0 brd 0.0.0.0 20: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000     link/ether 40:a1:08:36:5b:0d brd ff:ff:ff:ff:ff:ff 21: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000     link/ether 42:a1:08:36:5b:0d brd ff:ff:ff:ff:ff:ff 31: usb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000     link/ether 36:4b:50:b7:ef:da brd ff:ff:ff:ff:ff:ff 

The device does show up as usb0 with the MAC address that was listed in dmesg.

              
       
       

Liste de réponses

3
 
vote
vote
Meilleure réponse
 

Il existe une longue liste de questions liées à Ethernet, mais aucune n'a de réponse complète couvrant tous les aspects. Je prends la généralisation de votre question afin de partager mes connaissances à ce sujet.

C'est ce que vous devez faire afin de faire fonctionner Ethernet sur Android:

  • Assurez-vous que le support OTG est disponible
  • Le noyau doit être construit avec la prise en charge Ethernet (et USB Ethernet)
  • Manipulez le commutateur USB Mode et le module de noyau Chargement (le cas échéant)
  • Faites de la configuration réseau Android ou faites-le manuellement

Remarque: Tout décrit ci-dessous nécessite un dispositif enraciné ou au moins celui avec le chargeur de démarrage déverrouillé.
Vous devriez connaître l'interface Commandline.

Support OTG

Votre appareil doit pouvoir fonctionner en mode hôte USB. EthernetService est Démarré uniquement si le périphérique prend en charge la fonction USB hôte USB ( android.hardware.usb.host ) ou Ethernet ( android.hardware.ethernet ). Vous devrez peut-être également utiliser un hub USB alimenté si l'alimentation USB d'Android n'est pas suffisante pour le périphérique connecté. Question connexe:

  • est là un moyen certain de savoir si mon téléphone prend en charge USB-OTG ou non?

Configuration du noyau

Pour utiliser Ethernet sur USB (adaptateurs ou appareils similaires à modem) Le noyau doit Soyez construit avec CONFIG_USB_USBNET < / code> et d'autres configurations telles que USB_NET_CDCETHER , 99887776610 , adb install [apkfile] 1 , en fonction du type de périphérique connecté et du protocole pourparlers. Questions connexes:

  • où les modules de noyau sont installés?
  • Ajouter un conducteur au noyau sans clignoter un nouveau noyau
  • Chargez un module de noyau non signé sur la signature du noyau

Commutateur USB Mode et chargement du module de noyau

De nombreux périphériques de réseau USB sont des périphériques multimodes ou flip . Ils apparaissent sous la forme d'un périphérique de stockage de masse USB (également appelé ZEROCD mode) lorsqu'il est inséré et besoin de être basculé sur en mode Ethernet / PPP. USB_MODESWITCH est un outil Linux couramment utilisé à cette fin. Voir quelques détails ici Comment ça marche. Vous devez construire cet outil pour votre appareil ou télécharger Ce binaire pour adb install [apkfile] 2 < / code>. Obtenir la base de données de périphérique de ici .

Pour commuter automatiquement le mode chaque fois que l'appareil est connecté à Android, nous devons écouter le noyau USB uevents , soit via HELPER HOTPLUG ou un démon d'espace d'utilisateur (comme 99887776613 sur Linux et adb install [apkfile] 4 sur Android). De plus, le module du noyau peut également être chargé / déchargé automatiquement. Je suis Définition Un 99887776615 Service ici pour y parvenir, vous pouvez le faire manuellement.

Note: Il existe une application Android widget PPP (par le développeur de USB_MODESWITCH, je n'ai aucune affiliation) qui gère le mode commutation de mode automatiquement et nécessite des modules de pilote "Pas de modules de pilote de noyau, l'implémentation" pilote "est basée sur l'API d'hôte USB Android" . Vous pourriez être intéressé par cela aussi.

adb install [apkfile] 6

* En cas de hotplug, vous devez définir des stratégies SELINUX personnalisées pour laisser le noyau de modifier (voir Cette réponse < / a> pour plus de détails).

  adb install [apkfile] 7  

Configuration du réseau

Framework Android a un nom codé dur pour l'interface Ethernet ( Par défaut est adb install [apkfile] 8 , adb install [apkfile] 9 , ...). Chaque fois qu'une interface Ethernet apparaît, son nom est assorti avec la valeur codée dur. Renommer l'interface après ne fonctionne pas, car seulement Le noyau fourni nom d'interface est Suivi .

Vous devez donc faire de cette convention de dénomination compatible entre le noyau et l'AOSP en modifiant l'une des deux (si nécessaire). Le nom du noyau fourni peut être vu à l'aide de /data/app/0 (comme dans votre cas, c'est /data/app/1 ). Utilisez /data/app/2 ou de compile /data/app/3 en utilisant apktool pour voir la valeur AOSP. /data/app/4

Dès qu'une interface Ethernet apparaît, Android la configure automatiquement, /data/app/5 valide la connectivité et 99887776626 désactive les données WiFi et mobiles (si elle est activée). Autres services et composants impliqués dans la configuration incluent /data/app/7 , 99887776628 , 99887776629 , adb push0 , adb push1 , adb push2 et 99887776633 .

EtherNetService a été ajouté à Android 5. Avant que AOSP ait été corrigé pour faire du travail Ethernet (par exemple, voir Ceci et Ceci ). Stylo stock Android ne fournit aucun paramètre d'interface graphique pour Ethernet, mais certains développeurs de ROM personnalisés et OEM (par exemple, voir ). adb push4 Classe utilisée pour SET et Enregistrer Configuration IP manuelle (sur adb push5 ) est caché . La valeur par défaut est d'utiliser un Configuration codée dur (voir Utilisation de 99887776636 sous" Configurations IP: ") Ou DHCP fournie configuration .

Configuration manuelle

Vous voudrez peut-être faire une configuration manuelle de réseau. Si:

  • Android Framework ne configure pas l'interface Ethernet (sur les appareils plus anciens ou en raison d'une incohérence de nom d'interface).
  • Vous souhaitez définir une adresse IP statique ou un serveur DNS différent.
  • Vous souhaitez utiliser Ethernet avec WiFi ou des données mobiles, ou souhaitez partager Internet entre eux.

Mais dans ce cas, la pile de réseau Java d'Android reste en panne, certaines applications dépendant des API Android peuvent ne pas se comporter normalement. Pour plus de détails, voir Connexion au WiFi via ADB Shell . adb push7 adb push8

N'oubliez pas de définir des autorisations appropriées sur 99887776639 scripts de fichier et shell. Une fois la configuration, Ethernet fonctionne dès que vous connectez l'adaptateur USB.

 

There is a long list of Ethernet related questions but none has a comprehensive answer covering all aspects. I'm generalizing your question in order to share my knowledge on this.

This is what you need to do in order to make Ethernet work on Android:

  • Make sure OTG support is available
  • Kernel must be built with Ethernet (and USB Ethernet) support
  • Handle USB mode switch and kernel module loading (if applicable)
  • Make Android framework do network configuration or do it manually

Note: Everything described below requires a rooted device, or at least the one with unlocked bootloader.
You should be familiar with commandline interface.


OTG SUPPORT

Your device must be able to operate in USB host mode.EthernetService is started only if device supports feature USB host (android.hardware.usb.host) or Ethernet (android.hardware.ethernet). You may also need to use a powered USB hub if Android's USB power supply is not enough for connected device. Related question:

  • Is there a definite way to know if my phone supports USB-OTG or not?

KERNEL CONFIGURATION

In order to use Ethernet over USB (adapters or modem-like devices) kernel must be built with CONFIG_USB_USBNET and other configurations like USB_NET_CDCETHER, USB_NET_HUAWEI_CDC_NCM, USB_NET_CDC_MBIM etc. depending on the type of connected device and the protocol it talks. Related questions:

  • Where kernel modules are installed?
  • Add a driver to kernel without flashing a new kernel
  • Load an unsigned Kernel Module to signature enforcing Kernel

USB MODE SWITCH AND LOADING KERNEL MODULE

Many USB network devices are multi-mode or flip flop devices. They appear as USB Mass Storage device (also called ZeroCD mode) when inserted and need to be switched to Ethernet/PPP mode. USB_ModeSwitch is a Linux tool commonly used for this purpose. See some details here how it works. You need to build this tool for your device, or may download this binary for aarch64. Get device database from here.

In order to automatically switch mode whenever the device is connected to Android, we need to listen to kernel USB uevents, either through hotplug helper or a userspace daemon (like udev on Linux and ueventd on Android). Additionally the kernel module can also be loaded/unloaded automatically. I'm defining an init service here to achieve this, you can do it manually too.

Note: There is an Android app PPP Widget (by the developer of USB_ModeSwitch, I have no affiliation) which handles mode switching automatically and needs "no kernel driver modules, the 'driver' implementation is based on the Android USB host API". You might be interested in that too.

# /system/etc/init/custom.rc  # kernel hotplug or uevent daemon service service cust.udevd /system/sbin/busybox uevent /system/sbin/udev.sh     seclabel u:r:magisk:s0     disabled     writepid /dev/cpuset/system-background/tasks  # set kernel hotplug helper or start uevent daemon on boot on property:sys.boot_completed=1     #write /proc/sys/kernel/hotplug /system/sbin/udev.sh     start cust.udevd 

* In case of hotplug you need to define custom SELinux policies to let kernel make changes (see this answer for details).

#!/system/bin/sh  # /system/sbin/udev.sh script is executed from kernel hotplug or uevent daemon  # set PATH where you placed binaries export PATH=/system/bin  # save log exec >>/dev/udev.log 2>&1  # don't execute multiple instances exec 200<>/dev/udev.lock flock 200  VID="12d1"          # USB vendor ID of a Huawei devcie PID_UMS="1f01"      # product ID in ZeroCD mode PID_ETH="14db"      # product ID in Ethernet mode MODULE="cdc_ether"  # kernel module for USB Ethernet IFACE="usb0"        # Ethernet interface name  matches() {     [ -e "/sys/$DEVPATH/$1" ] || return 1     [ "$(cat "/sys/$DEVPATH/$1")" = "$2" ] || return 1     return 0 }  # check if a new USB device is added or removed if [ "$SUBSYSTEM" = "usb" ] then     # check if a USB device is added, then match VID and PID for mode switching     # also device must belong to UMS class: https://www.usb.org/defined-class-codes#anchor_BaseClass08h     if [ "$ACTION" = "add" ] && echo "$PRODUCT" | grep -q "$VID/$PID_UMS/" &&         matches bInterfaceClass 08 && matches bInterfaceNumber 00     then         echo "Switching USB mode..."          # USB mode switching of flip flop devices (USB modems, routers etc.)         # usb_modeswitch_dispatcher needs /system/sbin/usb_modeswitch binary and configuration files in /etc         # so you need to modify the hard-coded paths in source code as per your requirement         usb_modeswitch_dispatcher --switch-mode "$(basename "$DEVPATH")"     fi      # match VID and PID for module loading     # modprobe should be built with the hard-coded path to where you place modules e.g. /system/lib     if echo "$PRODUCT" | grep -q "$VID/$PID_ETH/"     then         if [ "$ACTION" = "add" ] && ! grep -q "^$MODULE " /proc/modules         then             echo "Loading $MODULE module..."             modprobe "$MODULE"          elif [ "$ACTION" = "remove" ] && grep -q "^$MODULE " /proc/modules         then             echo "Removing $MODULE module..."             modprobe -r "$MODULE"         fi     fi fi  # on network interface event if [ "$SUBSYSTEM" = "net" ] && [ "$INTERFACE" = "$IFACE" ] then     if [ "$ACTION" = "add" ]     then         echo "Starting cust.eth_config service..."         #start cust.eth_config    # uncomment if you want to do manual network configuration     fi      if [ "$ACTION" = "remove" ]     then         echo "Stopping cust.eth_config service..."         #stop cust.eth_config    # uncomment if you want to do manual network configuration     fi fi 

NETWORK CONFIGURATION

Android framework has a hard-coded name for Ethernet interface (default is eth0, eth1, ...). Whenever an Ethernet interface appears, its name is matched with the hard-coded value. Renaming interface afterwards doesn't work because only kernel provided interface name is tracked.

So you need to make this naming convention consistent between kernel and AOSP by modifying one of the both (if needed). Kernel provided name can be seen using ip tool (as in your case it's usb0). Use dumpsys or de-compile /system/framework/framework-res.apk using apktool to see the AOSP value.

~$ dumpsys ethernet ...   Ethernet interface name filter: eth\d ... 

As soon as an Ethernet interface appears, Android configures it automatically, NetworkMonitor validates the connectivity and ConnectivityService turns off WiFi and Mobile Data (if it's ON). Other services and components involved in configuration include UsbHostManager, EthernetTracker, EthernetNetworkFactory, IpClient.eth0, DhcpClient, DnsManager and Netd.

EthernetService was added in Android 5. Before that AOSP was patched to make Ethernet work (e.g. see this and this). Still stock Android provides no GUI settings for Ethernet, but some custom ROM developers and OEMs do (e.g. see this). EthernetManager class which is used to set and save manual IP configuration (to /data/misc/ethernet/ipconfig.txt) is hidden. Default is to use a hard-coded configuration (see using dumpsys ethernet under "IP Configurations:") or DHCP provided configuration.

MANUAL CONFIGURATION

You might want to do manual network configuration e.g. if:

  • Android framework doesn't configure the Ethernet interface (on older devices or due to interface name inconsistency).
  • You want to set static IP address or different DNS server.
  • You want to use Ethernet along with WiFi or Mobile Data, or want to share internet among any of these.

But in this case Android's Java network stack remains down, so some apps depending on Android APIs may not behave normally. For related details see Connecting to WiFi via ADB Shell.

# /system/etc/init/custom.rc  # Ethernet IP configuration service service cust.eth_config /system/sbin/eth_config.sh     seclabel u:r:magisk:s0     disabled     writepid /dev/cpuset/system-background/tasks  # clear routing and DNS on property:init.svc.cust.eth_config=stopped     exec u:r:magisk:s0 -- /system/sbin/eth_config.sh stop 
#!/system/bin/sh  # /system/sbin/eth_config.sh script is executed from eth_config init service  # set PATH where you placed binaries export PATH=/system/bin  IFACE=usb0                    # Ethernet interface name DIR=/data/local/tmp/ethernet  # temporary directory mkdir -p $DIR  # save log exec >$DIR/eth_config.log 2>&1  if [ "$1" = stop ] then     echo "Clearing configuration..."     ip ru del lookup main     ip r f table main     ndc resolver setnetdns 0 '' 0.0.0.0     exit fi  # destroy set network if any ndc network default set 0  # turn WiFi and Mobile Data off svc wifi disable svc data disable  # set interfaces up ip link set dev lo up ip link set dev $IFACE up  # Android doesn't use main table by default ip rule add lookup main  # set IP, route and DNS manually here # or add any other IP/routing configuration # or run a minimal DHCP client as follows  # create 'udhcpc' script <<-'SCRIPT' cat >$DIR/udhcpc_default.script #!/system/bin/sh  case $1 in     bound|renew)         echo "Setting IP address, gateway route and DNS for $interface..."         ip address f dev $interface         ip route f table main         ip address add $ip/$mask dev $interface         ip route add default via $router dev $interface         ndc resolver setnetdns 0 '' $dns     ;;     *)         echo "Ignoring $1"     ;; esac SCRIPT  # start DHCP client to obtain IP from server chmod 0755 $DIR/udhcpc_default.script exec busybox udhcpc -v -f -i $IFACE -s $DIR/udhcpc_default.script 

Do not forget to set proper permissions on .rc file and shell scripts. Once setup, Ethernet works as soon as you connect USB adapter.

 
 
 
 

Questions connexes

-1  Comment connecter un Motorola Xoom 2 ME (MZ607) sur le mode Fastboot vers un PC?  ( How to connect a motorola xoom 2 me mz607 on fastboot mode to a pc ) 
J'essaie de connecter un Motorola Xoom 2 moi (MZ607) sur le mode Fastboot à mon ordinateur portable exécutant Windows 10 selon décrit ici: https://goo.gl/l...

1  Pilotes USB OEM Lenovo [fermé]  ( Oem usb drivers lenovo ) 
fermé. Cette question est off-sujet . Il n'accepte pas actuellement les réponses. Voulez...

-2  Les fabricants écrivent-ils les pilotes pour leurs nouveaux appareils annexés Android?  ( Do manufacturers write the drivers for their new android runned devices ) 
Vous remarquez que Samsung Galaxy S4 est différent des métropcs Z500. Le fabricant met-il à jour les pilotes en fonction du matériel que son système d'explo...

5  Comment puis-je obtenir adb de reconnaître correctement un appareil Alcatel One Touch 995 sur Windows / Ubuntu?  ( How can i get adb to properly recognize an alcatel one touch 995 device on windo ) 
Le problème J'essaie de déployer une application personnalisée à une touche Alcatel One Touch 995 exécutant Android 2.3.6. J'utilise Eclipse pour compiler l...

3  AOSON M19 - Besoin de pilotes de périphérique  ( Aoson m19 need device drivers ) 
Moi-même et quelques autres ont un comprimé d'android supplémentaire Aoson M19 à la main, mais il n'est pas possible de trouver des pilotes de périphérique US...

0  En utilisant un dongle wifi pour surveiller le réseau  ( Using a wifi dongle to monitor network ) 
J'ai une boîte intelligente Android avec une connexion WiFi intégrée et je veux ajouter une dongle à la boîte afin que je puisse surveiller le réseau. J'ai tr...

2  Comment faire fonctionner Ethernet sur Android sur OTG?  ( How to make ethernet work on android over otg ) 
J'essaie d'utiliser un modem LTE connecté à un périphérique Android 7 sur un câble OTG. Le noyau reconnaît l'appareil et les enregistre avec cdc_ether , mais...

1  Sony Xperia u avec mon ordinateur portable Windows XP  ( Sony xperia u with my windows xp laptop ) 
J'ai Windows XP et chaque fois que je connecte mon Xperia u, l'ordinateur le pense. Je pense que c'est un problème de pilote alors j'ai trouvé les pilotes sur...

1  Comment connecter Superpad II P041 au PC  ( How to connect superpad ii p041 to pc ) 
J'ai un superpad II p041 et je voudrais le connecter à mon PC. J'aimerais utiliser logcat pour vérifier l'exception projetée par mon application. Le problèm...

1  LG Nexus 5 n'est pas détecté malgré l'avoir installé des pilotes mobiles LG Universal  ( Lg nexus 5 is not detected despite having installed lg universal mobile drivers ) 
J'utilise Windows 8 et ADB semble ne pas être capable de trouver mon LG Nexus 5 (D821) malgré l'installation des pilotes mobiles LG universels installés (LGUN...




© 2022 www.demandez.top All Rights Reserved. Questions et réponses Accueil Tous les droits sont réservés