c - Zircon 引导映像 (ZBI) 是否对于引导 Zircon 内核必不可少?
问题描述
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 信息对于引导至关重要,否则它会恐慌。我对吗?
解决方案
Zircon 期望引导加载程序传递一个它可以解析的Zircon 引导映像 (ZBI)对象。
该映像包含很多对系统启动有用的信息,例如,它包含物理内存范围、内核命令行、cpu 拓扑信息、外围设备信息,甚至是用于引导用户空间的只读文件系统。
您可以在“Zircon Kernel to userspace bootstrapping”文档中阅读更多内容。ZBI 格式在zircon/system/public/zircon/boot/image.h
.
在vim2
u-boot repo 的分支中,您可以看到引导加载程序在引导到 zircon 之前如何组装和附加 zbi 项。
推荐阅读
- java - 加载活动时出现 NoClassDefFoundError
- javascript - Cron 作业在某些日子里不能随机工作
- c# - 如何通过简单微调项 C# 使用小数列表填充适配器
- c# - 为什么我无法在 C# 浏览器中使用鼠标拖放甚至单击
- mongodb - 项目嵌入文档键值,基于 mongoDB 聚合中的条件
- android - Android 彩票动画滞后
- jquery - Console.log 在 Chrome 浏览器中未显示任何内容
- java - 片段:蓝牙服务和片段连接
- c# - 发送多个抄送地址的电子邮件
- c# - File.WriteAllBytes() 可以在不引发异常的情况下失败吗?