我写了一个内核。这是我的内核启动文件:
.text
.globl start
start:
jmp main
mboot:
.set ALIGN, 1<<0
.set MEMINFO, 1<<1
.set FLAGS, ALIGN | MEMINFO
.set MAGIC, 0x1BADB002
.set CHECKSUM, -(MAGIC + FLAGS)
.section multiboot
.align 4
.long MAGIC
.long FLAGS
.long CHECKSUM
main:
call kernel_main
cli
hlt
这是我的第一个 C 文件:
void print(char *message, int line,int ch){
char *vm=(char *)0xb8000;
int i=(line*80*2);
i=i+(ch*2);
while(*message!=0){
if (*message=='\n'){line++;
i=(line*80*2);}
else {vm[i]=*message;
i++;
vm[i]=0x07;
i++;} *message++;}}
基于此,我编写了第二个 C 文件:
#include "ESfunctions.c" //this is the previous C file
kernel_main(){
print("Hi!\nHow do you like my OS?",0,0);}
编辑:这是我的链接器脚本:
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
.text 0x100000 : {
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data : {
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}
编辑:我没有使用交叉编译器。我在 Ubuntu 上使用 gcc。
我编译了 C 代码并组装了汇编代码并将它们链接在一起。然后我把它变成了一个可引导的映像,并与 grub 一起将它全部刻录到了一张光盘上。grub 启动后,我输入命令“kernel KERNEL.BIN”(KERNEL.BIN 是我的内核),grub 说“错误 13:无效或不受支持的可执行格式。出了什么问题?有人可以帮我吗?