Linux'ta bir aygıt sürücüsü bir program mı / süreç mi yoksa sadece bir kütüphane mi?


23

Aygıt sürücüsü, kendi başına çalışan bir program mı, yoksa bellekte yüklü olan bir kitaplık mı (işlevler grubu) ve programlar işlevlerinden birini çağırabilir (bu nedenle kendi kendine çalışmaz).

Ve eğer bir programsa, bir işlem kimliğine sahip midir, örneğin bir aygıt sürücüsünü başka herhangi bir işlemi sona erdirdiğim gibi sonlandırabilir miyim?


1
Bir sürücüyü rmmod ile "kaldırabilirsiniz", ancak yalnızca kullanılmıyorsa.
pjc50

Yanıtlar:


35

Linux'ta, birçok aygıt sürücüsü, kitaplıkların veya işlemlerin değil çekirdeğin bir parçasıdır. Bu kullanarak aygıt dosyaları (genellikle de birlikte etkileşim Programlar /dev) ve çeşitli sisteme çağırır gibi open, read, write, ioctl...

Ancak istisnalar da var. Bazı aygıt sürücüleri, çekirdek sürücü saplamaları ve kullanıcı alanı kitaplıklarının bir karışımını kullanır ( örneğin , UIO kullanarak). Diğerleri ise tamamen kullanıcı alanında, genellikle bazı bit-çarpma arabirimlerinin (UART veya GPIO) üzerinde gerçekleştirilir. Her iki durumda da genellikle işlem halindedirler, bu nedenle ayrı bir işlem görmezsiniz, yalnızca cihazı kullanan işlemi göremezsiniz.

Bir aygıt sürücüsünü “sonlandırmak” için, tüm işlemleri durdurmanız, ardından çekirdek modüllerini (modül olarak inşa edilmiş varsayılarak) ve isteğe bağlı olarak kullandığı ve artık gerekli olmayan diğer modülleri kaldırmanız gerekir. Sisteminizdeki modülleri kullanarak listeleyebilirsiniz.lsmodrmmod veya modprobe -rher ikisini lsmodde ancak kullanıcı olmadığını gösterirse işe yarayacak şekilde kaldırabilirsiniz .


2
Yeterince cesursanız ve çekirdeğiniz derlendiyse CONFIG_MODULE_FORCE_UNLOAD, rmmod -fkullanımda olan / kaldırılması / tasarlanmadığı modülleri boşaltmaya zorlayabilirsiniz. Bu, güvenilmez bir durumda bir çekirdeğe neden olmaktan başka, ayrıca çekirdeği de karıştırın.
Ruslan

9

İlk önce sürücünün ne olduğunu tanımlamanız gerekir. Bir cihazı (kameranız gibi) veya bir alt sistemi (bir dosya sistemi gibi) kontrol eden bir program veya alt rutin olarak tanımlayacağım. Bunu doğrudan sistem programı aracılığıyla mı yoksa çekirdek sunucular mı yoksa kullanıcı-arazi işlemleri yoluyla mı yapması, esasen bu anlamsal soru için esas teşkil etmemelidir.

Bazı durumlarda Linux, yalnızca gerçek "sürücünün" bir aygıt ağacı olduğu yazılımda yazılmış genel bir protokol sağlar. Bu, bir donanım parametresi yapılandırması ve hangi sürücüyü oluşturan yazılımı kullanmasıdır.

Genel olarak, sürücü arayüzleri ve protokolleri, cihaz ağaçları veya udev kuralları tarafından tanımlandığı şekilde yüklenen çekirdek modülleri kullanılarak gerçekleştirilir. Bir çekirdek modülü tam anlamıyla bir süreç veya kütüphane değildir.

Bir kütüphane, verilen herhangi bir işleme yüklenebilecek statik bir kod kümesidir. Modern işletim sistemleri bu kütüphaneleri paylaşılan hafızaya yüklüyor. Bir işlemin kendisi, herhangi bir sayıda paylaşılan kütüphaneye bağlanabilir.

Bir işlem, sistem programının veya çekirdeğinin sistem belleği ve işlemci zamanı gibi kaynaklar tahsis ettiği çalışan bir programdır. Çekirdek modülleri bu deseni kendileri takip edebilir veya izlemeyebilir veya etmeyebilir, ancak Linux altında bir defacto işlemi olarak görülmez

Bu yüzden sorunuzu cevaplamak için bir sürücünün bir süreç olması gerekmez, olabilir. Kod bir kütüphanede bulunabilse de, sürücü çekirdek modüller veya kullanıcı alanı işlemleri biçiminde çekirdek olsun olmasın, yine de bir program aracılığıyla belleğe yüklenir.

Bir sürücünün bütünlüğünün gerçekte ne olduğunu düşünürsek, anlamsal bir argüman haline gelir. Bir sürücünün her zaman bir program olduğunu söyleyebilirsiniz, ancak bazen cihaz ağaçlarında olduğu gibi değildir, aslında işlemin ve modülün her ikisini de oluşturmak için kütüphaneleri kullandığı bir kullanıcı süreci, aygıt ağacı dosyası, udev kuralları ve çekirdek modülü olabilir. Bir sürücünün mantığı.


0

Bir Linux aygıt sürücüsü, aslında bir çekirdek-alan kütüphanesidir . Çağrıları, çoğunlukla üst düzey sürücüler tarafından veya onu kullanan kullanıcı alanı işlemleri tarafından başlatılır.

Bundan sadece birkaç istisna var:

  • Çekirdek ipleri sürücüler tarafından da başlatılabilir / durdurulabilir, bunlar aslında bir kullanıcı-alanı bölümü olmayan süreçlerdir.
  • Kesme işleyicileri, donanım tarafından başlatılır, kullanıcı alanı işlemleri tarafından başlatılmaz.

Diğer sistemlerde, GNU Hurd'da olduğu gibi, sürücüler aslında süreçlerle etkileşimde bulunabilecekleri onlarla aynıdır. Linux'ta sürücüler kütüphanedir. Her iki kavramın da avantajları ve dezavantajları vardır.

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.