Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: clemensoft am 24. January 2005, 18:34
-
Hallo. Hat jemand von euch ein Multiboot-kompatibles Betriebssystem geschrieben? Ich hab versucht, Delta Multiboot-konform zu machen, ich kriege die GRUB-Meldung: 13: Unsupported executable format. Ich habs mit ELF, A.OUT, COFF, PE und sonstwas probiert. Müsste mit bin eigentlich gehen! Hier mal der Code von nc_init.asm:
;=======================================\
; Delta Nanocore Project |
; |
; Nanocore Main Core |
;=======================================/
%define dnc_version 'Delta Nanocore v0.0.0-14012005-deca1',dnc_arch,dnc_tag,' compiled with nasm-',__NASM_VER__ ;Nanocore version information
%define dnc_arch '-x86-32-grub'
%define dnc_tag '-epsilon15' ;Place your name here if you edited the file
;Functions in this file:
;IM, BF nanocore_entry:
;Start of Nanocore. Gets memory size and initializes the core
;IM, BF nanocore_hangup:
;Used to kill the computer by infinite loop
;IM, BF debug_print:
;Clears the first line of the screen and prints a 0-terminated String at DS:ESI
;IM, BF nanocore_getmemsize:
;BUG: This doesn't work uin VMware
;Counts the amount of memory installed in the computer
bits 32
org 0x100000
jmp nanocore_entry
;Multiboot Header
nmh_magic dd 0x1BADB002
nmh_flags dd 0x00000000
nmh_checksum dd 0xE4524FFE
nmh_header_addr dd nmh_magic
nmh_load_addr dd 0x100000
nmh_load_end_addr dd nanocore_end_kernel
nmh_bss_end_addr dd 0
entry_addr dd nanocore_entry
;Nanocore's Entry Point
nanocore_entry:
mov esp,0x200000
call nanocore_getmemsize
cmp ax,0x10
jl nanocore_entry.toolessmem ;comment this out if you build for VMWare
jmp nanocore_entry.enoughmem ;enough...
nanocore_entry.toolessmem:
mov esi, msg_memtooless
call debug_print ; And tell the user
jmp nanocore_hangup ; And hang up ;)
;Here we go:
nanocore_entry.enoughmem:
mov esi, msg_memenough
call debug_print
mov esi, msg_version
call debug_print
;call nanocore_init_mods
nanocore_hangup:
jmp nanocore_hangup
debug_print:
mov edi, 0xB8000
mov ecx, 80*2*25
xor eax, eax
rep stosb
mov edi, 0xB8000
debug_print.1:
lodsb
or al, al
jz debug_print.2
stosb
mov al, 12
stosb
jmp debug_print.1
debug_print.2:
ret
nanocore_getmemsize:
push ebp
mov ebp, esp
push edx
mov eax, 0
mov edx, 0x1EFFFC
nanocore_getmemsize.1:
inc eax
mov DWORD [edx], 0xAAAAAAAA
mov ebx, [edx]
add edx, 0x100000
cmp ebx, 0xAAAAAAAA
je nanocore_getmemsize.1
pop edx
mov esp, ebp
pop ebp
ret
nanocore_data:
msg_version db dnc_version,0
msg_memenough db 'nanocore:You have enough RAM',0
msg_memtooless db "nanocore:FATAL:You don't have enough RAM! Note: if you have more than 16 MB RAM, you are possibly running Delta Nanocore on VMWare. Either get the VMWare-compatible kernel or use Bochs as a virtual machine or use it on a real computer. If you still get this message, something is terribly wrong i.e., Nanocore doesn't fit your system.",0
nanocore_end_kernel:
-
:x :x Hört auf, meinen Thread nach hinten zu rücken!!! :x :x
-
lol
also es muss afaik das elf format sein. allerdings produziert nasm irgendwie eine elf-datei, die so noch nicht geht. (irgendwelche symbole sind nicht aufgelöst oder so.) auf jeden musst du das mit ld nochmal linken. wenn ich mal eine schätzung abgeben soll würde das so gehen: ld -Ttext=0x100000 --oformat=elf -o kernel.elf nc_init.o
nc_init.o ist das was nasm beim assemblieren ausgespuckt hat und kernel.elf soll dein fertiger kernel sein. vielleicht musst du dann das org 0x100000 in der asm-datei entfernen.
frei nach: http://www.openbg.net/sto/os/xml/grub.html#multiboot
-
Ich habs mit ld-elf probiert, oformat=elf32-i386 Ttext=100000 und so weiter, dann noch mit a.out und objdump aber nichts hat wirklich funktioniert. Der Fehler war immer der selbe (#13)
-
HILFÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ!
:( :( :( :( :( :( :( :( :( :( :( :( :( :( :( :( :(
:x :x :x :x :x :x :x :x :x :x :x :x :x :x :x :x
-
Auf www.buha.info/projects/midgard findest du das OS an dem ich grad arbeite. Wird problemlos von GRUB gebootet. Interessant sind für die die Dateien init.c und entry.s sowie das Makefile, in dem die Compile- und Link-Anweisungen stehen.
Have fun!
Lizer
-
Die Datei mit der doppelten tar-endung lässt sich nicht mit tar extrahieren. Auch nicht nach Entfernen der zweiten Endung. Packs doch mal als gzip oder so, wär dir echt dankbar :D
-
Das Format ist tar.bz2 (sieht man auch in der Status-Leiste wenn der Cursor über'm Link ist). Windows vermurkst grundsätzlich alle doppelten Dateiendungen, also einfach in midgard.tar.bz2 umbenennen, falls die Datei nach dem Download nicht so heißt.
-
Und wieder einaml kann man Bill Gates beschuldigen... Das macht Spaß....