姓名
资源 - 地址空间权限和记账
SYNOPSIS
资源是一个不可变对象,用于验证对系统调用的访问权限,这些系统调用会创建由地址空间支持的对象,或允许访问地址空间。其中包括 vm 对象、中断和 x86 ioport。
说明
资源用于控制对地址空间特定区域的访问,并且是创建 VMO 和 IRQ 以及访问 x86 ioport 所必需的。
资源对象由单个资源种类组成,具有基地址和 len 参数,用于定义资源持有者有权访问的地址空间范围。该范围涵盖 base 到 base + len(不包括 base + len)。这些对象一经创建便无法更改。有效的 kind 值为 ZX_RSRC_KIND_MMIO、ZX_RSRC_KIND_IOPORT、ZX_RSRC_KIND_IRQ、ZX_RSRC_KIND_SMC 和 ZX_RSRC_KIND_SYSTEM。
系统资源是一种特殊情况,它包含其他资源,所有这些资源的 len 均为 1。这些资源在系统资源中都有自己的基准。系统资源的有效基准值为 ZX_RSRC_SYSTEM_HYPERVISOR_BASE、ZX_RSRC_SYSTEM_VMEX_BASE、ZX_RSRC_SYSTEM_DEBUG_BASE、ZX_RSRC_SYSTEM_INFO_BASE、ZX_RSRC_SYSTEM_CPU_BASE、ZX_RSRC_SYSTEM_POWER_BASE、ZX_RSRC_SYSTEM_ENERGY_INFO_BASE、ZX_RSRC_SYSTEM_IOMMU_BASE、ZX_RSRC_SYSTEM_FRAMEBUFFER_BASE、ZX_RSRC_SYSTEM_PROFILE_BASE、ZX_RSRC_SYSTEM_MSI_BASE 和 ZX_SYSTEM_DEBUGLOG_BASE。
您可以通过调用 zx_resource_create(),使用适当的父级资源创建新资源。内核会在启动期间创建每种类型的初始资源,并将其移交给由 userboot 启动的第一个用户空间进程。
合适的父级资源是指其自身从 base 到 base+len 的范围包含新资源所请求范围的资源。父资源的种类必须与要创建的资源的种类匹配。目前,独占资源无法用于创建新资源。创建后,所使用的资源父级与创建的新资源之间没有任何关系。
资源分配可以是共享或独占。共享资源会授予访问给定地址空间的权限,但不会专门为资源所有者预留该地址空间。专属资源仅向专属资源的持有者授予对该区域的访问权限。专有资源范围和共享资源范围不得重叠。
系统会跟踪资源的生命周期,并在最后一个句柄关闭后释放资源。对于独占资源,这意味着给定地址范围将释放回给定类型资源的分配器。通过资源创建的对象不会保留对资源的引用,因此不会使其保持活跃状态。
备注
资源通常对 DDK 和平台总线驱动程序不公开。目前,这意味着 ACPI 和平台总线分别持有根资源,并向其他驱动程序分发更精细的资源。