ブートロードステップ自体でlibcを使用できますか?

ブートロードステップ自体でlibcを使用できますか?

ブートロードステップ自体でlibcが提供するいくつかの機能を使用したいと思います。ロード段階で入手できますか?

答え1

目的の関数バージョンを直接書く必要があるかもしれませんが、場合によってはlibcソースコードを開始点として使用することもできます。 libc自体の機能は、以下を含むUNIXユーザー空間プログラムのすべての前提で作成されました。

  • カーネル(またはより具体的にはカーネルのシステムコールインタフェース)の存在
  • フラットメモリモデル
  • 動的接続インフラストラクチャ(静的接続を除く)

そして、ブートローダ段階では、これらのどれも存在しません。代わりに(デフォルトではIntelでは)BIOS、セグメント化されたメモリモデル、メモリ保護なし、およびシステムの完全な制御機能があります。

printk()これは、カーネルスペースに適用されないとprintf()仮定するlibcではなく、カーネルコードでカスタム関数を表示するのと同じ理由です。printf()

答え2

はい。最も簡単な方法は、必要なコードをブートローダにコピーすることです。

この機能は何ですか?ミッションを実行するためにシステムコールに依存している場合は、それを使用できないことを理解する必要があります。

答え3

ただ静的なリンクを使用してください。現在、動的接続は機能しません。

関連情報