Como o Linux se comunica com o hardware ao redor do processador?

Como o Linux se comunica com o hardware ao redor do processador?

Minha pergunta está mais relacionada ao desenvolvimento Unix/Linux do que à administração em si.

Eu acho que é direcionado para programadores de sistema de baixo nível Unix/Linux, em vez de administradores. Isso me ajudará a iniciar o desenvolvimento do kernel e/ou entender o desenvolvimento do sistema Linux

De quais informações especificamente sobre o hardware eu preciso para começar a aprender sobre como o Linux interage com periféricos e módulos de hardware. Por exemplo, a arquitetura do barramento e como se comunicar com os controladores.

Além disso, gostaria de mencionar que na maioria dos ambientes agora o Linux é executado na máquina virtual. Então, o que é visto pelo sistema operacional abaixo é isso que eu quis dizer.

Preciso de algumas referências, por favor, ou como começar a aprender sobre isso.

Conheço instruções básicas do x86, mas minhas perguntas são mais sobre a memória e os controladores de barramento em torno do próprio processador; o modelo de programador, quero dizer, no ambiente moderno de programação paralela.

Responder1

Como isso funciona depende muito da arquitetura/máquina. O Linux (o kernel) cria uma árvore mapeando os dispositivos disponíveis e suas conexões na inicialização (e conforme os dispositivos conectados aparecem/desaparecem). A origem das informações depende do hardware subjacente.

Outros sistemas operacionais executados na mesma máquina terão sua própria maneira de fazer isso; se forem concebidos para serem muito portáteis, provavelmente usarão uma abordagem semelhante.

Brincar com, por exemplo, um PC original (ou uma emulação) dá acesso a uma série defixodispositivos, acessados ​​em algunsfixo(ou quase) caminho. Alguns Unices que tive o prazer de ouvir vieram com código objeto para o sistema, adicionar/reconfigurar dispositivos significava editar alguns arquivos C, recompilar e vincular novamente o kernel. Muita diversão.

Responder2

Compre algo como uma placa de prototipagem z80 e tente extrair coisas da porta serial ou execute um IBM PC emulado com DOS e faça a mesma coisa usando DOS IRQ.

Nas antigas máquinas Z80 com exibição de texto mapeado na memória, é fácil exibir pelo menos texto.

É possível (com facilidade ou um pouco mais difícil ou impraticável) fazer coisas assim usando: assembler, Pascal, Ada, C (por que você usaria C++ para isso), BASIC e muitas outras linguagens, espere MUITO DE TRABALHO !

Para um processador bastante moderno que pode suportar uma boa quantidade de memória, dê uma olhada no MIPS2000 e seus compatriotas (grande espaço de memória que permite facilmente acesso direto a 512 MB de RAM) se você quiser programar em C/Assembler/Ada (i pense em pascal.) Digo isso porque essa família de processadores tem uma arquitetura de memória bastante simples.

Confira as fontes do grub!

Se você estiver interessado em como carregar um programa (carregador de boot) na inicialização, ou confira os jogos grub, como space invaders (um clone de space invaders que roda em bare metal).

Você pode inicializar grub-invaders em uma máquina virtualveja invasores de larvas

informação relacionada