2013-01-08 46 views
3

我正在研究FreeBSD內核的構建過程。調用make時添加了V = 1,但仍無法獲取內核映像鏈接階段的細節。我只能收到一條消息FreeBSD內核映像到底有多精確?

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

和二進制就在那裏。我如何知道最終鏈接的細節(哪些對象文件被使用以及鏈接器使用哪些選項)?

+0

請問,請告訴構建的內核文件在哪裏? (在哪個目錄中)。 –

回答

1

內核是用「make buildkernel」命令構建的。如果您在/usr/src/Makefile.inc1看buildkernel的定義:

@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看在/usr/obj/usr/src/sys/GENERIC/Makefile(假設你正在構建一個通用的內核),你會看到文件kern.pre.mkkern.post.mk都包括在內。看着kern.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/找到。

相關問題