究竟是如何构建FreeBSD内核映像的?

时间:2013-01-08 00:11:33

标签: kernel freebsd

我正在尝试研究FreeBSD内核的构建过程。我在调用make时添加了V = 1,但仍然无法获得内核图像链接阶段的细节。我只能收到一条消息

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

并且二进制就在那里。我如何知道最终链接的详细信息(使用哪些目标文件以及链接器使用哪些选项)?

1 个答案:

答案 0 :(得分:1)

内核使用命令“make buildkernel”构建。如果你根据buildkernel的定义查看/usr/src/Makefile.inc1

    @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.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/个文件。