Zircon 用户程序
用户态启动流程
kernel -> userboot -> bootsvc -> component_manager -> sh / device_manager
ZBI 与 bootfs:ZBI 中包含初始文件系统 bootfs,内核将 ZBI 完整传递给 userboot,由它负责解析并对其它进程提供文件服务
用户程序的组成
内核不直接参与用户程序的加载工作(第一个进程除外)
用户程序强制使用 PIC 和 PIE(位置无关代码)
内存地址空间组成:Program, Stack, vDSO, Dylibs
通过 Channel 传递启动信息和句柄
加载 ELF 文件
简单介绍 ELF 文件的组成结构
实现 VmarExt::load_from_elf 函数
系统调用的跳板:vDSO
介绍 vDSO 的作用
如何修改 vDSO 源码(libzircon)将 syscall 改为函数调用
加载 vDSO 时修改 vDSO 代码段,填入跳转地址
第一个用户程序:userboot
实现 zircon-loader 中的 run_userboot 函数
能够进入用户态并在第一个系统调用时跳转回来