Πώς να χρησιμοποιήσετε το Udev για εντοπισμό και διαχείριση συσκευών στο Linux


Το Udev (υποσύστημα χρηστών /dev ) είναι ένα υποσύστημα Linux για ανίχνευση και διαχείριση δυναμικών συσκευών, από την έκδοση 2.6 του πυρήνα. Είναι αντικατάσταση των devfs και hotplug .

Δημιουργεί ή αφαιρεί δυναμικά τους κόμβους των συσκευών (μια διεπαφή σε ένα πρόγραμμα οδήγησης συσκευής που εμφανίζεται σε ένα σύστημα αρχείων σαν να ήταν συνηθισμένο αρχείο, αποθηκευμένο κάτω από τον κατάλογο /dev ) κατά την εκκίνηση ή αν προσθέσετε ένα συσκευή ή να καταργήσετε μια συσκευή από το σύστημα. Στη συνέχεια διαδίδει πληροφορίες σχετικά με μια συσκευή ή αλλαγές στην κατάστασή της στο χώρο του χρήστη.

Η λειτουργία του είναι να 1) προμηθεύει τις εφαρμογές του συστήματος με συμβάντα συσκευών, 2) να διαχειρίζεται δικαιώματα των κόμβων συσκευών και 3) να δημιουργεί χρήσιμες συμβολικές συνδέσεις στον κατάλογο /dev για πρόσβαση σε συσκευές ή ακόμα και μετονομασία διεπαφών δικτύου .

Ένα από τα πλεονεκτήματα του udev είναι ότι μπορεί να χρησιμοποιήσει τα επίμονα ονόματα συσκευών για να εγγυηθεί τη συνεπή ονομασία των συσκευών σε όλες τις επανεκκινήσεις, παρά τη σειρά εντοπισμού τους. Αυτή η λειτουργία είναι χρήσιμη επειδή ο πυρήνας απλώς εκχωρεί ονόματα μη προβλέψιμων συσκευών με βάση τη σειρά εντοπισμού.

Σε αυτό το άρθρο, θα μάθουμε πώς να χρησιμοποιούμε το Udev για ανίχνευση και διαχείριση συσκευών σε συστήματα Linux. Λάβετε υπόψη ότι οι περισσότερες, αν όχι όλες, σύγχρονες διανομές Linux περιλαμβάνουν Udev ως μέρος της προεπιλεγμένης εγκατάστασης.

Μάθετε τα βασικά του Udev στο Linux

Ο δαίμονας udev , systemd-udevd systemd-udevd.service ) επικοινωνεί με τον πυρήνα και λαμβάνει τη συσκευή uevents < > απευθείας από αυτό κάθε φορά που προσθέτετε ή αφαιρείτε μια συσκευή από το σύστημα ή μια συσκευή αλλάζει την κατάσταση της.

Το Udev βασίζεται σε κανόνες - οι κανόνες είναι ευέλικτοι και πολύ ισχυροί. Κάθε συμβάν που λαμβάνεται από τη συσκευή είναι σύμφωνο με το σύνολο κανόνων που διαβάζονται από τα αρχεία που βρίσκονται στα /lib/udev/rules.d και /run/udev/rules.d .

Μπορείτε να γράψετε προσαρμοσμένα αρχεία κανόνων στον κατάλογο /etc/udev/rules.d/ (τα αρχεία θα πρέπει να τερματίζονται με την επέκταση .rules ) για να επεξεργαστεί μια συσκευή. Σημειώστε ότι τα αρχεία κανόνων σε αυτόν τον κατάλογο έχουν την υψηλότερη προτεραιότητα.

Για να δημιουργήσετε ένα αρχείο κόμβου συσκευής, udev πρέπει να αναγνωρίσει μια συσκευή χρησιμοποιώντας ορισμένα χαρακτηριστικά όπως ετικέτα , σειριακό αριθμό χρησιμοποιημένος αριθμός συσκευής λεωφορείου και πολλά άλλα. Αυτές οι πληροφορίες εξάγονται από το σύστημα αρχείων sysfs .

Κάθε φορά που συνδέετε μια συσκευή στο σύστημα, ο πυρήνας εντοπίζει και αρχικοποιεί και ένας κατάλογος με το όνομα της συσκευής δημιουργείται κάτω από τον κατάλογο /sys/ ο οποίος αποθηκεύει τα χαρακτηριστικά της συσκευής.

Το κύριο αρχείο ρυθμίσεων για το udev είναι /etc/udev/udev.conf και για να ελέγξετε τη συμπεριφορά εκτέλεσης του daemon udev, μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα udevadm .

Για να εμφανίσετε συμβάντα του πυρήνα και udev συμβάντα (το οποίο udev στέλνει μετά την επεξεργασία των κανόνων), εκτελέστε udevadm με την εντολή παρακολούθησης. Στη συνέχεια, συνδέστε μια συσκευή στο σύστημά σας και παρακολουθήστε, από το τερματικό, πώς χειρίζεται το συμβάν της συσκευής.

Το παρακάτω στιγμιότυπο οθόνης εμφανίζει ένα απόσπασμα από ένα συμβάν ADD μετά τη σύνδεση ενός δίσκου flash USB στο σύστημα δοκιμής:

$ udevadm monitor 

Για να βρείτε το όνομα που έχει εκχωρηθεί στο δίσκο USB, χρησιμοποιήστε το βοηθητικό πρόγραμμα lsblk που διαβάζει το σύστημα αρχείων sysfs και το udev db για να συλλέξετε πληροφορίες σχετικά με τις επεξεργασμένες συσκευές.

 
$ lsblk

Από την έξοδο της προηγούμενης εντολής, ο δίσκος USB ονομάζεται sdb1 (η απόλυτη διαδρομή πρέπει να είναι /dev/sdb1 ). Για να αναζητήσετε τα χαρακτηριστικά της συσκευής από τη βάση δεδομένων udev, χρησιμοποιήστε την εντολή info .

$ udevadm info /dev/sdb1

Πώς να εργαστείτε με τους κανόνες Udev στο Linux

Σε αυτήν την ενότητα, θα συζητήσουμε εν συντομία πώς να γράψουμε κανόνες udev . Ένας κανόνας αποτελείται από ένα διαχωρισμένο με κόμμα κατάλογο ενός ή περισσότερων ζευγών βασικής αξίας. Οι κανόνες σάς επιτρέπουν να μετονομάσετε έναν κόμβο συσκευής από το προεπιλεγμένο όνομα, να τροποποιήσετε τα δικαιώματα και την ιδιοκτησία ενός κόμβου συσκευής, να ενεργοποιήσετε την εκτέλεση ενός προγράμματος ή δέσμης ενεργειών όταν δημιουργείται ή διαγραφεί ένας κόμβος συσκευής, μεταξύ άλλων.

Θα γράψουμε έναν απλό κανόνα για την εκκίνηση ενός σεναρίου όταν προστεθεί μια συσκευή USB και όταν αυτή αφαιρεθεί από το τρέχον σύστημα.

Ας ξεκινήσουμε δημιουργώντας τα δύο σενάρια:

$ sudo vim /bin/device_added.sh

Προσθέστε τις ακόλουθες γραμμές στο σενάριο device_added.sh .

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

Ανοίξτε το δεύτερο σενάριο.

$ sudo vim /bin/device_removed.sh

Στη συνέχεια, προσθέστε τις ακόλουθες γραμμές στο script device_removed.sh .

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

Αποθηκεύστε τα αρχεία, κλείστε και κάντε και τα δύο σενάρια εκτελέσιμα.

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

Στη συνέχεια, ας δημιουργήσουμε έναν κανόνα που θα ενεργοποιήσει την εκτέλεση των παραπάνω σεναρίων, που ονομάζεται /etc/udev/rules.d/80-test.rules .

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

Προσθέστε τους δύο ακόλουθους κανόνες σε αυτό.

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"

όπου:

  • "==": is an operator to compare for equality.
  • "+=": is an operator to add the value to a key that holds a list of entries.
  • SUBSYSTEM: matches the subsystem of the event device.
  • ACTION: matches the name of the event action.
  • ENV{DEVTYPE}: matches against a device property value, device type in this case.
  • RUN: specifies a program or script to execute as part of the event handling.

Αποθηκεύστε το αρχείο και κλείστε το. Στη συνέχεια, ως root, ενημερώστε το systemd-udevd για να φορτώσετε ξανά τα αρχεία κανόνων (αυτό επίσης επαναφορτώνει άλλες βάσεις δεδομένων, όπως το ευρετήριο της μονάδας πυρήνα), εκτελώντας.

$ sudo udevadm control --reload

Τώρα συνδέστε μια μονάδα USB στο μηχάνημά σας και ελέγξτε αν εκτελέστηκε το σενάριο device_added.sh . Καταρχάς, το αρχείο scripts.log θα πρέπει να δημιουργηθεί κάτω από το /tmp .

$ ls -l /tmp/scripts.log

Στη συνέχεια, το αρχείο θα πρέπει να έχει μια καταχώρηση όπως " συσκευή USB αφαιρεθεί κατά date_time ", όπως φαίνεται στο στιγμιότυπο οθόνης.

$ cat /tmp/scripts.log

Για περισσότερες πληροφορίες σχετικά με τον τρόπο εγγραφής των κανόνων udev και τη διαχείριση του udev, συμβουλευτείτε τις χειροκίνητες καταχωρίσεις udev και udevadm αντίστοιχα, εκτελώντας:

$ man udev
$ man udevadm

Udev είναι ένας αξιόλογος διαχειριστής συσκευών που παρέχει έναν δυναμικό τρόπο δημιουργίας κόμβων συσκευών στον κατάλογο /dev . Εξασφαλίζει ότι οι συσκευές διαμορφώνονται μόλις συνδεθούν και ανακαλυφθούν. Διαδίδει πληροφορίες σχετικά με μια επεξεργασμένη συσκευή ή αλλαγές στην κατάστασή της, στο χώρο του χρήστη.

Εάν έχετε οποιεσδήποτε ερωτήσεις ή σκέψεις για να μοιραστείτε αυτό το θέμα, χρησιμοποιήστε τη φόρμα σχολίων.

Ολα τα δικαιώματα διατηρούνται. © Linux-Console.net • 2019-2020