4

FreeBSD カーネルの構築プロセスを調べようとしています。make を呼び出すときに V=1 を追加しましたが、まだカーネル イメージ リンク ステージの詳細を取得できません。メッセージしか受け取れない

linking kernel.debug
text       data     bss     dec       hex    filename
12806916   1293908  1116688 15217512  e83368 kernel.debug

バイナリはそこにあります。最終的なリンクの詳細 (どのオブジェクト ファイルが使用され、リンカーがどのようなオプションを使用するか) を知るにはどうすればよいですか?

4

1 に答える 1

1

カーネルはコマンド「make buildkernel」でビルドされます。/usr/src/Makefile.inc1buildkernel の定義を見ると、次のようになります。

    @echo "--------------------------------------------------------------"
    @echo ">>> stage 3.2: building everything"
    @echo "--------------------------------------------------------------"
    cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
    @echo "--------------------------------------------------------------"
    @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
    @echo "--------------------------------------------------------------"

カーネル ビルドの makefile を調べると(GENERIC カーネルをビルドしていると仮定して)、ファイルとが含まれ/usr/obj/usr/src/sys/GENERIC/Makefileていることがわかります。見ると、次のリンカー定義が表示されます。kern.pre.mkkern.post.mkkern.pre.mk

SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} \
        -warn-common -export-dynamic -dynamic-linker /red/herring \
        -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o

さまざまなアーキテクチャのldscriptファイルは、/usr/src/sys/conf/.

于 2013-03-12T23:59:57.450 に答える