Linux'ta Cihaz Algılama ve Yönetimi için Udev Nasıl Kullanılır


Udev (kullanıcı alanı /dev), 2.6 çekirdek sürümünden bu yana dinamik cihaz algılama ve yönetimine yönelik bir Linux alt sistemidir. Bu, devfs ve hotplug'un yerini almıştır.

Önyükleme sırasında veya bir aygıt eklerseniz, aygıt düğümlerini (bir dosya sisteminde sıradan bir dosya gibi görünen, /dev dizini altında depolanan bir aygıt sürücüsüne yönelik bir arayüz) dinamik olarak oluşturur veya kaldırır. cihazı sisteme bağlayın veya sistemden bir cihazı kaldırın. Daha sonra bir cihaz hakkındaki bilgileri veya durumundaki değişiklikleri kullanıcı alanına yayar.

İşlevi 1) sistem uygulamalarına cihaz olaylarını sağlamak, 2) cihaz düğümlerinin izinlerini yönetmek ve 3) /dev dizininde cihazlara erişim için yararlı sembolik bağlantılar oluşturmak, hatta ağ arayüzlerini yeniden adlandırmaktır. .

udev'in avantajlarından biri, keşif sıralarına rağmen yeniden başlatmalarda cihazların tutarlı şekilde adlandırılmasını garanti etmek için kalıcı cihaz adlarını kullanabilmesidir. Bu özellik kullanışlıdır çünkü çekirdek, keşif sırasına göre öngörülemeyen aygıt adlarını atar.

Bu makalede, Linux sistemlerinde cihaz tespiti ve yönetimi için Udev'in nasıl kullanılacağını öğreneceğiz. Tüm ana akım modern Linux dağıtımları olmasa da çoğunun, varsayılan kurulumun bir parçası olarak Udev ile birlikte geldiğini unutmayın.

Linux'ta Udev'in Temellerini Öğrenin

udev arka plan programı, systemd-udevd (veya systemd-udevd.service), çekirdekle iletişim kurar ve aygıt olaylarını alır. Sisteme bir cihaz eklediğinizde veya sistemden her kaldırdığınızda veya bir cihazın durumu değiştiğinde doğrudan sistemden.

Udev kurallara dayanır; kuralları esnek ve çok güçlüdür. Alınan her cihaz olayı, /lib/udev/rules.d ve /run/udev/rules.d'de bulunan dosyalardan okunan kurallar kümesine göre eşleştirilir.

Bir cihazı işlemek için /etc/udev/rules.d/ dizinine özel kural dosyaları yazabilirsiniz (dosyalar .rules uzantısıyla bitmelidir). Bu dizindeki kural dosyalarının en yüksek önceliğe sahip olduğunu unutmayın.

Bir cihaz düğüm dosyası oluşturmak için udev'in, etiket, seri numarası, kullanılan büyük ve küçük numarası, veri yolu cihaz numarası vb. gibi belirli özellikleri kullanarak bir cihazı tanımlaması gerekir. daha fazla. Bu bilgiler sysfs dosya sistemi tarafından dışa aktarılır.

Sisteme bir aygıt bağladığınızda, çekirdek onu algılar ve başlatır ve /sys/ dizini altında aygıt niteliklerini saklayan aygıt adını taşıyan bir dizin oluşturulur.

Udev için ana yapılandırma dosyası /etc/udev/udev.conf'dur ve udev arka plan programının çalışma zamanı davranışını kontrol etmek için udevadm yardımcı programını kullanabilirsiniz.

Alınan çekirdek olaylarını (uevents) ve udev olaylarını (udev'in kural işlendikten sonra gönderdiği) görüntülemek için udevadm 'i çalıştırın. monitör komutuyla. Daha sonra sisteminize bir cihaz bağlayın ve terminalden cihaz olayının nasıl ele alındığını izleyin.

Aşağıdaki ekran görüntüsü, test sistemine bir USB flash disk bağlandıktan sonraki ADD etkinliğinin bir alıntısını göstermektedir:

udevadm monitor 

USB diskinize atanan adı bulmak için sysfs dosya sistemini okuyan lsblk yardımcı programını ve işlenen cihazlar hakkında bilgi toplamak için udev db'yi kullanın.

 
lsblk

Önceki komutun çıktısına göre, USB diski sdb1 olarak adlandırılmıştır (mutlak yol /dev/sdb1 olmalıdır). Cihaz özelliklerini udev veritabanından sorgulamak için info komutunu kullanın.

udevadm info /dev/sdb1

Linux'ta Udev Kurallarıyla Nasıl Çalışılır

Bu bölümde udev kurallarının nasıl yazılacağını kısaca tartışacağız. Kural, bir veya daha fazla anahtar/değer çiftinin virgülle ayrılmış listesinden oluşur. Kurallar, diğerlerinin yanı sıra, bir cihaz düğümünü varsayılan addan yeniden adlandırmanıza, bir cihaz düğümünün izinlerini ve sahipliğini değiştirmenize, bir cihaz düğümü oluşturulduğunda veya silindiğinde bir programın veya komut dosyasının yürütülmesini tetiklemenize olanak tanır.

Bir USB aygıtı eklendiğinde ve çalışan sistemden kaldırıldığında bir komut dosyasını başlatmak için basit bir kural yazacağız.

İki betiği oluşturarak başlayalım:

sudo vim /bin/device_added.sh

device_added.sh betiğine aşağıdaki satırları ekleyin.

#!/bin/bash
echo "USB device added at $(date)" >>/tmp/scripts.log

İkinci betiği açın.

sudo vim /bin/device_removed.sh

Daha sonra device_removed.sh betiğine aşağıdaki satırları ekleyin.

#!/bin/bash
echo "USB device removed  at $(date)" >>/tmp/scripts.log

Dosyaları kaydedin, kapatın ve her iki komut dosyasını da yürütülebilir hale getirin.

sudo chmod +x /bin/device_added.sh
sudo chmod +x /bin/device_removed.sh

Daha sonra, yukarıdaki komut dosyalarının yürütülmesini tetiklemek için /etc/udev/rules.d/80-test.rules adında bir kural oluşturalım.

vim /etc/udev/rules.d/80-test.rules

Aşağıdaki iki kuralı buna ekleyin.

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device",  RUN+="/bin/device_added.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"

Neresi :

  • "==": eşitlik açısından karşılaştırılacak bir operatördür.
  • "+=": değeri girişlerin listesini içeren bir anahtara ekleyen bir operatördür.
  • ALT SİSTEM: olay cihazının alt sistemiyle eşleşir.
  • EYLEM: etkinlik eyleminin adıyla eşleşir.
  • ENV{DEVTYPE: bu durumda bir cihaz özelliği değeriyle, cihaz türüyle eşleşir.
  • ÇALIŞTIR: olay işlemenin bir parçası olarak yürütülecek programı veya komut dosyasını belirtir.

Dosyayı kaydedin ve kapatın. Daha sonra root olarak systemd-udevd'e çalıştırarak kural dosyalarını yeniden yüklemesini söyleyin (bu aynı zamanda çekirdek modülü dizini gibi diğer veritabanlarını da yeniden yükler).

sudo udevadm control --reload

Şimdi makinenize bir USB sürücüsü bağlayın ve device_added.sh komut dosyasının yürütülüp yürütülmediğini kontrol edin. Öncelikle scripts.log dosyası /tmp altında oluşturulmalıdır.

ls -l /tmp/scripts.log

Daha sonra dosyada, ekran görüntüsünde gösterildiği gibi "USB cihazının tarih_saatte çıkarılması" gibi bir giriş bulunmalıdır.

cat /tmp/scripts.log

Udev kurallarının nasıl yazılacağı ve udev'in nasıl yönetileceği hakkında daha fazla bilgi için aşağıdakileri çalıştırarak sırasıyla udev ve udevadm manuel girişlerine bakın:

man udev
man udevadm
Özet

Udev, /dev dizinindeki cihaz düğümlerini ayarlamanın dinamik bir yolunu sağlayan olağanüstü bir cihaz yöneticisidir. Cihazların takılıp keşfedildiği anda yapılandırılmasını sağlar. İşlenen bir cihaz hakkındaki bilgileri veya durumundaki değişiklikleri kullanıcı alanına yayar.

Bu konuyla ilgili paylaşmak istediğiniz sorularınız veya düşünceleriniz varsa geri bildirim formunu kullanın.