カーネルにmain()関数がありますか? [閉鎖]

カーネルにmain()関数がありますか? [閉鎖]

私はデバイスドライバとカーネルプログラミングを学んでいます。 Jonathan Corbetの本によると、デバイスドライバには機能がありませんmain()

だから、2つの質問があります。

  • main()デバイスドライバに機能が必要ない理由は何ですか?
  • カーネル自体にmain()機能がありますか?

誰でも私にこれを説明できますか?

ベストアンサー1

ユーザー空間プログラムでは、main()プログラムのエントリポイントです。libc初期化コードによって呼び出されるバイナリが実行されるとき。カーネルコードはlibcに依存する余裕はありません。なぜなら、libc自体はメモリ割り当て、I / O、プロセス管理などのためにカーネルシステムコールインターフェイスに依存しているからです。

main()つまり、カーネルコードではと同じですstart_kernel()ブートローダによって呼び出されるカーネルイメージをロードしたら、それをメモリに抽出し、必要なハードウェアとメモリページングを設定します。start_kernel()ほとんどのシステム設定を行い、最終的にinitプロセスを作成します。

Linuxカーネルモジュールのエントリポイントは、マクロを呼び出してカーネルに登録するinit関数ですmodule_init()。登録されたモジュール初期化関数は次のようになります。カーネルコードによって呼び出されるdo_initcalls()カーネルの起動中にこの関数を通過しました。

おすすめ記事