
Até onde sei:
Um driver pode estar relacionado a um ou mais “dispositivos”.
Os arquivos em /dev representam esses dispositivos. O driver possui um número maior e cada dispositivo também possui um número menor, portanto (maior, menor) identifica um dispositivo.
/proc/devices também lista os dispositivos.
Se o que eu sei é verdade então:
Por que /dev e /proc/devices têm saídas totalmente diferentes? Em dev existe o nome do dispositivo, número maior e número menor. E em /proc/devices há um número maior e um nome de dispositivo, mas não um número menor. Por que essas duas listas mostram resultados totalmente diferentes, mesmo para o mesmo número principal?
Por exemplo, veja esta linha em ls -l /dev
crw------- 1 root root 10, 235 Sep 19 21:40 autofs
É um dispositivo de caractere com número maior 10 e número menor 235. O nome do dispositivo é autofs.
Agora verifico a entrada com o mesmo número principal em/proc/devices:
10 misc
Como você pode ver, o nome do dispositivo é totalmente diferente e não há número menor (como isso identifica o dispositivo apenas pelo número maior?).
Parece que alguma terminologia está confusa, mas não consegui resolver isso.
Responder1
Módulos do kernel ("drivers", se você preferir) podem registrar dispositivos de blocos ou caracteres (no sentido unix tradicional, "dispositivo" é uma palavra com muitos significados) no kernel, usando uma rotina como register_blkdev
junto com uma string que supostamente deve identificar o dispositivo. É possível usarqualquerstring para esse propósito, e essas strings aparecem no /proc/devices
arquivo (que é apenas uma representação textual desta tabela do kernel).
Por outro lado, em sistemas Linux modernos, os arquivos /dev
são criados udev
seguindo uma série de regras complicadas. Esses arquivos supostamente representam maneiras de o espaço do usuário interagir com o kernel, por meio de leituras, gravações e ioctls, o que funciona porque são arquivos "especiais" com um número de dispositivo maior e menor, portanto, os acessos a esses arquivos são traduzidos em chamadas do kernel (a grosso modo).
Esses dois e sua estrutura não têm nenhuma relação. A única conexão é que o número principal do dispositivo desse arquivo especial é consultado sempre que tal arquivo é acessado e usado para localizar o módulo que o registrou. A string sob a qual foi registrado é totalmente irrelevante. O nome sob o qual um arquivo aparece também é totalmente irrelevante, desde que o usuário saiba o nome. Nada impede que você chame seus discos /dev/this-disk
e, /dev/that-disk
em vez disso /dev/sda
, e /dev/sdb
se sentir vontade de fazê-lo, altere as udev
regras.
Masclaroas pessoas gostam de simplificar as coisas, e é por isso que as strings usadas para registrar dispositivos geralmente são iguais ou pelo menos semelhantes aos nomes padrão sob os quais aparecem no /dev
. Mas essa é a única conexão.