WinSysCompany
26.02.2011, 22:37
Hallo ich habe folgendes Problemm : MAKEFILE (http://www.lowlevel.eu/wiki/Teil_4_-_Hello_World)
Ich habe jetzt die Datein start.S
.section .text
// Init ist eine Funktion aus init.c
.extern init
#define MB_MAGIC 0x1badb002
#define MB_FLAGS 0x0
#define MB_CHECKSUM -(MB_MAGIC + MB_FLAGS)
// Der Multiboot-Header
.align 4
.int MB_MAGIC
.int MB_FLAGS
.int MB_CHECKSUM
// _start muss global sein, damit der Linker es findet und als Einsprungspunkt
// benutzen kann (alle Labels, die nicht global sind, sind nur in dieser Datei
// sichtbar)
.global _start
_start:
// Stack initialisieren
mov $kernel_stack, %esp
// C-Code aufrufen
call init
// Falls wir jemals aus init zurueckkommen sollten, gehen wir in eine
// Endlosschleife
jmp .
// 8 kB Stack fuer den Kernel. Das Label steht hinter dem freien Speicher,
// weil der Stack nach unten waechst
.section .bss
.space 8192
kernel_stack:init.c
void init(void)
{
const char hw[] = "Hello World!";
int i;
char* video = (char*) 0xb8000;
// C-Strings haben ein Nullbyte als Abschluss
for (i = 0; hw[i] != '\0'; i++) {
// Zeichen i in den Videospeicher kopieren
video[i * 2] = hw[i];
// 0x07 = Hellgrau auf Schwarz
video[i * 2 + 1] = 0x07;
}
}und makefile
SRCS = $(shell find -name '*.[cS]')
OBJS = $(addsuffix .o,$(basename $(SRCS)))
CC = gcc
LD = ld
ASFLAGS = -m32
CFLAGS = -m32 -Wall -g -fno-stack-protector -nostdinc
LDFLAGS = -melf_i386 -Ttext=0x100000
kernel: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^
%.o: %.S
$(CC) $(ASFLAGS) -c -o $@ $^
clean:
rm $(OBJS)
.PHONY: cleanin einem Ordner
Die Programme GCC und LD sind per %PATH% ( "...;C:\crosstools\i586-elf\bin" ) erreichbar
Nun öffne ich die Eingabeafforderung
und gebe folgendes ein ... :
E:
cd E:\WinSysOS\datafile
makeaber es kommt :
Datei *.[cS] nicht gefunden
ld -melf_i386 -Ttext=0x100000 -o kernel
c:\crosstools\i586-elf\bin\ld.exe: no input files
make: *** [kernel] Error 1Was mach ich falsch ???
Ich habe jetzt die Datein start.S
.section .text
// Init ist eine Funktion aus init.c
.extern init
#define MB_MAGIC 0x1badb002
#define MB_FLAGS 0x0
#define MB_CHECKSUM -(MB_MAGIC + MB_FLAGS)
// Der Multiboot-Header
.align 4
.int MB_MAGIC
.int MB_FLAGS
.int MB_CHECKSUM
// _start muss global sein, damit der Linker es findet und als Einsprungspunkt
// benutzen kann (alle Labels, die nicht global sind, sind nur in dieser Datei
// sichtbar)
.global _start
_start:
// Stack initialisieren
mov $kernel_stack, %esp
// C-Code aufrufen
call init
// Falls wir jemals aus init zurueckkommen sollten, gehen wir in eine
// Endlosschleife
jmp .
// 8 kB Stack fuer den Kernel. Das Label steht hinter dem freien Speicher,
// weil der Stack nach unten waechst
.section .bss
.space 8192
kernel_stack:init.c
void init(void)
{
const char hw[] = "Hello World!";
int i;
char* video = (char*) 0xb8000;
// C-Strings haben ein Nullbyte als Abschluss
for (i = 0; hw[i] != '\0'; i++) {
// Zeichen i in den Videospeicher kopieren
video[i * 2] = hw[i];
// 0x07 = Hellgrau auf Schwarz
video[i * 2 + 1] = 0x07;
}
}und makefile
SRCS = $(shell find -name '*.[cS]')
OBJS = $(addsuffix .o,$(basename $(SRCS)))
CC = gcc
LD = ld
ASFLAGS = -m32
CFLAGS = -m32 -Wall -g -fno-stack-protector -nostdinc
LDFLAGS = -melf_i386 -Ttext=0x100000
kernel: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^
%.o: %.S
$(CC) $(ASFLAGS) -c -o $@ $^
clean:
rm $(OBJS)
.PHONY: cleanin einem Ordner
Die Programme GCC und LD sind per %PATH% ( "...;C:\crosstools\i586-elf\bin" ) erreichbar
Nun öffne ich die Eingabeafforderung
und gebe folgendes ein ... :
E:
cd E:\WinSysOS\datafile
makeaber es kommt :
Datei *.[cS] nicht gefunden
ld -melf_i386 -Ttext=0x100000 -o kernel
c:\crosstools\i586-elf\bin\ld.exe: no input files
make: *** [kernel] Error 1Was mach ich falsch ???