2016-11-21 12 views
0

私はosカーネルを書いてみたいと思っています。そして、documentというマルチブート仕様を導入しました。単純なマルチブート2ベアメタル実行ファイルをコンパイルするには?

grubプロジェクトのmultiboot2枝に属するboot.Skernel.cmultiboot2.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)の前に貼り付けるだけです)、 ではない?それを完了するには?

答えて

1

これは簡単です。 grubを使ってマルチブート2ベアメタル実行可能ファイルを取得する方法は次のとおりです。

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

-kernelで裸の実行可能ファイルを実行してみてください、それが失敗します。

grubを含むISOを実行するとうまくいきます。

関連する問題