我想開始寫一個os內核,然後,我發現一個document引入multboot2規範。如何編譯一個簡單的multiboot2裸機可執行文件?
有三個例子代碼文件,命名爲boot.S
,kernel.c
和multiboot2.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
),不是嗎?如何完成它?