锆石内核图像是如何关联的? (link.ld 脚本在哪里)

How is Zircon kernel image linked? (where is link.ld script)

我正在阅读 Zircon 源代码:https://fuchsia.googlesource.com/fuchsia/+/master/ 并且我正在尝试查找内核映像是如何 linked 的。即start函数放在哪里?

例如,在 raspberry pi 上,kernel.img 启动函数被放置在 0x80000 处,使用如下 link 脚本:https://github.com/bztsrc/raspi3-tutorial/blob/master/01_bareminimum/link.ld

有 boards 目录:https://fuchsia.googlesource.com/fuchsia/+/master/boards/ 它对某些板有一些依赖性。它添加了一些需要的驱动程序。但是,我找不到每个板的 linking 发生的任何地方。

如果我想支持新板怎么办?假设我想将 Zircon 移植到 raspberry pi,那么我需要制作 start.S,特别是其上的 start 函数,从 0x80000 开始。我将如何指示 Zircon 构建系统执行此操作?

有几个层次需要理解,其中一些略有不同。

这是您可能正在寻找的链接描述文件,但它并不能说明全部情况:https://cs.opensource.google/fuchsia/fuchsia/+/master:zircon/kernel/phys/zbi_executable.gni

ZBI 中包含的内核映像是在此处生成的,具体取决于配置: https://cs.opensource.google/fuchsia/fuchsia/+/master:zircon/kernel/BUILD.gn;l=465

还有boot-shims,用于将各种世界连接到ZBI,这里有一些用于arm64的:https://cs.opensource.google/fuchsia/fuchsia/+/master:zircon/kernel/target/arm64/boot-shim/

这些还有您可能正在寻找的各种构建参数: https://cs.opensource.google/fuchsia/fuchsia/+/master:zircon/kernel/target/arm64/boot-shim/BUILD.gn;l=37

Multiboot 在 Linux 世界中很常见,而这个 x64 的 shim 正是这样处理的: https://cs.opensource.google/fuchsia/fuchsia/+/master:zircon/kernel/target/pc/multiboot/

这里有一个具有最小 dtb 交互的引导 shim 配置示例:https://cs.opensource.google/fuchsia/fuchsia/+/master:zircon/kernel/target/arm64/board/msm8998/boot-shim-config.h;bpv=0