Porque / dev e / proc / devices tem saídas totalmente diferentes no Linux

2

Tanto quanto eu sei:

  • Um driver pode estar relacionado a um ou mais "dispositivos".

  • Arquivos em arquivos / dev representam esses dispositivos. Motorista tem grande número e cada dispositivo também tem um número menor assim (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 há nome do dispositivo, número maior e menor. E em dispositivos / proc / 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, olhe para esta linha em ls -l / dev

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

É o dispositivo de caracteres com o número principal 10 e o número menor 235. O nome do dispositivo é autofs.

Agora eu verifico a entrada com o mesmo número principal em / proc / devices:

10 misc

Como você vê, o nome do dispositivo é totalmente diferente e não há um número menor (como isso identifica o dispositivo apenas pelo número principal?).

Parece que alguma terminologia é mista, mas não consegui resolver isso.

    
por Yilmaz Uzeyr 23.09.2017 / 19:53

1 resposta

0

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.

    
por 24.09.2017 / 09:37

Tags