みなさん、こんにちは。このチュートリアルは、64ビットX86_64アーキテクチャに焦点を当てた既存のチュートリアルで更新された拡張を目的としています。 Cやアセンブリの紹介を意図したものではないため、最初に他の場所で学びたいと思うかもしれません。私たちはすべてを適切に文書化するために最善を尽くしたので、あなたが理解していないことがあるなら、あなたはいくつかの章に戻る必要があるかもしれません。
まだ完全ではありませんが、役立つと感じたところに到達しました。
このチュートリアルは、Cとアセンブリについて一般的に理解しているが、必ずしもコンピューターの専門家ではない人々を対象としています。それは可能な限りアクセス可能になるように設計されているため、いくつかの概念を過剰に説明しているように感じるかもしれません(そしてそれは大丈夫です)。ただし、絶望的に紛失したことに気付いた場合は、お知らせください。 OS開発で見られるゲートキーピングが気に入らなかったため、このプロジェクトを作成しました。説明を修正したり、より役立つ別のリソースをお願いします。
このプロジェクトに貢献したい場合、または自分のものを追加したい場合は、プルリクエストを送信してください。できるだけ早くそれらに到達しようとします:)
このチュートリアルでは、 clangやld.lldを含むLLVMコンパイラスイートを使用しています。それらをインストールしていない場合は、そうする必要があります。また、アセンブラーにnasmを使用し、 qemu-system-x86_64エミュレータとして使用します。オプションで、 gdbを使用してカーネルコードをデバッグできます。必要ありませんが、このチュートリアルではシェルスクリプトを使用して、建物とデバッグを簡単にします。 /bin/bash bashインストールすることを強くお勧めします(または少なくともそこにシュリンクされています)。そうでない場合は、 bashコマンドを使用してスクリプトを実行できます。
フルパスを指定せずに、上記のすべてのコマンドを端末ウィンドウで実行できるはずです。できない場合は、おそらくそれらをインストールしてパスに追加する必要があります。このチュートリアルは、Ubuntu(20.04)だけでなく、MacOS(Catalina and Big Sur)でテストされています。他のオペレーティングシステムは正式にサポートされていませんが、ほとんどの *nixマシンでは正常に実行されるはずです。
注:MacOS
gdb、カーネル(ELF64)のデバッグ記号で困難です。デバッグ出力レベルをメイクファイルの-GlldBに変更して、代わりに使用するか、ソースから新しいgdbを構築する必要がある場合があります。
それでおしまい! Clangにはすでにカバーされているため、CrossCompilerやその他のツールをインストールする必要はありません。幸運を祈ります。問題がある場合はお気軽にお知らせください!