Gestione dei dispositivi di sistema con udev Device Manager
Panoramica di come udev device manager rileva l'hardware, gestisce i nodi dei dispositivi e si integra con systemd su Oracle Linux.
udev device manager viene eseguito come servizio systemd per fornire al software un accesso prevedibile e gestito ai dispositivi di sistema esposti dal kernel. In genere, udev gestisce le autorizzazioni dei nodi dei dispositivi, crea collegamenti simbolici nella directory /dev/ per rendere i nomi dei dispositivi più prevedibili e più facili da identificare o rinominare le interfacce di rete.
udev device manager crea o rimuove dinamicamente i file dei nodi dei dispositivi in fase di boot. Quando si crea un nodo dispositivo, udev legge la directory /sys del dispositivo per attributi quali etichetta, numero di serie e numero di dispositivo bus.
udev può utilizzare nomi di dispositivo persistenti per garantire una denominazione coerente dei dispositivi tra i reboot, indipendentemente dal loro ordine di scoperta. I nomi dei dispositivi persistenti sono particolarmente importanti quando si utilizzano dispositivi di memorizzazione esterni.
udev gestisce anche gli eventi dei driver dei dispositivi che vengono attivati dal kernel e utilizza le regole definite nella sua configurazione per attivare determinate azioni. Ad esempio, se un dispositivo di memorizzazione USB è collegato al sistema, il kernel notifica udev e udev notifica il gestore appropriato in modo che il dispositivo possa essere montato. Inoltre, se un cavo di rete è collegato a una scheda di interfaccia di rete, il kernel notifica udev della modifica dello stato e udev notifica NetworkManager in modo che l'azione appropriata possa avvenire per la connessione alla rete.
Il file di configurazione per udev è /etc/udev/udev.conf, in cui è possibile definire la priorità di log udev_log, che può essere impostata su err, info e debug. Il valore predefinito è err. Ulteriori configurazioni delle regole utilizzate da udev vengono gestite in singoli file di regole in /etc/udev/rules.d/.
Per ulteriori informazioni, vedere la pagina del manuale udev(7).
udev è un componente di systemd. Per ulteriori informazioni, consultare le guide di sistema specifiche della release.
Per ulteriori informazioni sui concetti systemd utilizzati da udev nelle release di Oracle Linux, vedere Managing the System With systemd.
Per ulteriori informazioni sui file system virtuali del kernel e sui moduli dei driver dispositivo, utilizzare le seguenti risorse specifiche della release.
Per ulteriori informazioni sui file system virtuali del kernel e sui moduli dei driver dispositivo nelle release di Oracle Linux, vedere Managing Kernels and System Boot on Oracle Linux.
Informazioni sui file dei dispositivi
Spiega in che modo Oracle Linux rappresenta l'hardware come file di dispositivo, inclusi blocchi, caratteri e pseudo dispositivi.
La directory /dev contiene i file del dispositivo o i nodi dispositivo che forniscono accesso alle periferiche quali dischi rigidi, risorse su periferiche quali le partizioni del disco e gli pseudo dispositivi come un generatore di numeri casuali.
La directory /dev ha diverse gerarchie di sottodirectory, ognuna delle quali contiene file di dispositivi correlati a un certo tipo di dispositivo. Tuttavia, il contenuto di queste sottodirectory viene implementato come collegamenti simbolici ai file corrispondenti in /dev. Pertanto, è possibile accedere ai file tramite il file collegato in /dev o il file corrispondente nella sottodirectory.
L'uso del comando ls -l /dev elenca i file, alcuni dei quali sono contrassegnati come b (per blocco) o c (per carattere). A questi dispositivi è associata una coppia di numeri che identificano il dispositivo nel sistema.
ls -l /dev
total 0
crw-r--r--. 1 root root 10, 235 Aug 20 08:36 autofs
drwxr-xr-x. 2 root root 240 Sep 20 07:37 block
drwxr-xr-x. 2 root root 100 Aug 20 08:36 bsg
drwxr-xr-x. 3 root root 60 Nov 4 2019 bus
lrwxrwxrwx. 1 root root 3 Aug 20 08:36 cdrom -> sr0
drwxr-xr-x. 2 root root 2720 Sep 20 07:37 char
crw-------. 1 root root 5, 1 Aug 20 08:36 console
lrwxrwxrwx. 1 root root 11 Aug 20 08:36 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Nov 4 2019 cpu
crw-------. 1 root root 10, 62 Aug 20 08:36 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Aug 20 08:36 disk
brw-rw----. 1 root disk 253, 0 Aug 20 08:36 dm-0
brw-rw----. 1 root disk 253, 1 Aug 20 08:36 dm-1
brw-rw----. 1 root disk 253, 2 Aug 20 08:36 dm-2
lrwxrwxrwx. 1 root root 13 Aug 20 08:36 fd -> /proc/self/fd
crw-rw-rw-. 1 root root 1, 7 Aug 20 08:36 full
crw-rw-rw-. 1 root root 10, 229 Aug 20 08:36 fuse
crw-------. 1 root root 10, 228 Aug 20 08:36 hpet
drwxr-xr-x. 2 root root 0 Aug 20 08:36 hugepages
crw-------. 1 root root 10, 183 Aug 20 08:36 hwrng
lrwxrwxrwx. 1 root root 12 Aug 20 08:36 initctl -> /run/initctl
drwxr-xr-x. 3 root root 220 Aug 20 08:36 input
crw-r--r--. 1 root root 1, 11 Aug 20 08:36 kmsg
lrwxrwxrwx. 1 root root 28 Aug 20 08:36 log -> /run/systemd/journal/dev-log
brw-rw----. 1 root disk 7, 0 Sep 23 01:28 loop0
crw-rw----. 1 root disk 10, 237 Sep 20 07:37 loop-control
drwxr-xr-x. 2 root root 120 Aug 20 08:36 mapper
crw-------. 1 root root 10, 227 Aug 20 08:36 mcelog
crw-r-----. 1 root kmem 1, 1 Aug 20 08:36 mem
crw-------. 1 root root 10, 59 Aug 20 08:36 memory_bandwidth
drwxrwxrwt. 2 root root 40 Nov 4 2019 mqueue
drwxr-xr-x. 2 root root 60 Aug 20 08:36 net
crw-------. 1 root root 10, 61 Aug 20 08:36 network_latency
crw-------. 1 root root 10, 60 Aug 20 08:36 network_throughput
crw-rw-rw-. 1 root root 1, 3 Aug 20 08:36 null
crw-------. 1 root root 10, 144 Aug 20 08:36 nvram
drwxr-xr-x. 2 root root 100 Aug 20 08:36 ol_ca-virtdoc-oltest1
crw-r-----. 1 root kmem 1, 4 Aug 20 08:36 port
crw-------. 1 root root 108, 0 Aug 20 08:36 ppp
crw-rw-rw-. 1 root tty 5, 2 Oct 7 08:10 ptmx
drwxr-xr-x. 2 root root 0 Aug 20 08:36 pts
crw-rw-rw-. 1 root root 1, 8 Aug 20 08:36 random
drwxr-xr-x. 2 root root 60 Nov 4 2019 raw
lrwxrwxrwx. 1 root root 4 Aug 20 08:36 rtc -> rtc0
crw-------. 1 root root 251, 0 Aug 20 08:36 rtc0
brw-rw----. 1 root disk 8, 0 Aug 20 08:36 sda
brw-rw----. 1 root disk 8, 1 Aug 20 08:36 sda1
brw-rw----. 1 root disk 8, 2 Aug 20 08:36 sda2
brw-rw----. 1 root disk 8, 16 Aug 20 08:36 sdb
brw-rw----. 1 root disk 8, 17 Aug 20 08:36 sdb1
crw-rw----. 1 root cdrom 21, 0 Aug 20 08:36 sg0
Dispositivi a blocchi
I dispositivi a blocchi consentono l'accesso casuale ai dati, cercano supporti per i dati e in genere eseguono il buffer dei dati durante la scrittura o la lettura. Esempi di dispositivi a blocchi includono dischi rigidi, unità CD-ROM, memoria flash e altri dispositivi di memoria indirizzabile.
Dispositivi a caratteri
I dispositivi a caratteri consentono lo streaming di dati da o verso un dispositivo. I dati non vengono in genere memorizzati nel buffer né viene concesso un accesso casuale ai dati su un dispositivo. Il kernel scrive o legge i dati da un dispositivo a caratteri di 1 byte alla volta. Esempi di dispositivi a caratteri includono tastiere, mouse, terminali, pseudo-terminali e unità nastro. tty0 e tty1 sono file di dispositivi a caratteri corrispondenti ai dispositivi di terminale in modo che gli utenti possano eseguire il login da terminali seriali o emulatori di terminali.
Dispositivi a caratteri pseudo-terminali
I dispositivi secondari pseudo-terminali emulano dispositivi terminali reali in modo che possano interagire con il software. Ad esempio, un utente potrebbe eseguire il login a un dispositivo terminale come /dev/tty1, che quindi utilizza il dispositivo primario pseudo-terminale, /dev/pts/ptmx, per interagire con un dispositivo pseudo-terminale sottostante. I file dei dispositivi a caratteri per i dispositivi secondari e primari pseudo-terminali si trovano nella directory /dev/pts, come mostrato nell'esempio seguente:
ls -l /dev/pts
total 0
crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2
c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
Alcune voci del dispositivo, ad esempio stdin per l'input standard, sono simbolicamente collegate tramite la sottodirectory self del file system proc. Il file del dispositivo pseudo-terminale a cui puntano dipende dal contesto del processo.
ls -l /proc/self/fd/[012]
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/2 -> /dev/pts/0
dispositivi a caratteri nulli, casuali, urandom e zero
I dispositivi di caratteri, come null, random, urandom e zero, sono esempi di pseudo dispositivi che forniscono accesso alle funzionalità virtuali implementate nel software anziché all'hardware fisico.
/dev/null è un data sink. I dati scritti in /dev/null scompaiono ma l'operazione di scrittura riesce. La lettura da /dev/null restituisce EOF (end-of-file).
/dev/zero è un'origine dati con un numero illimitato di byte a 0 valori.
/dev/random e /dev/urandom sono origini dati di flussi di byte pseudo-casuali. Per mantenere l'output ad alta entropia, /dev/random blocca se il suo pool di entropia non contiene bit di rumore sufficienti. /dev/urandom non blocca e, quindi, l'entropia della sua uscita potrebbe non essere così costantemente elevata come quella di /dev/random. Tuttavia, né /dev/random né /dev/urandom sono considerati abbastanza casuali ai fini della crittografia sicura come la crittografia di livello militare.
È possibile scoprire le dimensioni del pool di entropia e il valore di entropia per /dev/random da file virtuali in /proc/sys/kernel/random:
cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467
Per ulteriori informazioni, vedere le pagine del manuale null(4), pts(4) e random(4).