Como o Linux encontra / configura algo como 'wlan0' quando não é um dispositivo que aparece em / dev? [fechadas]

0

(No raspberry pi zero w, kernel 4.14y) Parece que o chip do adaptador sem fio não é um dispositivo no / dev fs, mas é o nome de algo que o 'ifconfig' conhece. Eu entendo que isso é um artefato da Berkley Sockets.

É hardware, suponho que deve ser mencionado na árvore de dispositivos - para fazer com que algum driver seja carregado, mas não deve criar uma entrada em / dev (devfs).

Onde / como os soquetes encontram esse dispositivo que não é um dispositivo?

    
por Ribo 24.11.2018 / 22:33

3 respostas

2

No Linux, as interfaces de rede não possuem um nó de dispositivo em /dev .

Se você precisar da lista de interfaces de rede utilizáveis, por exemplo, em um script, procure no diretório /sys/class/net/ ; você verá um link simbólico por interface. Cada interface de rede que possui um driver carregado será listada.

Programaticamente, você pode usar o if_nameindex() syscall: veja esta resposta no Stack Overflow.

Além disso, observe que /dev é o sistema de arquivos do dispositivo .

A árvore de dispositivos tem um significado específico diferente: é uma descrição legível por máquina da composição de hardware de um sistema. Ele é usado em sistemas que não possuem barramentos de hardware compatíveis com Plug-and-Play ou que possuem hardware que não pode ser descoberto automaticamente. Por exemplo, o Linux em SoCs ARM, como o Raspberry Pi, usa uma árvore de dispositivos.

A seqüência de inicialização de um RasPi é bastante interessante: veja esta pergunta no RasPi.SE.

Em suma, no momento da inicialização, sob o controle do arquivo /boot/start.elf , a GPU carrega os arquivos /boot/*.dtb e /boot/overlay/*.dtbo apropriados antes que a CPU principal do ARM seja iniciada. O arquivo *.dtb é a árvore de dispositivos compilada em formato binário. Ele descreve o hardware que pode ser encontrado em cada modelo RasPi específico e é produzido a partir de um arquivo fonte da árvore de dispositivos (.dts '), que é apenas texto, formatado de uma maneira específica.

A imagem ao vivo do kernel da árvore de dispositivos pode ser vista em: / sys / firmware / devicetree / base Per Ciro Santilli , pode ser exibido em formato .dts por:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

Você pode encontrar a especificação do formato de arquivo da árvore de dispositivos aqui. A especificação destina-se a ser independente do sistema operacional. Você também pode precisar da Referência de árvore de dispositivos para esclarecer alguns detalhes.

Então, a resposta à sua pergunta original é assim:

  • a API do Berkeley Sockets obtém a interface de rede do kernel
  • o kernel obtém as informações essenciais de hardware do arquivo da árvore de dispositivos
  • o arquivo da árvore de dispositivos é carregado pela GPU com /boot/start.elf de acordo com a configuração em /boot/config.txt
  • o arquivo de árvore de dispositivos foi originalmente criado de acordo com as especificações de hardware de cada modelo RasPi e compilado no formato binário apropriado.
por 24.11.2018 / 23:25
1

wlan0 é uma interface criada por interfaces, em / etc / network /. O dispositivo em si é uma construção do firmware que é carregado para a referida interface. Eu digo isso porque wlan0 não é a localização do hardware real. É uma interface construída por software, para fornecer uma maneira de o sistema operacional conversar com o hardware por meio da definição do firmware do dispositivo real. Porque você pode alterar o firmware, a fim de modificar a maneira como o hardware real se comporta, adicionar / remover funções alterar frequências e tal.

O e ifup e ifdown são basicamente os interruptores desligados HeHehe ...

Veja: link

    
por 24.11.2018 / 22:50
0

-Sim! é um dispositivo, o dispositivo de placa sem fio, como o dispositivo de rede normal eth0 , só isso aponta / refere-se ao dispositivo sem fio ...

    
por 24.11.2018 / 22:54