【发布时间】:2021-10-04 17:01:45
【问题描述】:
Zircon 内核的kernel entrypoint 调用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.map
obj zircon.elf zircon.elf-gdb.py
如您所见,它会生成zircon.elf,理论上可以运行,但我认为 ZBI 信息对于引导至关重要,否则会出现恐慌。我说的对吗?
【问题讨论】:
标签: c kernel bootloader boot fuchsia