Perché / dev e / proc / devices hanno output totalmente diversi in Linux


2

Per quanto ne so:

  • Un driver può essere correlato a uno o più "dispositivi".

  • I file in / dev rappresentano questi dispositivi. Il driver ha un numero maggiore e ogni dispositivo ha anche un numero minore, quindi (maggiore, minore) identifica un dispositivo.

  • / proc / devices elenca anche i dispositivi.

Se quello che so è vero, allora:

Perché / dev e / proc / devices hanno output totalmente diversi? In dev c'è il nome del dispositivo, il numero maggiore e il numero minore. E in / proc / devices c'è il numero maggiore e il nome del dispositivo ma non il numero minore. Perché questi due elenchi mostrano output totalmente diversi anche per lo stesso numero maggiore?

Ad esempio, guarda questa riga in ls -l / dev

crw------- 1 root root     10, 235 Sep 19 21:40 autofs

È un dispositivo a caratteri con il numero maggiore 10 e il numero minore 235. Il nome del dispositivo è autofs.

Ora controllo la voce con lo stesso numero maggiore in / proc / devices:

10 misc

Come vedi il nome del dispositivo è totalmente diverso e non esiste un numero minore (come questo identifica il dispositivo solo per un numero maggiore?).

Sembra che un po 'di terminologia sia mista ma non sono riuscito a risolverlo.


Non mi è particolarmente familiare /proc/devices, ma sembra che abbia solo un nome povero: dovrebbe essere chiamato /proc/drivers, perché, come sembra aver capito, sembra avere solo una riga per numero di dispositivo principale (con alcune eccezioni). Non so perché autofssia classificato come misc, ma sospetto che tu stia esagerando quando dici " /deve /proc/deviceshai output totalmente diversi". Non vedi corrispondenze per cose come ttye sd? E suggerimento: una volta c'era un dispositivo Unix chiamato /dev/mem, che non esiste più, ma /dev/nullè collegato ad esso.
G-Man,

Se sono davvero nomi di moduli, perché l'output è diverso da lsmod allora?
Yilmaz Uzeyr,

Risposte:


0

I moduli del kernel ("driver", se vuoi) possono registrare dispositivi a blocchi o di caratteri (nel senso unix tradizionale, "dispositivo" è una parola con molti significati) nel kernel, usando una routine come register_blkdevinsieme a una stringa che dovrebbe identificare il dispositivo. È possibile utilizzare qualsiasi stringa a tale scopo e queste stringhe vengono visualizzate nel /proc/devicesfile (che è solo una rappresentazione testuale di questa tabella del kernel).

D'altra parte, nei moderni sistemi Linux, i file /devvengono creati udevseguendo una serie di regole complicate. Questi file dovrebbero rappresentare modi in cui lo spazio utente può interagire con il kernel, tramite read, write e ioctls, il che funziona perché sono file "speciali" con un numero di dispositivo maggiore e minore, quindi gli accessi a questi file vengono tradotti in chiamate del kernel (in parole povere).

Quei due e la loro struttura sono totalmente indipendenti. L'unica connessione è che il maggior numero di dispositivo di un file così speciale viene cercato ogni volta che si accede a tale file e viene utilizzato per trovare il modulo che lo ha registrato. La stringa con cui è stata registrata è totalmente irrilevante. Anche il nome con cui appare un file è totalmente irrilevante, a condizione che l'utente conosca il nome. Nulla ti impedisce di chiamare i tuoi dischi /dev/this-diske /dev/that-diskinvece di /dev/sdae /dev/sdbse senti l'impulso di farlo e di cambiare le udevregole.

Ma ovviamente alla gente piace rendere le cose semplici, motivo per cui le stringhe utilizzate per registrare i dispositivi sono spesso uguali o almeno simili ai nomi predefiniti in cui vengono visualizzati /dev. Ma questa è l'unica connessione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.