Systemnahe operierung
-
Ich hab meinen voherigen Post editiert. Lies ihn mal durch.
Ob du 32- oder- 16 oder 8-bit Register hast, musst du selber wissen und dementsprechen den Code anpassend. Mein Code sagt nicht anders als:
die nächsten Vier Bytes beginnend auf Adresse 0xdeadbeef gehören zusammen. Über some_reg kann man dann auf diese 4 bytes zugreifen. Ob du es darfst oder nicht, ist wie gesagt, eine andere Frage.
Ich verstehe nicht, was du mit Funktionaufruf meinst. Klar ist es nur eine Variable. Wenn eine Funktion den Wert eines Registers lesen soll, dann übergibst du der Fkt entweder den Wert oder die Adresse des Registers.
Was passiert wenn ich was auf eine Adresse schreiben will oder eine reservieren will die aber gar nicht exiztiert?
Das wahrscheinlichste ist, dass du eine Exception bekommst der Art "data abort exception" (im Falle der ARM Architektur). Das ist aber Architektur-abhängig und steht in deinem Handbuch.
-
OK. Und mit welchem Compiler compiliert man das dann? Oder muss man immer einen spezielen Compiler nehmen, der auf den CPU des Zielsystem gerichtet ist?
-
Mit einem C Compiler.
Ich schlage vor, du kaufst dir ein Buch über Betriebssysteme bzw. Hardwarearchitektur. Ohne dieses Wissen, wirst du nichts auf die Reihe kriegen. Einen Systemkern vom scratch zu schreiben ist nicht einfach und erfordert, dass du weißt, was du tust, was offensichtlich bei dir nicht der Fall ist.
Kauf dir ein Gumstix Board. Sie sind billig, klein, leistungsfähig und verwenden die wunderschöne ARM-Architektur.
Diese Buch
ARM System Developer's Guide | ISBN: 1558608745
ist super gut, da man nicht nur mehr über die ARM-Arch erfährt sondern auch über genau diese Dinge, die du wissen und machen willst. Leider ist das Buch etwas teuer aber es lohnt sich auf jeden Fall.
-
supertux schrieb:
Mit einem C Compiler.
Ich schlage vor, du kaufst dir ein Buch über Betriebssysteme bzw. Hardwarearchitektur. Ohne dieses Wissen, wirst du nichts auf die Reihe kriegen. Einen Systemkern vom scratch zu schreiben ist nicht einfach und erfordert, dass du weißt, was du tust, was offensichtlich bei dir nicht der Fall ist.
Kauf dir ein Gumstix Board. Sie sind billig, klein, leistungsfähig und verwenden die wunderschöne ARM-Architektur.
Diese Buch
ARM System Developer's Guide | ISBN: 1558608745
ist super gut, da man nicht nur mehr über die ARM-Arch erfährt sondern auch über genau diese Dinge, die du wissen und machen willst. Leider ist das Buch etwas teuer aber es lohnt sich auf jeden Fall.Momentmal! Es gibt doch verschiedenste Arten von CPUs! Wie kann es da sein, dass ein C Compiler den Code einfach für irgend einen CPU in passenden Maschienencode wandeln kann? Bevor ich was kaufe muss ich das schon genau wissen!!!
-
Weil es für jede Architektur einen C Compiler gibt. [1]
Es gibt C Compiler für x86, arm, powerpc, sparc, usw. Du musst, wenn du einen Kern schreibst, am wahrscheinlichsten einen Cross-Compiler verwenden.
Ich verwende den GNU-GCC und musste mir den arm-xscale-linux-gnu-gcc bauen, um auf einem Linux-x86 Code für den intel-xscale Prozessor bauen zu können.
[1] wahrscheinlich gibt es Exoten für die es keinen C Compiler gibt.
-
supertux schrieb:
Weil es für jede Architektur einen C Compiler gibt. [1]
Es gibt C Compiler für x86, arm, powerpc, sparc, usw. Du musst, wenn du einen Kern schreibst, am wahrscheinlichsten einen Cross-Compiler verwenden.
Ich verwende den GNU-GCC und musste mir den arm-xscale-linux-gnu-gcc bauen, um auf einem Linux-x86 Code für den intel-xscale Prozessor bauen zu können.
[1] wahrscheinlich gibt es Exoten für die es keinen C Compiler gibt.
Weil es für jede Architektur eine C Compiler Version gibt meintest Du?
Gibt es eine C Compiler Version die Intel und AMD CPUs von PCs unterstützt? Also Sockel 775, AM1, AM2 usw. Eine gewisse Kompilibität muss ich ja schon haben. Zumindest die Boot Datei. Dann könnte ja die Boot Datei die entsprechende Version meines Programms, was passend für den CPU ist, laden. Wie ist das eigentlich mit der Boot Datei bei den C Compilern? Auch selber schreiben und ist das eine extra Datei, die dann nur eine Spiegelung von den Bootsektoren ist?
-
was hat der Sockel mit der internen Architektur zu tun? Die von dir genannten CPUs gehören zur x86 Familie und jeder Compiler, der x86 Code produziert, produziert auch ausführbaren Code für diese CPUs.
Mit CPU meine ich nicht ein bestimmtes Model sondern die darunter liegende Architektur.
Und die heuten Compiler können auch die Besonderheiten der diversen CPU-Typen berücksichtigen, auch wenn sie die selbe Architektur besitzen. Beim GNU GCC gibt es z.b. die -mcpu, -march, usw. Optionen.
Deshalb sag ich dir, besorg die ein Buch über Hardwarearchitektur, du scheint viele Wissenslücken im Bereich zu haben.
-
supertux schrieb:
was hat der Sockel mit der internen Architektur zu tun? Die von dir genannten CPUs gehören zur x86 Familie und jeder Compiler, der x86 Code produziert, produziert auch ausführbaren Code für diese CPUs.
Mit CPU meine ich nicht ein bestimmtes Model sondern die darunter liegende Architektur.
Und die heuten Compiler können auch die Besonderheiten der diversen CPU-Typen berücksichtigen, auch wenn sie die selbe Architektur besitzen. Beim GNU GCC gibt es z.b. die -mcpu, -march, usw. Optionen.
Deshalb sag ich dir, besorg die ein Buch über Hardwarearchitektur, du scheint viele Wissenslücken im Bereich zu haben.
Naja ich glaube ich weiß jetzt was ich wissen muss für mein vorhaben. zumindest was ich mir an Informationen holen muss. Die ganze boot und IO geschichte habe ich schon gelernt. Geht dann wohl nur wieder um das nerfige, wie man das bootfile in die bootsektoren schreibt. Aber werde das sehr wahrscheinlich so machen, das ich es auf ein Floppy Image schreibe und dieses dann von einer Box starten lasse. Darüber hinaus muss ich aber dann wohl doch auch mit C überhaupt ersteinmal den bootcode schreiben um überhaupt mit C die Adressanfragen machen zu können.
Denke ich werde da bei openbook findig. Kann ich eigentlich Eclipse dafür nehmen?
-
Imperator schrieb:
Kann ich eigentlich Eclipse dafür nehmen?
was hat die IDE/Text-Editor damit zu tun? Nimm ein Program, mit dem du Code schreiben kannst.
-
supertux schrieb:
Imperator schrieb:
Kann ich eigentlich Eclipse dafür nehmen?
was hat die IDE/Text-Editor damit zu tun? Nimm ein Program, mit dem du Code schreiben kannst.
Naja Eclipse bietet ja Syntaxhervorhebung an und ist ja dann C. Und compiliert werden muss es dann auch mit einem Compiler. Und das ist ja sinn der sache der IDE. Codden und dann per ein-klick compilieren. Muss halt wohl wahrscheinlich den Compiler als externe angeben.