我写了一个内核。这是我的内核启动文件:
.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:无效或不支持的可执行格式。有什么问题?有人可以帮助我吗?
答案 0 :(得分:2)
在不知道你的链接器脚本或Makefile(请附上它们)的情况下,我们只能猜出可能出现的问题。
请检查以下内容:
我会把它作为评论而不是答案,但我还没有足够的声誉。