24 Temmuz 2018 Salı

Huawei E5573 Mobile Wifi'ın CentOS'da Çalıştırılması (Multimode USB)


Merhaba. Bu ve bundan sonraki iki yazı yakın zamanda başımdan geçen ve birbiriyle tamamen ilgisiz üç olaydan bahsedeceğim. Bunlardan ilki multimode USB hakkında olacak. Diğeri LCD'deki TTL sinyal seviyesiyle sonuncusu da bir oyunla ilgili. Bu yazıda yaşadığım olay üzerinden CentOS'ta multimode USB kullanımını anlatacağım.

Aşağıdaki cihaz Huawei E5573 taşınabilir WiFi erişim noktası. Wifi repeater olarak kullanılabildiği gibi SIM kart takarak 4G bağlantıyı Wifi'a dönüştürebiliyor. Ayrıntılı bilgi için: https://consumer.huawei.com/lk/support/mobile-broadband/e5573/
VINN tabir edilen cihazlar bilgisayara yazılım/sürücü kurulumu gerektirdiğinden, telefonumu Wifi Hotspot olarak kullanmayı tercih ediyordum. Bunun da dezavantajı, 3G şebekede arama geldiğinde bağlantının kesilmesi.

Huawei E5573 Wifi Erişim Noktası

Linux Mint altında bu cihazı bağladığımda kendisini ethernet arabirimi (ethX) gibi tanıtabiliyor. Buna USB tethering deniyor. Minimal CentOS gibi Wifi sürücüleri olmayan dağıtımlarda kolaylık sağlayabilir veya Wifi arabirimi olmayan masaüstü makinada ethernet kartı gibi davranabilir. Bu arada benim yaşadığım olayda masaüstü bir makinaya minimal CentOS kurmuştum.

Cihazın daha önce önemsemediğim bir özelliği, makinanın farklı USB portlarına taktığımda veya başka işletim sistemlerinde (Windows) harici CD sürücü gibi davramasıydı. CD'de Windows sürücüleri var ama Windows'ta zaten Wifi olarak kullanıyorum. Tethering özelliğini tesadüfen farkettim ama Windows'ta çalıştırmaya ihtiyaç duymadım. Yukarıda söz ettiğim masaüstü makina için ihtiyaç oldu ama CentOS'ta farklı ethernet kartı olarak tanıtamadım.

İlkin, CentOS'ta tethering özelliğini sağlayan sürücülerin yüklü olmadığını düşündüm (minimal). Mint'ten kontrol ettiğimde cdc_ether sürücüsünün yüklendiğini gördüm:

[239053.520493] usb 1-2: new high-speed USB device number 9 using xhci_hcd
[239053.650038] usb 1-2: New USB device found, idVendor=12d1, idProduct=1f01
[239053.650045] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[239053.650048] usb 1-2: Product: HUAWEI_MOBILE
[239053.650051] usb 1-2: Manufacturer: HUAWEI_MOBILE
[239053.650054] usb 1-2: SerialNumber: 0123456789ABCDEF
[239053.734303] usb-storage 1-2:1.0: USB Mass Storage device detected
[239053.734728] scsi host16: usb-storage 1-2:1.0
[239054.738238] scsi 16:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
[239054.739637] sr 16:0:0:0: [sr1] scsi-1 drive
[239054.741976] sr 16:0:0:0: Attached scsi CD-ROM sr1
[239054.742188] sr 16:0:0:0: Attached scsi generic sg2 type 5
[239054.811184] systemd-udevd[7829]: Failed to apply ACL on /dev/sr1: No such file or directory
[239054.811195] systemd-udevd[7829]: Failed to apply ACL on /dev/sr1: No such file or directory
[239054.825401] usb 1-2: USB disconnect, device number 9
[239055.264962] usb 1-2: new high-speed USB device number 10 using xhci_hcd
[239055.394110] usb 1-2: New USB device found, idVendor=12d1, idProduct=14db
[239055.394116] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[239055.394119] usb 1-2: Product: HUAWEI_MOBILE
[239055.394122] usb 1-2: Manufacturer: HUAWEI_MOBILE
[239055.547598] cdc_ether 1-2:1.0 eth1: register 'cdc_ether' at usb-0000:00:14.0-2, CDC Ethernet Device, XX:XX:XX:XX:XX:XX
[239055.584282] cdc_ether 1-2:1.0 eth1: kevent 12 may have been dropped
[239055.599362] cdc_ether 1-2:1.0 eth1: kevent 12 may have been dropped

[239055.601286] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[239055.721397] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
[239055.721411] cdc_ether 1-2:1.0 eth1: kevent 12 may have been dropped


CentOS'taki dmesg çıktısı şöyle:



CentOS'ta lsmod çıktısında cdc_ether sürücüsünü göremedim. Aslında görememiş olmam normal çünkü henüz USB'yi takmamıştım. Sürücü modprobe ile yüklendi ama USB'yi takınca yeni bir arabirim oluşmadı. Sürücüyü google'da aratıp karşılaştığım diğer bağlantıları kurcaladım. Sürücüyle ilgili ilk sonuç https://www.linuxquestions.org/questions/linux-networking-3/how-do-i-configure-a-cdc-ethernet-device-a-4g-usb-dongle-835856/ bağlantısıydı. Burada başlığı açan benim yaşadığıma benzer bir sorun yaşamış. Buna verilen yanıt önemli. Yanıttan öğrendiğim üzere bu tür cihazlara "USB dual mode" veya genel olarak "multimode" cihazlar deniyor. Tek USB'de birden çok aygıt sınıfı barındırabiliyor ve o yanıttaki usb modeswitch bağlantısı daha da önemli. Bu bağlantıda multimode cihazları linux altında kullanabilmek için bir uygulama var.

Uygulamayı indirdim. Masaüstü makinamda henüz internet olmadığından indirdiklerimi USB diskle aktardım. Derlemeden önce libusb1-devel paketinin bulunması gerekiyor. Ben fazladan libusb-devel'i de yüklemiştim. Bir de lsusb komutu için usbutils paketi gerekli. Bunların hepsinin rpm dosyalarını indirip onları da aynı USB diskle aktardım. Bundan sonrası make/make install.

usb_modeswitch'in parametrelerine baktığımda iki gerekli parametre var:
-v vendor ID of original mode (mandatory)
-p product ID of original mode (mandatory)

Ve iki tane de seçimlik ama önemli parametre var:
-V target mode vendor ID (optional)
-P target mode product ID (optional)

-v ve -p'ye vereceğim ID'leri lsusb ile buldum. Çıktıda görüleceği üzere CD sürücünün USB id'si 12d1:1f01:


Buna karşılık Mint'teki çıktı aşağıdaki gibi:

Bus 001 Device 010: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131.

Lazım olabilir diye Mint'ten dmesg, lsusb ve lsusb -v çıktılarını alıp CentOS'a döndüm. Artık -V ve -P'ye vereceğim ID'leri de biliyordum ama komutu aşağıdaki gibi verdim ve uyarı aldım:

usb_modeswitch -v 12d1 -p 1f01 -V 12d1 -P 14db
[SNIP]
Warning: no switching method given. See documentation.

Segmentation fault.


Tekrar usb_modeswitch çıktısına baktığımda Huawei'yle ilgili üç parametre dikkatimi çekti : -H, -J ve -X. Hakkında hiç açıklama olmadığından ve yalnızca üç tane olduğundan deneme yanılmayla benim kullanmam gerekenin -J olduğunu buldum. Bu arada -V ve -P'ye de gerek yokmuş. Target mode'u kendisi bulabiliyor.


Yazılımın biraz sorunlu olduğu çıkışta "Segmentation fault" vermesinden belli ancak sonuçta cihaz artık yeni bir ethernet kartı gibi çalışabiliyordu.