C Tutorial - Kompellierfehler - Betriebsystem schreieben

Lizard King

Mitglied
Hey
Meine Frage bezieht sich auf das Tutorial, in dem es um ein eigenes OS in C geht.

KLICK

So ich hab nun alle komponente so gespeichert wie sie da sind und wollte mit Linken/kompellieren anfangen und erhalte DAS :

cjohnny@Lizard:~$ cd Desktop
johnny@Lizard:~/Desktop$ as -32 -o header.o header.S
header.S: Assembler messages:
header.S:0: Warning: end of file not at end of a line; newline inserted
header.S:29: Error: bad expression
header.S:29: Warning: division by zero
header.S:29: Error: junk at end of line, first unrecognized character is `M'
header.S:30: Error: bad expression
header.S:30: Warning: division by zero
header.S:30: Error: junk at end of line, first unrecognized character is `F'
header.S:31: Error: bad expression
header.S:31: Warning: division by zero
header.S:31: Error: junk at end of line, first unrecognized character is `P'

Ich sollte dazu sagen, dass ich wenig Erfahrung in C habe. weil ich erst vor ein paar Wochen von VB auf C gewechselt habe ...

Info :

gcc-Version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)

wär euch dankbar wenn ihr mir das mal erklären könntet, was da schief läuft ^^

MfG Lizard King
 
swchreib dem verfasser diese sehr guten tuts mal ne PM,
auf dass er dier helfe und das tut verbessere :P
Skini
 
Hmmm durch was hast du das durchlaufen lassen?
Und zeig einmal die ersten zwei bis drei fehlerzeilen
 
Aufgepassst, mir ist grad was schräges aufgefallen :

Wie die error message sagt :

header.S:29: Error: bad expression
header.S:29: Warning: division by zero
header.S:29: Error: junk at end of line, first unrecognized character is `M'
header.S:30: Error: bad expression
header.S:30: Warning: division by zero
header.S:30: Error: junk at end of line, first unrecognized character is `F'
header.S:31: Error: bad expression
header.S:31: Warning: division by zero
header.S:31: Error: junk at end of line, first unrecognized character is `P'

jetzt habe ich mir den code angegukt.... und was war an der stelle ? ein Kommentar jedoch, war es richtig gemacht ... also mit //

siehe hier :

Code:
    .int 0x1BADB002     // Magic Number
    .int 0x0            // Flags
    .int (-0x1BADB002)  // Pruefsumme

und um die drei kommentare gehts wohl, ich hab sie mal gelöscht, und es erneut versucht : und jetzt kommt nurnoch eine Warnung

header.S:0: Warning: end of file not at end of a line; newline inserte

Ich denke mal ich habe ja eigentlich nichts verändert, indem ich die kommentare gelöscht habe ....

aber wie kann es sein, das er wegen den 3 kommentaren errort.... bei den anderen tut er es schließlich nicht.

Aber schon danke für die hilfe bisher =)

// Also da ich das Problem ja jetzt beseitigt habe, konnte ich zumindest schonmal alles linken / compilen / assembeliern. Wenn auch mit ein paar warnungen ^^
Jez muss ich den fertigen kernel nurnoch ins boot verzeichniss bekommen :( aber das ist geschützt und ich weiß den konsolen befehl für kopieren und einfügen net. naja

kann mir zwar net erklären, warum das wegen den Kommentaren nicht lief aber jez passts ja =) gelöst

MfG Lizard King
 
Zuletzt bearbeitet:
Also ich hab den code nicht gesehen aber ich vermute einmal schwer
dass der besagte teil Assembler ist :-)
da beginnt ein Kommentar nicht mit // sondern mit ;

DIe Warnung verlangt, wie gesagt, eine Leerzeile am Ende des Source.
Gruß
 
ja, da hast du schon Recht ^^
aber wie du hier erkennen kannst, sind da noch andere "kommentare" die nicht Problematisch sind.

Code:
.code32
.section .text
.globl start
start:
    // Adresse des Speicherbereichs, der fuer den Stack reserviert wird weiter
    // unten, in das Stack-Pointer Register laden. Wichtig ist hier zu wissen,
    // dass der Stack nach unten waechst, also von hoehen Adressen zu den Tiefen.
    // Deshalb steht das Label fuer den Stack auch hinter dem reservierten
    // Bereich unten.
    lea stack, %esp

    // Startfunktion des C-Kernels aufrufen. Diese liegt in einer anderen
    // Objektdatei und wird deshalb als extern deklariert, damit das
    // Assemblieren trotzdem klappt.
    .extern kernel
    call kernel

    // Wenn die Kernel-Routine verlassen wird, muss der Prozessor angehalten
    // werden, sonst rennt er hier einfach weiter ins Nirvana. ;-)
    cli
    hlt


// Der Multiboot-Header sorgt dafuer, dass grub den Kernel erkennt
// Dieser Header muss auf 4 Bytes ausgerichtet werden
// Mehr dazu: http://www.gnu.org/software/grub/manual/multiboot/ 
.align 4
multiboot_header:
    .int 0x1BADB002     // Magic Number
    .int 0x0            // Flags
    .int (-0x1BADB002)  // Pruefsumme

// Einen uninitialisierten Speicherbereich fuer den Stack reservieren.
// Diese 64 Kilobyte duerften fuer eine Weile reichen. ;-)
.section .bss
.space 0x10000
stack:


es handelt sich komischer weise nur um die 3 ^^.

Aber glücklicherweise geht es ja jetzt =)

MfG Lizard King
 
Alle anderen Kommentare sind aber allein in der Zeile. Nur die drei stehen hinter einer Anweisung. Ich schätz, der Assembler interpretiert das als "geteilt".
 
Zurück