【问题标题】:How exactly is FreeBSD kernel image built?FreeBSD 内核映像究竟是如何构建的?
【发布时间】:2013-01-08 00:11:33
【问题描述】:

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

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

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

【问题讨论】:

  • 您能告诉我构建的内核文件在哪里吗? (在哪个目录)。

标签: kernel freebsd


【解决方案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 "--------------------------------------------------------------"

如果您查看 /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/ 中找到。

【讨论】:

    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 2011-04-20
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2010-12-31
    • 2019-11-02
    相关资源
    最近更新 更多