Autor Thema: LLC unter Linux  (Gelesen 3614 mal)

Beatkiller

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« am: 22. May 2004, 21:23 »
Das Low-Level-Coding unter Linux wird sich wohl am besten anbieten, da man hier alles notwendige schon hat, Compiler, Linker, Assembler...

Allerdings, und das ist mir aufgefallen, gehen die Tutorial-Schreiber nicht allzusehr darauf ein. Oder ist das Motto: "Wieso Linux? Da hat man doch nen Kernel zum abgucken..."? Wenn ich nen Blick auf den Source werfe, bin ich hoffnungslos überfordert. Ich will gerade damit anfangen ;-)

Ok, also der GNU CC macht KEINE wie von Teejay geschriebenen Underscores ("_") vor die Funktionen nach dem Compilen. Darum funktioniert das Linken auch per link.txt aus dem C-Tutorial nicht sondern bricht mit "undefined reference to _main" ab. Habe das ASM-File geändert:

##################
[Bits 32]
extern main
global start
global _EnableA20Gate

start:

call main

STOP:
        jmp STOP
##################

Damit geht dat!

Desweiteren ist ein kleiner Typo in der kernel.c. Wenn Du den Video-Speichern ansprechen willst, so muss das 0xB8000 statt 0xA8000 sein. Oder war das Deine Absicht? - Du kleiner Schelm ;-)

OK, zum 2. das Tutorial von Mastermesh. Vielleicht solltest Du in Teil 5 erwähnen, das wenn man einen GRUB verwendet, der den Bootsplash-vanilla-patch implementiert hat, das man das Splash-Image zum testen abschalten sollte. Ich hab 4 Stunden gebraucht, das rauszufinden.

BTW, kann man per C den GFX-Mode von GRUB nicht irgendwie abschalten? Soweit ich das weiß, sind das 640x480 bei 14 Farben (originell!!). Würde mit Assembler sicher irgendwie zu bewerkstellingen sein.

Ansonsten find ich eure Sache richtig genial! Damit bekommt man mal richtigen Kontakt mit dem OS!

Weiter so,
der Beatkiller

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 22. May 2004, 21:29 »
Naja also mit GRUB habe ich mich nie wirklich beschäftigt. Aber bei den Underscores (ich benutze selbst GCC) muss ich sagen das man da doch sehr schnell einmal draufkommt. Und das Video-Zeug funktioniert bei mir mit beiden Adressen.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #2 am: 22. May 2004, 23:40 »
Moin.

Ich benutze das DJGPP Packet. Das ja eine Portierug des GCC auf DOS ist.
Und bei diesem MUSS in das "_" vor die Funktion schreiben.

Daher ging ich davon aus, das auch beim GCC unter Linux das so sein muss.

Das mit dem Videospeicher ist beabsichtig so.

Das kommt daher, da mein Code und Datensegment erst ab der Adresse 0x10000 beginnen. Folglich muss ich von der Videospeicheradresse diesen Wert abziehen.

MIttlerweile hab ich aber dieses kleine Problem behoben, so das meine Segmente bei der Adresse 0 beginnen und der Videospeicher seine bekannte Adresse hat.

Dazu jedoch mehr im Protected Mode Tutorial, das wohl bald erscheinen wird.


PS: Ich selbst benutze kein Linux, da ich mich damit als Workstation OS nicht anfreunden konnte. Folglich sind meine Tutorials auch auf Windows bzw. DJGPP zugeschnitten, da ich nicht extra Linux noch installieren will nur um das mal eben austesten zu können. Dafür sind ja Leute wie du da, die sich solcher Fehler annehmen und deren Lösung hier posten :)
----------------------
Redakteur bei LowLevel

kleiner

  • Beiträge: 131
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 23. May 2004, 11:08 »
@Beatkiller:
Wenn Du Dich mit den Linux-Sources auseinandersetzen willst, kann ich Dir nur zu dem Buch Linux-Kernelarchitektur raten. Da werden die wichtigsten Konzepte, Strukturen und Funktionen erklärt. Der Preis ist halt themenspezifisch nicht grad niedrig.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 23. May 2004, 12:56 »
Amazon-Preis: EUR 49,90

LINUX Kernelarchitektur und Linux Kernel Development!
Zusammen für: EUR 92,67

Bei amazon.de

 

Einloggen