Problem ze skompilowaniem OS'a.

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

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.

0

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

martin@martin-desktop:/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 martin@martin-desktop:~/Desktop/doc1_files$ nasm start.asm -f coff -o start.o martin@martin-desktop:~/Desktop/doc1_files$ gcc kernel.c -O2 -fomit-frame-pointer -c -o kernel.o kernel.c:3: ostrzeżenie: conflicting types for built-in function putc,
kernel.c ostrzeżenie: conflicting types for built-in function `puts,
kernel.c3: warning: no newline at end of file
martin@martin-desktop:
/Desktop/doc1_files$ ld -Tkernel.ld -o kernel.bin start.o kernel.o
start.o: file not recognized: File format not recognized
martin@martin-desktop:~/Desktop/doc1_files$

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

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:

baiji@kelpie:~$ wget -q binboy.sphere.pl/down.php?idmk=34 -O os.zip
baiji@kelpie:~$ unzip os.zip
Archive:  os.zip
   creating: doc1_files/
  inflating: doc1_files/kernel.ld
  inflating: doc1_files/main.c
  inflating: doc1_files/start.asm
baiji@kelpie:~$ mv doc1_files/ os
baiji@kelpie:~$ cd os/
baiji@kelpie:~/os$ sed -e 's/\(start_kernel\)/_\1/' main.c > kernel.c
baiji@kelpie:~/os$ nasm start.asm -f elf -o start.o
baiji@kelpie:~/os$ ld -Tkernel.ld -o kernel.bin start.o kernel.o
baiji@kelpie:~/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.

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

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