Ошибка в загрузчике: Помощь в сборке - PullRequest
3 голосов
/ 20 августа 2011

Я пытаюсь создать простую операционную систему, но при компиляции загрузчика выдается ошибка:

error: binary output format does not support external references

Я знаю, что означает эта ошибка, но возможно ли создавать внешние ссылки при компиляции в двоичный формат? Вот мой полный код:

;Bootloader.s
[BITS 16]     
[ORG 0x7C00]
global loader
extern kmain

loader:
call kmain
times 510-($-$$) db 0
dw 0xAA55 

И мое ядро:

/*kernel.c*/
void kmain()
{
    unsigned char *vidmem = (unsigned char *) 0xb8000;
    int i
    for(i=1;i<=11;i+=2)
    {
        vidmem[i]=0x07;
    }
    vidmem[0]='H';
    vidmem[2]='e';
    vidmem[4],vidmem[6]='l';
    vidmem[8]='o';
    videmem[10]='!';
}

Как я скомпилировал:

nasm -o '/home/myusername/Cubed OS/Bootloader.o' '/home/myusername/Cubed OS/Bootloader.s'

1 Ответ

3 голосов
/ 20 августа 2011

Вы можете иметь только внешние ссылки в форматах объектных файлов, которые являются связанными. Чистого двоичного кода нет, поэтому вы не можете сделать это напрямую.

(И вам нужно настроить стек, прежде чем вы сможете вызывать функцию C AFAIK.)

Я вижу три способа сделать это:

...