问题描述
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 image.map
obj zircon.elf zircon.elf-gdb.py
如你所见,它产生一个 zircon.elf
,理论上可以运行,但我认为 ZBI 信息对于启动至关重要,否则它会恐慌。我说得对吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)