Hallo, bin ganz neu hier
.
Ich wollte mal etwas mit gcc machen & linken,
aber es geht nicht. Ich hab ein Paar Dateien :
/*
edit: Datei kernel.c
Memory Printing Example
Written 2003 by Jonas Kramer
eMail: lizer@gmx.net
*/
#define COLS 80 /* 80 Spalten */
#define ROWS 24 /* 25 Zeilen, bei 0 beginnend */
/* globaler Pointer auf den Beginn des Video Memory */
unsigned short * const pScreen = (unsigned short *) 0xB8000;
unsigned gPos = 0; /* der Cursor */
unsigned short gAttr = 0x0700; /* die Attribute */
#define GETX (gPos % COLS)
#define GETY ((gPos - GETX) / COLS)
void gotoxy(unsigned x, unsigned y);
void putchar(char);
void puts(const char *);
int main(void) {
char *msg = "Hello, world!"; /* eine Test-String */
puts(msg); /* den String ausgeben */
return 0; /* Das funktioniert nur, wenn der Kernel von GRUB geladen
wurde, ansonsten muss hier eine Endlosschleife hin */
};
void gotoxy(unsigned x, unsigned y) {
gPos = x + (y * COLS);
return;
};
void putchar(char ch) {
switch(ch) {
case '\n':
gotoxy(0,GETY + 1);
break;
case '\r':
gotoxy(0,GETY);
break;
default:
pScreen[gPos++] = (unsigned short) ch | gAttr;
break;
};
return;
};
void puts(const char *s) {
while(*s)
putchar(*(s++));
return;
};
Das wäre der Code...
Hier noch der Batch :
gcc -c -ffreestanding -nostdinc -I ./ -O3 -Wall -o kernel.o kernel.c
ld -Ttext 0x100000 --oformat elf32-i386 -O 1 -o kernel kernel.o
pause
Wenn ich den Batch aufrufe, sagt ld
"ld: PE operations on non PE file.".
Dabei ist das doch genau der Code aus Teil 5 !
Habe ich etwas vergessen