0

Zircon 内核的内核入口点调用platform_early_init()从 .S 文件中获取 zbi_paddr 然后传递给pdev_init

void* zbi_vaddr = paddr_to_physmap(zbi_paddr);
zbi_header_t* header = (zbi_header_t*)zbi_vaddr;
ramdisk_base = header;
zbi_root = reinterpret_cast<zbi_header_t*>(ramdisk_base);
pdev_init(zbi_root);

其中pdev_init负责启动像 uart 这样的驱动程序。

它看起来像驱动程序通过pdev_run_hooks(在同一个文件上),它遍历 zbi 文件并找到每个驱动程序信息。

所以看起来ZBI对于引导是必不可少的?

我问是因为我编译了锆石内核并得到了

lz@vm:~/fuchsia/out/default/kernel_arm64$ ls gen
image.build-id.stamp kernel.zbi toolchain.ninja zircon.elf.build-id.stamp zircon.elf.map image image.map
obj 锆石。精灵锆石.elf-gdb.py

如您所见,它会产生一个zircon.elf,理论上可以运行,但我认为 ZBI 信息对于引导至关重要,否则它会恐慌。我对吗?

4

1 回答 1

0

Zircon 期望引导加载程序传递一个它可以解析的Zircon 引导映像 (ZBI)对象。

该映像包含很多对系统启动有用的信息,例如,它包含物理内存范围、内核命令行、cpu 拓扑信息、外围设备信息,甚至是用于引导用户空间的只读文件系统。

您可以在“Zircon Kernel to userspace bootstrapping”文档中阅读更多内容。ZBI 格式在zircon/system/public/zircon/boot/image.h.

vim2u-boot repo 的分支中,您可以看到引导加载程序在引导到 zircon 之前如何组装和附加 zbi 项。

于 2021-08-25T05:47:47.470 回答