2019年7月23日 星期二

自製64位元作業系統13──核心檔案

我們的Boot Loader,準備好讀取核心了。但是我們的核心根本還沒有生出來。我們先寫一個無限迴圈的程式,加上一些奇怪的變數以測試我們的系統是否完善。

const char *str = "Hello world";
int integer;
int data = 3;

void bootEntry(void)
{
  for (;;) ;
}
然後只要我們有依照multiboot 2的規定,我們就可以利用像是GRUB 2等等的程式讀取我們的核心。所以我們需要有一個Multiboot的Header。利用組合語言,大概長這樣就可以了。
.section .multiboot_header

header_start:
.long 0xE85250D6          # Magic
.long 0                   # i386
.long header_end - header_start
.long 0x100000000 - (0xE85250d6 + 0 + (header_end - header_start)) # Checksum

.word 0
.word 0
.long 8
header_end:
然後接下來是重頭戲,我們的Link script不能像以前那麼簡單了,我們要把這一段Header,插在所有東西的前面,以符合規定。
OUTPUT_FORMAT(elf32-x86-64)
ENTRY(bootEntry)
SECTIONS {
  . = 0x100000;
  .text : 
  {
    KEEP(*(.multiboot_header))
    *(.text)
  }
  .data : {*(.data)}
  .bss : {*(.bss)}
  .rodata : {*(.rodata)}
}
要注意,現在我們都還是32位元的保護模式下,我們要利用這個當作跳板,來進入64位元模式。我們的Makefile也有許多東西,大家可以去看看。
截至目前為止的程式碼:https://github.com/TNPLR/nos/tree/0.13.5


👉【幫我們一個忙!】👈

👋如果您喜歡這篇文章,請在下方按5個Like!
 ❤您的支持是我們最大的動力!

您只要登入帳號(Facebook、Google),在下方按5個Like,我們就會收到來自LikeCoin基金會的贊助。
您只需要支持我們,完全不會花到錢!