Вот начал писать ОС и столкнулся с такой проблемой:
Хочу что бы ядро моей системы загружалось с помощью grub (0.97). покопался в multiboot specification и вроде все делаю правильно, но grub при загрузке ядра пишет:
Цитата:
grub> kernel /boot/kernel
[Multiboot-kludge, loadaddr=0x200000, text-and-data=0x58
Error 13: Invalid or unsupported executable format
текст ядра (fasm):
Код:
use32
org 0x00200000
STACK_SIZE equ 0x1000
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
MULTIBOOT_HEADER_FLAGS equ 0x00010003
_entry:
jmp kinit
multiboot_header:
align 4
; Сигнатура
dd MULTIBOOT_HEADER_MAGIC
; Флаги
dd MULTIBOOT_HEADER_FLAGS
; Контрольная сумма
dd -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
; header_addr
dd multiboot_header
; load_addr
dd _entry
; load_end_addr
dd 0
; bss_end_addr
dd 0
; entry_addr
dd kinit
kinit:
; Установка стека
mov esp, _stack + STACK_SIZE
; Код ядра
; Проверка сигнатуры
cmp eax, 0x2BADB002
jne halt
; Проверка доступности модулей
mov eax, [ebx] ; в eax flags
test eax, 0x08 ; flags[3] установлен?
jz halt
; Вызов функции модуля
add ebx, 24 ; ebx = *mods_addr
mov eax, [ebx] ; в eax указатель на module_struct
mov ebx, msg
mov eax, [eax] ; Укзазатель на адрес загрузки первого модуля
call eax ; вызов модуля
; Стоп
halt:
hlt
jmp halt
msg db 'Test message!', 0
_stack:
что тут не так?