1

.exit.text セクションは、リンカーによって __exit マクロで定義された関数で埋められることを理解しています。vmlinux ファイルの分解に関するセクションを確認できます。しかし、ファイルがメモリに読み込まれると、どの時点で内容が破棄されるのかわかりませんでしたか? カーネルコードで発生しますか? 誰もこれをもっと説明できますか?
前もって感謝します!

4

1 に答える 1

2

ファイルvmlinux.lds.Sおよびmodule.cがこれを処理します。処理は、カーネルのバージョンと構成によって異なります。どちらも与えられていません。私の仮定では、ユーザー空間のタスクではなく、カーネル内.exit.textのセクションを意味していると思います。通常、カーネルは終了しないため、デバッグ構成がない限り、リンカー スクリプトによって破棄されます。

編集: Android カーネルは.config、コンパイル時に Linux カーネル機能を有効にするファイルで作成されました。.configfor CONFIG_HOTPLUG_CPUは CPU です一部の大きなサーバーは、CPU を交換しても稼働し続けることができます。あなたの質問に答えるのは難しいです。.configあなたの Android カーネル ソースがどこにあるのか、どのようなオプションでビルドされているのかわかりません。

セクションはGENERIC_BUG;で保持されます。したがって、カーネルがこれで構築された可能性があります。ストックvmlinux.lds.Sから、.exit.dataセクションはの __init_endに配置されるため、その部分が実行された後に解放され、メモリに戻されますinit。つまり、起動時にのみ存在します。このような状況では、vmlinux ELF には表示されますが、ランタイムkcoreには表示されず、ダンプしても表示されません。

具体的には、main.c の start_kernel()rest_init()kernel_init()、およびfree_initmem()は、このようなものが破棄される場所です。

于 2013-04-12T14:23:39.510 に答える