NAME
资源 - 地址空间权限和会计
SYNOPSIS
资源是不可变的对象,用于验证对创建由地址空间支持的对象的系统调用的访问权限,或允许访问地址空间。 这些对象包括虚拟机对象、中断和 x86 ioport。
说明
资源用于控制对地址空间特定区域的访问权限,并且是创建 VMO 和 IRQ 以及访问 x86 ioport 所必需的。
资源对象由单个资源 种类 组成,具有 base 地址和 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。这些资源在系统资源中各自拥有自己的基地址。系统资源的有效 base 值包括 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_MEXEC_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()并使用适当的父资源来创建新资源。每种 kind 的初始资源都是由内核在启动期间创建的,并移交给 userboot 启动的第一个用户空间进程。
适当的父资源是指其自身从 base 到 base+len 的范围包含为新资源请求的范围的资源。父资源的 kind 必须与要创建的资源的 kind 匹配。目前,无法使用 exclusive 资源来创建新资源。创建后,所使用的资源父级与创建的新资源之间没有任何关系。
资源分配可以是 shared 或 exclusive 。共享资源授予访问给定地址空间的权限,但不会为资源所有者独占保留该地址空间。独占资源仅向独占资源的持有者授予对该区域的访问权限。 独占资源范围和共享资源范围不得重叠。
资源会进行生命周期跟踪,并在最后一个句柄关闭后释放。对于独占资源,这意味着给定的地址范围将释放回给定 kind 资源的分配器。通过资源创建的对象不持有对资源的引用,因此不会使其保持活动状态。
备注
资源通常是 DDK 和平台总线驱动程序的私有资源。目前,这意味着 ACPI 和平台总线分别持有根资源,并向其他驱动程序提供更精细的资源。