私はosカーネルを書いてみたいと思っています。そして、documentというマルチブート仕様を導入しました。単純なマルチブート2ベアメタル実行ファイルをコンパイルするには?
はgrub
プロジェクトのmultiboot2
枝に属するboot.S
、kernel.c
とmultiboot2.h
をという名前の3つの例のコードファイル、あります。
まず、私は、-nostartfiles
、-nodefaultlibs
及び-ffreestanding
として(i686の-ELF-GCCを使用して)、いくつかのオプションを使用してコードをコンパイルおよびリンクしようとしたが、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
)の前に貼り付けるだけです)、 ではない?それを完了するには?