0

カーネルを書きました。これが私のカーネル起動ファイルです:

.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: 無効またはサポートされていない実行形式です。何が問題なのですか? 誰か助けてくれませんか?

4

1 に答える 1