Sorunun ilk bölümünde, bir USB sürücüsünü ayırmanın libusb ile yaptığınızdan daha iyi bir yol aradım ve bulamadım.
Söz konusu ikinci bölümü olarak, Udev olabilir reaksiyona sürücü yükleme, ancak zorla bir cihaz tahsis edilecek özel bir sürücü.
Linux çekirdeğindeki her sürücü bir veya daha fazla cihazdan sorumludur. Sürücünün kendisi hangi cihazları desteklediğini seçer. Bunu program aracılığıyla yapar, yani cihazın satıcısını ve ürün kimliğini kontrol ederek veya eğer mevcut değilse (örneğin eski bir cihaz), bazı otomatik algılama sezgisel taramalarını ve akıl sağlığı kontrollerini yaparak. Sürücü kendinden emin olduktan sonra, desteklediği bir cihaz bulduğunda, kendisine takılır. Kısacası, belirli bir sürücüyü belirli bir aygıtı kullanmaya zorlayamazsınız. Bununla birlikte, bazen bir aygıt sürücüsü kabul ettiği şeylerle cömert davranır ve bir aygıt bilmediği bir şekilde çalışabilir. Kilometreniz değişecek! Geçmişte, garip bir PCI aygıt / satıcı kimliklerini, bunları desteklemesi gereken sürücülere, karışık bir başarı ve birkaç eğlenceli çekirdek çökmesiyle manuel olarak eklemek zorunda kaldım.
Şimdi, modüller söz konusu olduğunda, fazladan bir adım var. Modül yükleme yeni bir aygıt algılandığında çekirdek tarafından uyandırılır. Aygıtı tanımlayan ve USB aygıtları için buna benzeyen bir 'modalias' dizgisi geçti:
usb:v046DpC221d0170dc00dsc00dp00ic03isc00ip00
Bu dize, cihaz sınıfını ( usb
) ve sınıfa özgü bilgileri (satıcı / cihaz / seri numarası, cihaz sınıfı, vb.) İçerir. Her bir çekirdek sürücüsü aşağıdaki gibi bir satır içerir:
MODULE_ALIAS("usb:...")
Usbalyalarla uyuşması gereken (joker karakterler birden fazla cihazı eşleştirmek için kullanılır). Eğer modalias
sürücü desteklerin olduğunu uyuşuyorsa bu sürücü yüklenir (veya zaten varsa, yeni cihaz haberdar).
Desteklenen cihazları (modalias tarafından) ve bunlarla ilişkili modülleri görebilirsiniz.
less /lib/modules/`uname -r`/modules.alias
USB depolama aygıtı sürücüsünü seçerseniz, satıcı ve aygıt kimliği tarafından desteklediği bazı belirli aygıtlara sahip olduğunu görür ve satıcı / aygıt ne olursa olsun, doğru (depolama) sınıfı olan aygıtları desteklemeye çalışır. .
Bunu işletim sisteminizdeki ( /etc/modprobe.d/
Debian ve arkadaşlarınızdaki) kullanıcı alanı mekanizmalarını kullanarak etkileyebilirsiniz . Modülleri kara listeye alabilir veya modalias tarafından yüklenecek modülleri modules.alias
( tıpkı dosya gibi) (ve aynı sözdizimini kullanarak) belirleyebilirsiniz. depmod -a
sonra modül yükleyicinin düzenlerini yeniden oluşturacaktır.
Bununla birlikte, bu atı suya götürebilseniz de, onu içmesini sağlayamazsınız. Sürücünün cihazınız için desteği yoksa, görmezden gelmesi gerekir.
Genel durumdaki teori budur.
Uygulamada ve USB durumunda, cihazınızın depolama alanı iki olan iki arayüze sahip gibi görünüyor . Çekirdek , genel cihazın depolama arayüzüne bağlanacaktır . Diğer arayüz doğru sınıf varsa, usbnet
sürücü olabilir ona bağlanması. Evet, aynı fiziksel aygıta bağlı birden fazla sürücünüz olabilir , çünkü bir USB aygıtı birden fazla arabirim dışa aktarır (örneğin, Logitech G15 klavyem her ikisi de ayrı bir sürücü tarafından yönetilen bir klavye aygıtına ve LCD ekranına sahip olduğu için iki tane verir) .
USB cihazınızın ikinci arayüzünün tespit edilmemesi, çekirdekte destek bulunmadığını gösterir. Durum ne olursa olsun, cihaz arayüzlerini / uç noktalarını kullanarak ayrıntılı ve ayrıntılı bir şekilde listeleyebilir lsusb -v | less
, ardından kendi cihazınıza doğru aşağıya doğru gidebilirsiniz (çıktıyı cihaza göre sınırlandırabilirsiniz: satıcı kimliğine veya USB eğimine sahipseniz).
Lütfen dikkat: Burada USB cihazlarının mantıksal yapısına göre biraz fazla sadeleştiriyorum. USB konsorsiyumunu suçla. :)