Wie kommuniziert Linux mit der Hardware rund um den Prozessor?

Wie kommuniziert Linux mit der Hardware rund um den Prozessor?

Meine Frage bezieht sich eher auf die Unix/Linux-Entwicklung als auf die Administration selbst.

Ich denke, es richtet sich eher an Unix/Linux-Low-Level-Systemprogrammierer als an Administratoren. Es wird mir helfen, mit der Kernel-Entwicklung zu beginnen und/oder die Linux-Systementwicklung zu verstehen.

Welche spezifischen Hardwareinformationen benötige ich, um zu lernen, wie Linux mit Hardware-Peripheriegeräten und -Modulen interagiert? Beispielsweise die Busarchitektur und die Kommunikation mit Controllern.

Außerdem möchte ich erwähnen, dass Linux in den meisten Umgebungen heutzutage auf der virtuellen Maschine läuft. Ich meinte also, was das darunterliegende Betriebssystem sieht.

Ich brauche bitte einige Referenzen oder Informationen dazu, wie ich damit anfangen kann, mich darüber zu informieren.

Ich kenne die grundlegenden x86-Anweisungen, aber meine Fragen beziehen sich eher auf die Speicher- und Bus-Controller rund um den Prozessor selbst; ich meine das Programmiermodell in der modernen parallelen Programmierumgebung.

Antwort1

Wie das funktioniert, hängt stark von der Architektur/Maschine ab. Linux (der Kernel) erstellt beim Booten einen Baum, der die verfügbaren Geräte und ihre Verbindungen abbildet (und wenn angeschlossene Geräte erscheinen/verschwinden). Woher die Informationen stammen, hängt von der zugrunde liegenden Hardware ab.

Andere Betriebssysteme, die auf derselben Maschine laufen, haben ihre eigene Art, dies zu tun. Wenn sie sehr portabel sein sollen, verwenden sie wahrscheinlich einen ähnlichen Ansatz.

Wenn Sie beispielsweise mit einem Original-PC (oder einer Emulation) herumspielen, haben Sie Zugriff auf eine Reihe vonFestGeräte, auf die in einigenFest(oder fast) so. Einige Unix-Systeme, die ich betreuen durfte, wurden mit Objektcode für das System ausgeliefert. Um Geräte hinzuzufügen/neu zu konfigurieren, musste ich einige C-Dateien bearbeiten und den Kernel neu kompilieren und verknüpfen. Ein Riesenspaß.

Antwort2

Besorgen Sie sich so etwas wie eine Z80-Prototyping-Platine und versuchen Sie, Sachen über den seriellen Port zu bitbangen, oder lassen Sie einen emulierten IBM-PC mit DOS laufen und machen Sie dieselben Sachen mit DOS-IRQ.

Auf den alten Z80-Maschinen mit speicherzugeordneter Textanzeige ist es einfach, zumindest Text anzuzeigen.

Es ist möglich (einfach oder etwas schwieriger oder unpraktisch), solche Dinge mit Assembler, Pascal, Ada, C (warum sollten Sie hierfür C++ verwenden), BASIC und einer ganzen Reihe anderer Sprachen zu tun. Erwarten Sie eine MENGE ARBEIT!

Wenn Sie einen eher modernen Prozessor suchen, der eine beträchtliche Speichermenge unterstützen kann, sehen Sie sich den MIPS2000 und seine Gegenstücke an (großer Speicherplatz, der problemlos direkten Zugriff auf 512 MB RAM ermöglicht), wenn Sie in C/Assembler/Ada (ich glaube auch Pascal) programmieren möchten. Ich sage das, weil diese Prozessorfamilie eine ziemlich einfache Speicherarchitektur hat.

Schauen Sie sich die Quellen für Grub an!

Wenn Sie wissen möchten, wie Sie beim Booten ein Programm (Bootloader) laden, oder sich die Grub-Spiele wie Space Invaders ansehen möchten (ein Klon von Space Invaders, der auf dem Bare Metal läuft).

Sie können Grub-Invaders in einer virtuellen Maschine bootensiehe Grub-Invaders

verwandte Informationen