Cara Menggunakan Udev untuk Deteksi dan Manajemen Perangkat di Linux


Udev (userspace /dev) adalah sub-sistem Linux untuk deteksi dan pengelolaan perangkat dinamis, sejak versi kernel 2.6. Ini adalah pengganti devfs dan hotplug.

Ini secara dinamis membuat atau menghapus node perangkat (antarmuka ke driver perangkat yang muncul dalam sistem file seolah-olah itu adalah file biasa, disimpan di bawah direktori /dev) pada saat boot atau jika Anda menambahkan perangkat ke atau menghapus perangkat dari sistem. Ini kemudian menyebarkan informasi tentang perangkat atau perubahan statusnya ke ruang pengguna.

Fungsinya adalah untuk 1) menyediakan aplikasi sistem dengan kejadian perangkat, 2) mengelola izin node perangkat, dan 3) dapat membuat symlink yang berguna di direktori /dev untuk mengakses perangkat, atau bahkan mengganti nama antarmuka jaringan .

Salah satu kelebihan udev adalah ia dapat menggunakan nama perangkat yang persisten untuk menjamin konsistensi penamaan perangkat saat reboot, terlepas dari urutan penemuannya. Fitur ini berguna karena kernel hanya memberikan nama perangkat yang tidak dapat diprediksi berdasarkan urutan penemuannya.

Dalam artikel ini, kita akan mempelajari cara menggunakan Udev untuk deteksi dan pengelolaan perangkat di sistem Linux. Perhatikan bahwa sebagian besar, jika tidak semua, distribusi Linux modern mainstream dilengkapi dengan Udev sebagai bagian dari instalasi default.

Pelajari Dasar-dasar Udev di Linux

Daemon udev, systemd-udevd (atau systemd-udevd.service) berkomunikasi dengan kernel dan menerima uevents perangkat > langsung dari perangkat tersebut setiap kali Anda menambah atau menghapus perangkat dari sistem, atau perangkat mengubah statusnya.

Udev didasarkan pada aturan – aturannya fleksibel dan sangat kuat. Setiap peristiwa perangkat yang diterima dicocokkan dengan kumpulan aturan yang dibaca dari file yang terletak di /lib/udev/rules.d dan /run/udev/rules.d.

Anda dapat menulis file aturan khusus di direktori /etc/udev/rules.d/ (file harus diakhiri dengan ekstensi .rules) untuk memproses perangkat. Perhatikan bahwa file aturan dalam direktori ini memiliki prioritas tertinggi.

Untuk membuat file node perangkat, udev perlu mengidentifikasi perangkat menggunakan atribut tertentu seperti label, nomor seri, nomor mayor dan minor yang digunakan, nomor bus perangkat, dan sebagainya. lebih banyak. Informasi ini diekspor oleh sistem file sysfs.

Setiap kali Anda menghubungkan perangkat ke sistem, kernel mendeteksi dan menginisialisasinya, dan direktori dengan nama perangkat dibuat di bawah direktori /sys/ yang menyimpan atribut perangkat.

File konfigurasi utama untuk udev adalah /etc/udev/udev.conf, dan untuk mengontrol perilaku runtime daemon udev, Anda dapat menggunakan utilitas udevadm.

Untuk menampilkan peristiwa kernel yang diterima (uevents) dan peristiwa udev (yang dikirimkan udev setelah pemrosesan aturan), jalankan udevadm dengan perintah monitor. Kemudian sambungkan perangkat ke sistem Anda dan perhatikan, dari terminal, bagaimana peristiwa perangkat ditangani.

Tangkapan layar berikut menunjukkan cuplikan peristiwa ADD setelah menghubungkan flash disk USB ke sistem pengujian:

udevadm monitor 

Untuk menemukan nama yang ditetapkan pada disk USB Anda, gunakan utilitas lsblk yang membaca sistem file sysfs dan udev db untuk mengumpulkan informasi tentang perangkat yang diproses.

 
lsblk

Dari output perintah sebelumnya, disk USB diberi nama sdb1 (jalur absolutnya harus /dev/sdb1). Untuk menanyakan atribut perangkat dari database udev, gunakan perintah info.

udevadm info /dev/sdb1

Cara Bekerja dengan Aturan Udev di Linux

Di bagian ini, kita akan membahas secara singkat cara menulis aturan udev. Aturan terdiri dari daftar satu atau lebih pasangan nilai kunci yang dipisahkan koma. Aturan memungkinkan Anda mengganti nama node perangkat dari nama default, mengubah izin dan kepemilikan node perangkat, memicu eksekusi program atau skrip ketika node perangkat dibuat atau dihapus, dan lain-lain.

Kami akan menulis aturan sederhana untuk meluncurkan skrip ketika perangkat USB ditambahkan dan ketika perangkat tersebut dihapus dari sistem yang sedang berjalan.

Mari kita mulai dengan membuat dua skrip:

sudo vim /bin/device_added.sh

Tambahkan baris berikut dalam skrip device_added.sh.

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

Buka skrip kedua.

sudo vim /bin/device_removed.sh

Kemudian tambahkan baris berikut ke skrip device_removed.sh.

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

Simpan file, tutup dan buat kedua skrip dapat dieksekusi.

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

Selanjutnya, mari buat aturan untuk memicu eksekusi skrip di atas, yang disebut /etc/udev/rules.d/80-test.rules.

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

Tambahkan dua aturan berikut di dalamnya.

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"

Di mana :

  • "==": adalah operator yang membandingkan kesetaraan.
  • "+=": adalah operator untuk menambahkan nilai ke kunci yang menyimpan daftar entri.
  • SUBSYSTEM: cocok dengan subsistem perangkat peristiwa.
  • ACTION: cocok dengan nama tindakan peristiwa.
  • ENV{DEVTYPE}: cocok dengan nilai properti perangkat, dalam hal ini jenis perangkat.
  • JALANKAN: menentukan program atau skrip yang akan dijalankan sebagai bagian dari penanganan kejadian.

Simpan file dan tutup. Kemudian sebagai root, perintahkan systemd-udevd untuk memuat ulang file aturan (ini juga memuat ulang database lain seperti indeks modul kernel), dengan menjalankan.

sudo udevadm control --reload

Sekarang sambungkan drive USB ke mesin Anda dan periksa apakah skrip device_added.sh telah dijalankan. Pertama-tama file scripts.log harus dibuat di bawah /tmp.

ls -l /tmp/scripts.log

Maka file tersebut harus memiliki entri seperti “Perangkat USB dihapus pada tanggal_waktu ”, seperti yang ditunjukkan pada tangkapan layar.

cat /tmp/scripts.log

Untuk informasi selengkapnya tentang cara menulis aturan udev dan mengelola udev, lihat masing-masing entri manual udev dan udevadm, dengan menjalankan:

man udev
man udevadm
Ringkasan

Udev adalah pengelola perangkat luar biasa yang menyediakan cara dinamis untuk menyiapkan node perangkat di direktori /dev. Ini memastikan bahwa perangkat dikonfigurasikan segera setelah dicolokkan dan ditemukan. Ini menyebarkan informasi tentang perangkat yang diproses atau perubahan statusnya, ke ruang pengguna.

Jika Anda memiliki pertanyaan atau pemikiran untuk dibagikan mengenai topik ini, gunakan formulir umpan balik.