2016-11-21 19 views
0

我想開始寫一個os內核,然後,我發現一個document引入multboot2規範。如何編譯一個簡單的multiboot2裸機可執行文件?

有三個例子代碼文件,命名爲boot.Skernel.cmultiboot2.h,屬於grub項目的multiboot2分支。

首先,我試圖編譯和(使用i686的小精靈 - GCC)如-nostartfiles-nodefaultlibs-ffreestanding代碼一些選項鍊接,但QEMU向我展示的格式是錯誤。

然後我找到一個名爲Makefile.am的文件,並且此文件中的編譯器選項爲-fno-builtin -nostdinc -O -g -Wall,此文件中的鏈接器選項爲-nostdlib -Wl,-N -Wl,-Ttext -Wl,80100000 -Wl,--build-id=none

所以我用上面的選項構建了內核,並且qemu開始啓動內核(qemu-system-i386 -kernel kernel)。但內核立即陷入無限循環。

因此,我克隆了項目的分支,並使用gnulib生成一些文件,並開始make但出現了一些錯誤。

我在這裏沒有顯示錯誤信息,因爲閱讀文檔,我看到我需要做的只是將boot.S轉換爲二進制文件並將其粘貼到編譯和非鏈接內核文件的前面(kernel.o ),不是嗎?如何完成它?

回答

1

這是微不足道的。下面是如何使用grub設置一個multiboot2裸機可執行文件。

https://os.phil-opp.com/multiboot-kernel/

嘗試運行裸可執行文件-kernel,它就會失敗。

嘗試運行包含ISO的ISO,它將起作用。

相關問題