.exit.text セクションは、リンカーによって __exit マクロで定義された関数で埋められることを理解しています。vmlinux ファイルの分解に関するセクションを確認できます。しかし、ファイルがメモリに読み込まれると、どの時点で内容が破棄されるのかわかりませんでしたか? カーネルコードで発生しますか? 誰もこれをもっと説明できますか?
前もって感謝します!
1 に答える
ファイルvmlinux.lds.Sおよびmodule.cがこれを処理します。処理は、カーネルのバージョンと構成によって異なります。どちらも与えられていません。私の仮定では、ユーザー空間のタスクではなく、カーネル内.exit.text
のセクションを意味していると思います。通常、カーネルは終了しないため、デバッグ構成がない限り、リンカー スクリプトによって破棄されます。
編集: Android カーネルは.config
、コンパイル時に Linux カーネル機能を有効にするファイルで作成されました。.config
for 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()
は、このようなものが破棄される場所です。