Módulos de kernel ("drivers", se você quiser) podem registrar dispositivos de bloco ou caractere (no sentido unix tradicional, "dispositivo" é uma palavra com muitos significados) no kernel, usando uma rotina como register_blkdev
junto com uma string que deveria identificar o dispositivo. É possível usar uma string any para essa finalidade, e essas strings aparecem no arquivo /proc/devices
(que é apenas uma representação textual desta tabela de kernel).
Por outro lado, nos sistemas Linux modernos, os arquivos em /dev
são criados por udev
seguindo várias regras complicadas. Esses arquivos supostamente representam maneiras para o espaço do usuário interagir com o kernel, através 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 (grosso modo falando).
Esses dois e sua estrutura são totalmente não relacionados. A única conexão é que o maior número de dispositivo de um arquivo especial é procurado sempre que tal arquivo é acessado e usado para encontrar o módulo que o registrou. A string sob a qual foi registrada é 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 de /dev/sda
e /dev/sdb
se você sentir vontade de fazer isso e altere as regras udev
.
Mas é claro as pessoas gostam de simplificar as coisas, e é por isso que as strings usadas para registrar dispositivos são geralmente as mesmas ou pelo menos semelhantes aos nomes padrão sob os quais elas aparecem em% código%. Mas essa é a única conexão.