| Debian Gnu/Linux ile USB Aygıtlar
Giriş : Belgede yazılanların uygulanıp uygulanmaması tamamen uygulayan kişinin sorumluluğundadır. Belgede bahsedilenlerin uygulanması sonucu ortaya çıkabilecek hertürlü zarardan yazar sorumlu tutulamaz. Belge GNU Özgür Belgeleme Lisansının http://www.gnu.org/copyleft/fdl.html adresinde yer alan -son sürümdeki- lisans içeriğine bağlı kalmak koşulu ile aynen yada kısmen dağıtılabilir, yayınlanabilir. Bu belgenin son sürümüne; http://www.serdaraytekin.com/docs/os/debian/debian-usb-devices.html adresinden ulaşabilirsiniz. USB 1.1 ve USB 2.0 USB 2.0 480 Mbps bant genişliği sunabilen USB (Universal Serial Bus) spesifikasyonun versiyonudur. USB 1.1 de sunulabilen bant genişliği 12 Mbps ile sınırlıdır. Dolayısıyla USB 2.0, USB 1.1'in 40 katı kadar bant genişliği ile yüksek hız sağlar. Her iki versiyonda da kablo yapısı ve portlar aynıdır. Ayrıca USB 2.0, USB 1.1 ile uyumludur. Yüksek hıza özellikle ihtiyacı olan CD/DVD yazıcı gibi cihazlar USB 2.0 standartını kullanırlar. Sonuç olarak USB 1.1 ve USB 2.0 ile üç farklı transfer hızı sağlanır. -
Yüksek Hız 480 Mbit/sec (60 MByte/sec) Makinem USB 2.0 Destekliyor mu? Bu sorunun cevabını bulmak için lspci çıktınıza göz atmanız yeterli olacaktır. USB 2.0 desteği için EHCI (Enhanced Host Controller Interface) desteğinin olması gereklidir.
Hangi Aygıt Sürücülerine İhtiyacım Var (HCD - Host Controller Driver veya HCI - Host Controller Interface) Hangi aygıt sürücülerine ihtiyacınızın olacağı kullandığınız linux çekirdeğinin versiyonuna ve hangi USB spesifikasyonunu kullanacağınıza göre çok az değişiklik gösterebilir. USB 2.0 spesifikasyonları ile çalışabilmek için EHCI sürücüsüne (ehci-hcd) bununla birlikte uhci (uhci-hcd) veya ohci (ohci-hcd) sürücülerinden birisine ihtiyacınız olacak. Uhci (Universal HCI), Intel tarafından geliştirilen aygıt kontrol arabirimidir. Dolayısıyle Intel çipsetli kontrol aygıtları UHCI kullanırlar. Ohci (Open HCI) ise Compaq ve bir çok firmanın katılımı ile ortaya konulan USB HCI spesifikasyonudur. Intel çipseti harici kontrol arabirimi kullanan üreticilerin bir kısmı OHCI 'yi tercih etmektedirler. Hangi üreticinin hangi aygıt kontrol arabirimini (HCI) tercih ettiğini http://www.qbik.ch/usb/devices/controller.php adresinden öğrenebilirsiniz. Aşağıda http://www.linux-usb.org adresinden alınmış kontrol arabirimlerini ve bunlara ait modül isimlerini gösteren tablo bulunmaktadır. Not : HCI ifadesi 2.6 çekirdek ile birlikte HCD olarak anılmaya başlanılmıştır.
Yukarıdaki tablonun bir başka ifadesi, çekirdek 2.6' da OHCI sürücüsü ohci-hcd olarak UHCI sürücüsü ise uhci-hcd olarak EHCI ise ehci-hcd olarak yer alır. Çekirdek 2.4 ve öncesinde ise OHCI sürücüsü usb-ohci olarak yer alırken bu çekirdek versiyonlarında kullanılabilen iki farklı UHCI sürücüsü vardır ki bunlar usb-uhci ve yine bunun alternatif sürücüsü olarak uhci yer alır. Yine 2.4 için EHCI sürücüsü ise 2.4.19 ile birlikte ehci-hcd olarak doğrudan yer almaya başlamıştır. Bir USB Aygıtın Çalışması İçin Hangi Modüller Gerekli? Elinizdeki herhangibir USB aygıtının düzgün şekilde çalışabilmesi için gerekli veya olmasında fayda olan modüller ve yazılımlar;
Aşağıda yukarıdaki ifadelerin resimsel anlatımı bulunmaktadır.
USB Modülleri Arasındaki İlişki ve İletişim Modeli Aşağıdaki şekilde özellikle usb klavye (usbkbd) ve usb fare (usbmouse)' nin durumuna bakalım. Görüldüğü üzere usb cihazların çekirdek ile haberleşebilmeleri için öncelikle aygıt kontrol arabirimine (HCI) ve usbcore mcdülüne ihtiyaç vardır. USB farenin aynı seviyede bulunan usb-uhci modülü ile birlikte bir yandan usbcore diğer yandan da input ve mousedev modülü ile çekirdek ile iletişim kurduğuna dikkat ediniz. Aynı şekilde usb klavyenin de bir taraftan usb-uhci modülü ile usbcore üzerinden diğer yandan da keybdev ce usbkbd modülü ilede input modülü üzerinden çekirdek ile iletişime geçtiğine dikkat ediniz. Aslında buradaki şekilde eksik olan HID (Human Interface Device) varki mouse, klavye, joystik gibi çekirdek seviyesinde bununla handle edilirler. Burada usb-uhci (yukarıdaki tabloya göre farklı bir HCI de olabilirdi) ve usbcore usb aygıt için gerekli olan modül diğerleri ise aygıtın durumuna göre farklılık gösteren ekstra modüllerdir.
* Şeklin orjinal hali http://www.linux.it/~rubini/docs/usb/usb.html adresinde yer almaktadır. USB Aygıtı Dosya Sistemi (usbfs veya usbdevfs) USB aygıtı dosya sistemi (usbdevfs veya yeni ismi ile usbfs) sistem tarafından otomatik olarak üretilen ve sisteme bit usb cihaz takıldığı zaman hotplug tarzı programlar tarafından otomatik olarak /proc/bus/usb üzerine bağlanır. Dilerseniz bu bağlama işlemini aşağıdaki komut ile ellede yapabilirsiniz. Kullanabilmek için çekirdekte bu desteğin (Preliminary USB device filesystem) olmasına dikkat ediniz.
Bu işlemin makinenizi her yeni başlattığınızda otomatik olarak yapılmasını istiyorsanız (hotplug tarzı bir araçta kullanmıyorsanız) /etc/fstab içerisine aşağıdaki kaydı girebilirsiniz.
Ayrıca zorunlu olmasada /etc/fstab içerinde yer almasında fayda olan usbdevfs satırı (çekirdekte usbdevfs desteği olmalı) usbdevfs sayesinde lsusb ile sistemimizde mevcut olan usb aygıtlarını aşağıdaki gibi listeleyebiliriz.
Ayrıca usbdevfs sayesinde /proc/bus/usb/devices ve /proc/bus/usb/drivers içerisinden önemli bilgilere ulaşabiliriz.
ile aşağıda görülen usbdevfs ve hub herdaim olmak üzere (çünkü bunlar usbcore'un bir parçasıdır) mevcut sürücülerin listesini alırsınız.
ilede yine mevcut aygıtlar hakkında detaylı bilgilere ulaşabilirsiniz.
Yukarıdaki tablo ile ilgili detaylı bilgiyi bilgisayarınızda /usr/src/linux/Documentation/usb/proc_usb_info.txt içerisinde bulabilirsiniz. Örnek olması açısından, T = Topoloji bilgilerini verir ve yine örnek olarak buradaki Spd aygıtın hızını bildirir. Yukarıdaki satırlarda Topoloji bilgilerinde Spd=12 ve Spd=480 ifadelerinin anlamı şudur;
HID (Human Interface Device) USB mouse, USB klavye gibi aygıtları kullanabilmek için iki yöntem vardır. Bunlar;
yöntemleridir. İlk yöntem biraz daha alt seviye olması sebebiyle masaüstü bilgisayarlarda "Full Featured HID" yöntemi tercih edilir. HIDBP genelde gömülü (embeded) sistemlere yöneHIDBP ve HID yöntemi aynı anda tercih edilmez. Çekirdekte Ne Nerede? Aşağıda 2.4 ve 2.6 versiyon çekirdekler için en azından USB hafıza ünitesini sistemimize düzgün olarak tanıtabilmek için gerekli modüllere koyu renkle işaret edilmeye çalışılmıştır. USB desteğinin 2.6 ile birlikte doruk noktaya ulaştığını, bilimum cihaz için çekirdek içerisinden direk desteğin gelmeye başladığını rahatlıkla görebilirsiniz. Tekrar belirteyimki aşağıdaki konfigurasyon şekilleri sadece örnek olması açısından sunulmuştur sizin kullanacağınız usb aygıt için bazı modüllerin aktif olmasına gerek olmayabileceği gibi burda koyu renkle ifade edilen modüllerin yetmeyeceği ekstra modüllerin eklenmesi gerektiği durumlarda olabilir. Kernel 2.4.X için; USB Desteği (USB support)
Scsi Desteği (SCSI support) * Bu kısımdaki modüller USB hafıza ünitelerini ilgilendirmesi sebebiyle verilmiştir.
Kernel 2.6.X için; USB Desteği (Device Drivers ---> USB support)
Scsi Desteği (Device Drivers ---> SCSI device support) * Bu kısımdaki modüller USB hafıza ünitelerini ilgilendirmesi sebebiyle verilmiştir.
Şimdi örnek olarak bir kaç çeşit USB aygıtın nasıl kullanılabileceğine değinmeye çalışalım. USB Flash Hafıza Ünitesi Kullanımı : Yukarıdaki bilgilerimizde biliyoruz ki ilk önce bize USB aygıtlar için gerekli temel bir kaç modül var. Bunların bir kısmının yine kullandığımız çekirdek versiyonuna ve USB 1.1 ve USB 2.0 spesifikasyonuna göre değişiklik gösterebileceğini biliyoruz. Şayet modüler bir çekirdek kullanıyorsak (apt-get install kernel-image-xxx benzeri bir kurulum buna örnek olacaktır) özel durumlar dışında USB aygıtların sisteme tanıtılması sürecinde büyük problemler ile karşılaşma ihtimalimiz hayli azalıyor. Maddeler halinde izlenmesi gereken yola ve nelerin gerekli olacağına bakalım;
Bu noktada yine "lsmod" ile modüllerin durumu kontrol edebiliriz. Aşağıda örnek bir lsmod çıktısının konu ile ilgili olan kısmı yer almakta.
ile söz konusu işleri yerine getirebilen hotplug yazılımını kurmamız yeterli olacaktır. Usb aygıtımız takılı iken hotplug'ı ellede tetikleyip gerekli modüllerin yüklenmesini sağlayabiliriz. Bunun için;
ile usb diskimizin bölümleme durumunu görebiliriz
ile artık kullanıma hazır. USB Klavye, Fare veya Joystik Kullanımı : Klavye veya fare kullanımı diğerlerine göre bir miktar farklılık göstermesi sebebiyle bunada kabaca değinelim. USB klavye, fare veya joystik benzeri aygıtların kullanımında işin içine HID (Human Interface Device) girdiği için çekirdekte HID ve bunun yanında da Input (çekirdekte "Input device support" bölümünde) modüllerine ihtiyaç var. Ayrıca kullandığınız aygıtın türüne göre fare ise mouse desteğinin (mousedev) , klavye ise keyboard (keybdev) desteğininde çekirdekte verilmiş olması gerekir. Yukarıda USB modülleri arasındaki ilişkinin resmedildiği şekil bu konuyu izah etmekte. 2.4 Kernel için örnekleme yapacak olursak (Input core support bölümü)
HID ile ilgili 2.4 çekirdek konfigürasyonu;
NOT: "HID input layer support" kısmının aktif olabilmesi için "Input core support" 'un seçilmiş olması gerekir. Ve yine "USB support" bölümünden;
Desteklerinin USB klavye, fare veya joystik için uygun olanının/olanlarının seçilmiş olması gerekir. Klavye kullanımında gerekli modüller yüklü olduktan sonra hemen hemen sorun yaşamazsınız. Ancak fare ile ilgili XF86Config dosyanızda bir takım düzenlemeler yapmak durumunda kalabilirsiniz. XF86Config için örnek bir USB fare ayarı şu şekilde olabilir. Tekerlekli bir fare için örnek /etc/X11/X86Config-4 konfigürasyonu:
Ayrıca fare olarak sadece usb fareniz varsa (trackball gibi başka benzer bir aygıt yoksa) XF86Config-4 dosyasındaki ServerLayout bölümünde yer alan "CorePointer" kısmını aşağıdaki gibi düzenleyin.
Şayet usb farenizin yanında başka benzer başka bir aygıt (trackball veya ps/2 vs) de varsa yine InputDevice kısmını aşağıdaki gibi düzenleyip yukarıdaki ServerLayout bölümüne de diğer fare türünüze ait bilgiyi de ekleyin.
Veya başka bir yöntem olarak; sadece InputDevice kısmına ikinci fare türünüzü "SendCoreEvents" parametresi ile ekleyebilirsiniz. Bunun içinde şu örnek açıklayıcı olacaktır.
Ayrıca şayet /dev/input/mice (ls -al /dev/input/mice ile kontrol edebilirsiniz) sisteminizde yoksa;
ile oluşturmanız gerekir. Konu ile ilgili ayrıntılı bilgiye http://linuxusbguide.sourceforge.net/USB-guide-1.0.9/x201.html adresinden ulaşabilirsiniz. Diğer USB Aygıtlar (Yazıcı, Kamera ...) Bir çok usb aygıtı yazıda ifade edilen gerekli modülleri uygun şekilde yükleyerek sorunsuzca kullanabilirsiniz. Bazen direk çekirdek tarafından desteklenmeyen usb aygıtlar ile karşılaşırsanız yapmanız gereken öncelikle sistemde ilgili temel usb modüllerini yüklemek (ehci|uhci|ohci, usbcore gibi) daha sonra elinizdeki bu usb aygıt için ilgili aygıtın web sitesinden çekeceğiniz sürücüyü derleyip aktif etmek olabilir. Ancak böyle bir durumda ilk önce ilgili cihazın sürücüsü için deb paketi mevcut mu diye araştırmak daha uygun ve zahmetsiz çözüm olabilir. Mesela çoğu yazıcı için çekirdekte temel usb modüllerinin yanısıra yazıcı için de usb desteğini aktif ettikten sonra "insmod printer" gibi bir çözüm işe yarayacaktır. Benzer şekilde Usb Dijital Video Kamera ile Usb hazıfa ünitesinin kullanımı çok farklılık arz etmiyecektir. Neredeyse temel usb modüllerine ilave olarak usb-storage modülü ihtiyacınızı görecektir. Kaynaklar : |