- Android'in EthernetTracker hizmeti yalnızca adı
ethX olan ağ arayüzlerini tanır
- Linux'un CDC Ethernet sürücüsü arayüz adını
usbX olarak oluşturur
- Bu nedenle standart CDC Ethernet cihazları Android'de otomatik olarak etkinleşmez
- Bunu çözmek için kullanıcının telefonu bizzat root etmesi ve
config_ethernet_iface_regex değerini değiştirmesi gerekir
- Gerçekçi yöntem, standart uyumlu bir USB Ethernet adaptörü yerine, satıcıya özgü sürücüsü olan belirli yonga setli ürünleri kullanmaktır
Giriş ve sorunun özeti
- Android cihazlarda CDC Ethernet'in çalışmamasının temel nedeni arayüz adlandırma kuralıdır
- Sistem düzeyinde USB Ethernet adaptörünü desteklese de Ethernet menüsünün etkinleşme koşullarında kısıtlar vardır
- Uyumlu yonga seti bilgisine ulaşmak zordur ve pratikte yapı kullanıcılar arasındaki "kulaktan dolma bilgiye" dayanır
- Android de Linux çekirdeği tabanlıdır, ancak her şey yalnızca çekirdek ayarlarıyla belirlenmez
USB hata ayıklama ve ADB ayarı
- Android cihazda USB hata ayıklamayı etkinleştirip ADB kurmak gerekir
- Ağ adaptörünü test etmek için ADB'yi Wi-Fi üzerinden ağ moduna geçirmek gerekir
- Komutlarla mevcut çekirdek sürümü ve mimarisi doğrulanabilir
Çekirdek sürümü ve ayarlarını kontrol etme yöntemi
- Yeni telefonlar (Android 11 ve sonrası) GKI (Generic Kernel Image) çekirdeği yapısını kullanır
- Google temel çekirdeği derler, üretici ise yalnızca modül ekler
- Desteklenen özellikler ilgili çekirdek yapılandırma dosyasından (
gki_defconfig) görülebilir
- Eski telefonlarda ise üreticinin ayrı sunduğu çekirdek kaynaklarında
defconfig dosyasını bulup kontrol etmek gerekir
- Şanslıysanız mevcut çekirdek yapılandırmasını
/proc/config.gz yolundan doğrudan da inceleyebilirsiniz
Desteklenen USB Ethernet adaptörleri nasıl kontrol edilir
- İlgili çekirdek ayarlarının çoğu
CONFIG_USB_NET_XXX biçimindedir
y ise gömülü, m ise modül olarak derlenmiştir (muhtemelen kullanılabilir), is not set ise desteklenmez
- Her ayarın açıklamasına
drivers/net/usb/Kconfig dosyasından bakılabilir
- Buna rağmen adaptörün yonga seti bilgisi çoğu zaman hâlâ açık biçimde görünmez
CDC Ethernet (Communications Device Class) ve Android'deki durum
- CDC, USB ağ iletişimi standardıdır ve EEM/ECM/NCM gibi çeşitli protokoller sunar
- Linux, Windows ve macOS'ta standart CDC Ethernet cihazları ek sürücü olmadan otomatik tanınır
- Android'de de çekirdek düzeyinde ilgili sürücüler derlenmiş durumdadır
- Örnek:
CONFIG_USB_NET_CDCETHER, EEM, NCM değerlerinin tümü y olan Samsung cihazlar
- Buna rağmen Ethernet menüsü yine de etkinleşmez
Android'in ağ arayüzü izleme mantığı
- Android, ağ arayüzlerini algılamak için
EthernetTracker.java sınıfını kullanır
EthernetTracker, yeni bir arayüz ortaya çıktığında ad desenine (düzenli ifade) eşleştirme yapar
- Eşleştirme ölçütü kaynaklardan alınan
config_ethernet_iface_regex değeridir
- Varsayılan değer
eth\\d'dir (eth ile başlayıp ardından sayı gelen ağ arayüzleri geçerlidir)
- Çekirdeğin oluşturduğu ad (
usb0) bu desene uymadığından izleme ve etkinleştirme sırasında yok sayılır
Çözüm kısıtları ve sonuç
- Bu adlandırma düzenli ifadesi kullanıcı tarafından doğrudan değiştirilemez (root olmadan mümkün değildir)
- Sonuç olarak standart CDC Ethernet ürünleri bağlı olsa bile ağ menüsünde kullanılamaz
- Buna karşılık, satıcı veya yonga seti sürücüsüyle doğrudan kaydedilen bazı adaptörler kullanılabilir
- Google, EEM modülü gibi standart destek kodlarını çekirdeğe eklese bile pratikte çalışma mümkün değildir
- Aslında düzenli ifade en azından
(eth|usb)\\d olarak değiştirilse sorun çözülecek kadar basittir, ancak şu anda olduğu gibi kalmıştır
Özet
- Temel neden: Android, CDC Ethernet standardını görmezden geldiği için değil, ağ arayüzü adı düzenli ifadeyle (
eth\\d) eşleşmediği için bunu etkinleştirmez
- Geçici çözüm: Telefonu root ettikten sonra
config_ethernet_iface_regex değerini (eth|usb)\\d gibi bir ifadeyle değiştirmek gerekir
- Pratik seçim: Standart USB CDC destekli adaptörler yerine, yonga setine göre sürücü entegrasyonu net olan ürünleri seçmek daha gerçekçi bir alternatiftir
- Yapısal sorun: Kullanıcı görünürlüğü ve standart uyumluluğu açısından, yazılımın üst katmanındaki adlandırma politikasının yetersizliği sistemsel bir sınırlama olarak ortaya çıkmaktadır
1 yorum
Hacker News görüşleri
ethXadını atamasını sağladığını duyduğunu söylüyor. Bunu kendisinin doğrudan test etmediğini ya da yazıya eklemediğini, bugünlerde de neredeyse hiç Android cihaz kullanmadığını belirtiyor. Ayrıca bu yöntemin yalnızca MAC adresini kontrol edebildiğiniz durumlarda işe yarayacağını ekliyor.eth\\dyerine*olarak değiştiğini ve sorunun bu sayede çözülmüş gibi göründüğünü belirtiyor. İlgili kod değişikliği bağlantısını veriyor ve Android U+ (muhtemelen sürüm 14) ile varsayılan olarak hemusb\\d+hem deeth%darayüzlerinin kapsandığını açıklıyor.usbXarayüzü üzerinden tethering yapan cihazlar bulunduğu" için geri alındığını, hemen ardından yalnızca Android V+ sürümlerini destekleyecek şekilde yeniden uygulandığını açıklıyor. Geri alma bağlantısını ve son uygulama bağlantısını da ekliyor.ethXadı verilen arayüzleri kabul etmesini sert biçimde eleştiriyor; Linux dağıtımlarının bu sorunu zaten 2000'li yıllarda çözdüğünü söylüyor. Eskiden sürücülerin kendi ad öneklerini kullanması nedeniyle tüm sistemi taramak zorunda kalmanın zahmetli olduğunu hatırlatıyor. Günümüzde Linux dağıtımlarınınudevgibi araçlarla ağ arayüz adlarını otomatik yeniden adlandırdığını ve bunun çekirdeğinSIOCSIFNAME ioctlçağrısı üzerinden çalıştığını anlatıyor. Modern çekirdeklerin artıkwlan*ya dawlan%dgibi adlara otomatik numara ekleme kolaylığı sunduğunu da ekliyor.config_ethernet_iface_regexdeğerini değiştirmek için telefonu root'lamak dışında bir yol yok</i>" cümlesine katılıyor ve bunun, sahip olduğu cihazlarda root yetkisinin önemli olmasının bir başka nedeni olduğunu savunuyor.ifupaşamasında başarısız olduğunu, Android arayüzünün bunu hiç göstermediğini ve sorunun ancakdmesggünlüklerinde görülebildiğini anlatıyor. Bunun CDC cihazları için de geçerli olup olmadığından emin olmadığını, ancak birçok USB Ethernet dongle'ının Realtek ve Kawasaki yongasetleri kullandığını ve firmware gerektiren örnekler gördüğünü paylaşıyor. Bu Android değişikliğinin yeni sayılabileceğini, ancak saf AOSP hata ayıklama cihazlarında USB ağ dongle'larını sorunsuz kullandığını, dolayısıyla sorunun çekirdek ya da CDC sürücüsü tarafındaki adlandırma geleneğiyle ilgili olabileceğini tahmin ediyor. Sonuç olarak dongle'ın yongasetini ve firmware gerekip gerekmediğini dikkate almak gerektiğini söylüyor.