ブートロードステップ自体でlibcが提供するいくつかの機能を使用したいと思います。ロード段階で入手できますか?
答え1
目的の関数バージョンを直接書く必要があるかもしれませんが、場合によってはlibcソースコードを開始点として使用することもできます。 libc自体の機能は、以下を含むUNIXユーザー空間プログラムのすべての前提で作成されました。
- カーネル(またはより具体的にはカーネルのシステムコールインタフェース)の存在
- フラットメモリモデル
- 動的接続インフラストラクチャ(静的接続を除く)
そして、ブートローダ段階では、これらのどれも存在しません。代わりに(デフォルトではIntelでは)BIOS、セグメント化されたメモリモデル、メモリ保護なし、およびシステムの完全な制御機能があります。
printk()
これは、カーネルスペースに適用されないとprintf()
仮定するlibcではなく、カーネルコードでカスタム関数を表示するのと同じ理由です。printf()
答え2
はい。最も簡単な方法は、必要なコードをブートローダにコピーすることです。
この機能は何ですか?ミッションを実行するためにシステムコールに依存している場合は、それを使用できないことを理解する必要があります。
答え3
ただ静的なリンクを使用してください。現在、動的接続は機能しません。