Xinuと一緒に OS とネットワークについて学びたいと思っています。githubの xinu-os リポジトリからソース コードをダウンロードし(最大 4d489eead3a49170f69041b959bd5a1bd8dff92d)、自分で xinu.boot と xinu.elf をコンパイルしました。実際に取り掛かるために、いくつかの変更とテストを行いたいと思いました。したがって、私の目標 (およびこの質問の目標) は、VBox で xinu を起動することでした。
少し説明すると、Xinu Pageには、VM 用の Xinu のバージョンと、ダウンロード可能なコードの下にある手順の項目があることを知っています。このセクションには、VBox バージョンが含まれています (以下、VBox バージョンと呼びます)。そのバージョンを使用したくない理由は、github のコードほど多くの機能が含まれていないためです。また、github に boot.xinu-os.org プロジェクトがあり、javascript PC エミュレーターで xinu を起動できることを宣伝していることも知っています。使いたくない理由は、制約がありそうで、従来の方法よりも問題が多いのではないかと思ったからです(ないかもしれません)。そのため、xinu-os リポジトリのコードを使用して独自のバイナリをコンパイルし、VBox の VBox バージョンと同様の方法で簡単に実行できると考えましたが、間違っているように見えました。
Xinu ページの VBox バージョンは、pxe と grub を使用して起動しています。私がしたことは次のとおりです。
- xinu-os リポジトリから複製しました。
マルチブート仕様#OS-image-formatに従い、必要なヘッダーを _start の最後に追加して、バイナリをマルチブートに準拠させました。
/* /xinu/loader/platforms/x86/start.S * ... * #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 * #define MULTIBOOT_HEADER_FLAGS 0x00000003 * _start: * ... */ jmp startup /* Enable multiboot support */ .align 4 .long MULTIBOOT_HEADER_MAGIC .long MULTIBOOT_HEADER_FLAGS .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
変更したコードから
Xinu.boot
and を作成しました。Xinu.elf
- 指示通りに minicom をセットアップし、VBox バージョンを正常に起動しました。
Xinu.boot
VBox版で使われているを調べたところ、 i386用の32bitエルフだったのXinu.boot
ですが、Makefileでビルドしたはobjcopyで作ったもので、Xinu.elf
はエルフでした。Xinu.elf
そのため、 I builtという名前をに変更Xinu.boot
し、VBox バージョンでそれを置き換えました。Xinu.boot
次に、同じ環境で、を除く同じファイルで起動しようとしました。- それは失敗し、grub は grub コマンドラインを提供してくれました。デバッグ版も使ってみました。これも失敗しましたが、grub コマンドラインを表示する前に、「不明なコマンド: r(0, 1)」というメッセージが表示されました。
Xinu.boot
したがって、私の主な質問は、私のものと、私の pxe ブートを妨げる VBox バージョンのものとの根本的な違いは何ですか? 誰でもそれに光を当てることができますか?
そこにたどり着くまでに、多くの読書と実験が必要でした。私の目標は、自分で構築した Xinu を実行し、修正してテストすることです。pxe で起動する必要はありませんが、実際のハードウェアではなく VBox で実行できることを願っています。私の他の質問は次のとおりです。
- VBox または仮想マシンで xinu を実行する別の (そしてより簡単な) 方法はありますか?
- 起動するように構成された VBox バージョンで出荷された grub はどのようになっ
Xinu.boot
ていますか? ファイルでxinuを検索しようとしたが、何も得られなかったからです。 - 「不明なコマンド: r(0, 1)」というメッセージはどういう意味ですか?それはgrubまたはxinuが発行したものですか?
- このようなシステムをどのようにデバッグすればよいですか?
kprintf
start.S にいくつか挿入しようとしましたが、どこにも行きませんでした。gdb も試しましXinu.elf
たが、いくつかの命令を実行した後にセグメンテーション違反が発生しました。そして、なぜgdbでデバッグできないのですか? (組み立て初心者なので教えてください。) - この種の質問に対して信頼できる Xinu コミュニティまたはメーリング リストはありますか?
私の質問が特別で複雑なことは承知しており、それらを英語で表現するのはとてもぎこちないです。どんな助けでも大歓迎です!前もって感謝します!