我想看看FreeBSD内核的构建过程。我在调用make时添加了V=1,但仍然无法获得内核映像链接阶段的详细信息。我只能收到一条消息
linking kernel.debug
text data bss dec hex filename
12806916 1293908 1116688 15217512 e83368 kernel.debug
,二进制文件就在那里。我如何知道最终链接的细节(使用了哪些目标文件以及链接器使用了哪些选项)?
使用"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 "--------------------------------------------------------------"
如果您查看/usr/obj/usr/src/sys/GENERIC/Makefile
中的内核构建makefile(假设您正在构建一个GENERIC内核),您将看到包含kern.pre.mk
和kern.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/
中找到。