カーネルを書きました。これが私のカーネル起動ファイルです:
.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++;}}
それに基づいて、2 番目の 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: 無効またはサポートされていない実行形式です。何が問題なのですか? 誰か助けてくれませんか?