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 信息对于引导至关重要,否则它会恐慌。我对吗?