Problem ze skompilowaniem OS'a.

Odpowiedz Nowy wątek
2008-12-21 00:10
Maartin
0

Witam, znalazłem artykuł, w którym napisane jest jak napisać prosty system operacyjny, wyświetlający napis "Hello World". Chcąc sprawdzić czy to w ogóle działa ściągnąłem pliki do skompilowania. Jako iż używam Ubuntu w terminal wpisałem:

nasm start.asm -f coff -o start.o gcc kernel.c -O2 -fomit-frame-pointer -c -o kernel.o ld -Tkernel.ld -o kernel.bin start.o kernel.o

I wyskoczyły błędy:

nasm: error: more than one input file specified
nasm: error: more than one input file specified
nasm: fatal: unrecognised output format `omit-frame-pointer' - use -hf for a list
type `nasm -h' for help

Czy ktoś wie co mam zrobić by to poprawnie skompilować?
Link do tego artykułu:
http://binboy.sphere.pl/index.php?show=43

Pozostało 580 znaków

2008-12-21 00:22
0

Boże, człowieku... poznaj podstawy i czytaj ze zrozumieniem. Masz trzy oddzielne polecenia, a Ty je odpalasz jako jedno. Komunikat błędu też jest czytelny. We wspomnianym tekście masz podane przecież:

nasm start.asm -f coff -o start.o
gcc kernel.c -O2 -fomit-frame-pointer -c -o kernel.o
ld -Tkernel.ld -o kernel.bin start.o kernel.o

Najpierw wykonujesz jedno, potem drugie, na końcu trzecie...

...a sprawdzać nie musisz, działa.


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2008-12-21 14:19
Maartin
0

Tutaj log z terminala z kompilowania... Znowu nic...

[email protected]:~/Desktop/doc1_files$ nasm start.asm -f coff -o start.o gcc kernel.c
nasm: error: more than one input file specified
nasm: error: more than one input file specified
type nasm -h' for help [email protected]:~/Desktop/doc1_files$ nasm start.asm -f coff -o start.o [email protected]:~/Desktop/doc1_files$ gcc kernel.c -O2 -fomit-frame-pointer -c -o kernel.o kernel.c:3: ostrzeżenie: conflicting types for built-in functionputc,
kernel.c:9: ostrzeżenie: conflicting types for built-in function `puts,
kernel.c:17:3: warning: no newline at end of file
[email protected]:~/Desktop/doc1_files$ ld -Tkernel.ld -o kernel.bin start.o kernel.o
start.o: file not recognized: File format not recognized
[email protected]:~/Desktop/doc1_files$

Pozostało 580 znaków

2008-12-21 15:02
0

haha koles Ty jestes jakis opozniony czy co :-D [glowa]

1) nasm
2) gcc
3) ld

to sa nazwy polecen!

te bledy putc i puts to chyba z tego ze gcc domyslnie kompiluje z libc


Pozostało 580 znaków

2008-12-21 15:28
0

@cepa, wybacz ale sam jesteś opóźniony chyba, przeczytaj jeszcze raz drugi post. W C funkcje standardowe są widoczne i bez nagłówków dlatego kompilator ostrzega, że deklarowana jest funkcja o innym prototypie od znanego, nikt o libc nie mówi, przecież tam jest generowany tylko ELF, bez linkowania!

@topic, Pelczar faktycznie zawalił - ld na Linuksie nie łyka czystego COFF-a domyślnie z tego co widzę, druga sprawa to to, że autor zapomniał o różnicy w generowaniu symboli przez gcc na Windowsie i Linuksie - prefix '_'. Jeszcze inna, że w paczce jeden plik nazywa się inaczej. Czyli do zrobienia:

  • zmienić nazwę funkcji\skompilować z generowaniem '_' plik .c
  • zmienić nazwę pliku na zgodną z tą z kursu
  • skompilować plik .asm do ELF-a zamiast COFF-a
  • tyle.

Logi z mojego Debiana:

[email protected]:~$ wget -q binboy.sphere.pl/down.php?idmk=34 -O os.zip
[email protected]:~$ unzip os.zip
Archive:  os.zip
   creating: doc1_files/
  inflating: doc1_files/kernel.ld
  inflating: doc1_files/main.c
  inflating: doc1_files/start.asm
[email protected]:~$ mv doc1_files/ os
[email protected]:~$ cd os/
[email protected]:~/os$ sed -e 's/\(start_kernel\)/_\1/' main.c > kernel.c
[email protected]:~/os$ nasm start.asm -f elf -o start.o
[email protected]:~/os$ ld -Tkernel.ld -o kernel.bin start.o kernel.o
[email protected]:~/os$ ls -lh kernel.o
-rw-r--r-- 1 baiji baiji 1,1K 2008-12-21 15:12 kernel.o

Nom, skompilowało się tak jak powinno. W sumie Pelczar jeszcze trochę drobnych błędów popełnił i napisał kilka głupot ale...

Tak na przyszłość - proponuję zapoznać się z podstawami żeby uniknąć takich problemów.

@piętro niżej, tak błąd... czytanie ze zrozumieniem się kłania.


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2008-12-21 15:33
0
deus napisał(a)

@cepa, wybacz ale sam jesteś opóźniony chyba, przeczytaj jeszcze raz drugi post. W C funkcje standardowe są widoczne i bez nagłówków dlatego kompilator ostrzega, że deklarowana jest funkcja o innym prototypie od znanego, nikt o libc nie mówi, przecież tam jest generowany tylko ELF, bez linkowania!

moj blad :P


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0