Libusb çekirdek öğelerine nasıl erişir?


10

Anladığım kadarı ile:

  • Genel olarak, bir sürücü çekirdek alanında çalışır ve kullanıcı alanından çağrılabilir.
  • Yalnızca çekirdek alanındaki kod, usb düşük seviye şeyleri çağırabilir / ioctl
  • libusb bir kütüphane olduğu için kullanıcı alanında derlenecek ve çalıştırılacaktır.

Peki libusbdüşük seviyeli USB'ye nasıl ulaşılır?

Yanıtlar:


10

Libusb, USB cihazlarıyla etkileşime giren bir kütüphanedir, lanetler metin terminalleriyle etkileşime girecek bir kütüphane, ALSA (daha doğrusu libasound bileşeni), audi cihazlarıyla etkileşime girecek bir kütüphanedir, vb. Çekirdek, donanım etkileşimlerini yönetir. Sağladığı cihaz dosyalarını uygulamaları aracılığıyla, donanım ile etkileşim açabilir read, writeve sistem çağrıları .ioctl

ioctl bir sistem çağrısıdır: uygulamaların (kullanıcı düzeyi kod) çekirdek tarafından işlenen istekleri göndermesine izin verir.

Libusb, uygulamaların cihazda bildirilecek bir şey olduğunda yürütülen geri arama işlevlerini kaydetmesine izin verir. Kaputun altındaki bilgi akışına kabaca bir genel bakış:

  • Veriyolundaki elektrik sinyali USB denetleyicisinde bir olayı tetikler.
  • USB denetleyicisi ana işlemcide bir kesme sinyali verir.
  • İşlemci, işletim sistemi çekirdeğinde kesme işleyicisini yürütür.
  • Bir süreç engelleme şu anda bu kernel bildirimler read, writeya ioctlcihaz dosyası sistem çağrısı ve karşılığında bu sistem çağrısı neden olur.
  • Kullanıcı arazi işleminde, sistem çağrısı döndüğünde kütüphane kodu yürütülür.
  • Kütüphane kodu, uygulama programcısı tarafından kaydedilen geri arama işlevini yürütür.

USB aygıtları için aygıt sürücüleri yazmaya gerek yok mu? (belki de hız optimizasyonu için değilse)
Thomas

@Thomas Aktarımdan bağımsız bir çerçeveye takmak istiyorsanız bir çekirdek sürücüsü yazmanız gerekir: klavye, depolama, ethernet, vb.
Gilles 'SO- kötü olmayı bırak'

Bir aygıt bilgisayar tarafından tanınmıyorsa (sürücüsü yok), libusbyine de ona erişebilecek mi?
Thomas

@Tamamlar libusb'un USB protokolünün tüm yönleriyle başa çıkıp baş edemeyeceğini bilmiyorum, ama prensip olarak, evet. Bir kullanıcı ülkesi programı herhangi bir RS232 seri cihazı ile iletişim kurabilir /dev/ttyS*. USB aynı prensiptir, sadece daha hızlı ve daha karmaşıktır.
Gilles 'SO- kötü olmayı bırak'

3

Linux iki halka kullanır halka 0 çekirdek seviyesi, halka 3 kullanıcı seviyesi denir. Kullanıcıdan çekirdeğe bağlantı (daha önce de söylendiği gibi) sistem çağrılarıyla yapılır. Aralarında kullanıcı alanından görüldüğü gibi kütüphaneler var. Böylece çekirdeğe en düşük düzeyde erişim, kararlılık, güvenlik, senkronizasyon, kaydetme aralığı vb. Nedenlerle kütüphanelerde uygulanır. Çekirdek sürücüsü kullanıcı alanına farklı arabirimler sağlar: (ioctl, sysfs, soketler, karakter ve blok aygıtları vb.) Kullanıcı Alanı Arabirimleri . İsterseniz, kitaplıkları atlayarak çekirdek sürücünüze erişiminizi uygulayabilir veya ikili dosyalarınızı statik bağlantılı kitaplıklarla daha kolay derleyebilirsiniz.

İyi bir başlangıç ​​noktası libusb kaynaklarını okumaktır, bunlar iyi belgelenmiştir.


0

Çekirdek ( ) tarafından hazırlanan sistem çağrılarını (2) ve cihaz dosyalarını kullanır/dev/bus/usb/*


Yani her şey çekirdek okuma ve yazma kabul eden bilinmeyen cihazlar için özel bir sürücü yapmış gibi çalışır? Kesintiler vb. Nasıl bildirilir?
Thomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.