资源

NAME

资源 - 地址空间权限和会计

SYNOPSIS

资源是不可变的对象,用于验证对创建由地址空间支持的对象的系统调用的访问权限,或允许访问地址空间。 这些对象包括虚拟机对象中断和 x86 ioport。

说明

资源用于控制对地址空间特定区域的访问权限,并且是创建 VMO 和 IRQ 以及访问 x86 ioport 所必需的。

资源对象由单个资源 种类 组成,具有 base 地址和 len 参数,用于定义资源持有者 被授予访问权限的地址空间范围。该范围涵盖 base 到 base + len(但不包括 base + len)。这些对象在创建后是不可变的。有效的 kind 值包括 ZX_RSRC_KIND_MMIOZX_RSRC_KIND_IOPORTZX_RSRC_KIND_IRQZX_RSRC_KIND_SMCZX_RSRC_KIND_SYSTEM

系统资源是一种特殊情况,其中包含其他资源,所有这些资源的 len 均为 1。这些资源在系统资源中各自拥有自己的基地址。系统资源的有效 base 值包括 ZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_VMEX_BASEZX_RSRC_SYSTEM_DEBUG_BASEZX_RSRC_SYSTEM_INFO_BASEZX_RSRC_SYSTEM_CPU_BASEZX_RSRC_SYSTEM_POWER_BASEZX_RSRC_SYSTEM_MEXEC_BASEZX_RSRC_SYSTEM_ENERGY_INFO_BASEZX_RSRC_SYSTEM_IOMMU_BASEZX_RSRC_SYSTEM_FRAMEBUFFER_BASEZX_RSRC_SYSTEM_PROFILE_BASEZX_RSRC_SYSTEM_MSI_BASEZX_SYSTEM_DEBUGLOG_BASE

可以通过调用 zx_resource_create()并使用适当的父资源来创建新资源。每种 kind 的初始资源都是由内核在启动期间创建的,并移交给 userboot 启动的第一个用户空间进程。

适当的父资源是指其自身从 basebase+len 的范围包含为新资源请求的范围的资源。父资源的 kind 必须与要创建的资源的 kind 匹配。目前,无法使用 exclusive 资源来创建新资源。创建后,所使用的资源父级与创建的新资源之间没有任何关系。

资源分配可以是 sharedexclusive 。共享资源授予访问给定地址空间的权限,但不会为资源所有者独占保留该地址空间。独占资源仅向独占资源的持有者授予对该区域的访问权限。 独占资源范围和共享资源范围不得重叠。

资源会进行生命周期跟踪,并在最后一个句柄关闭后释放。对于独占资源,这意味着给定的地址范围将释放回给定 kind 资源的分配器。通过资源创建的对象不持有对资源的引用,因此不会使其保持活动状态。

备注

资源通常是 DDK 和平台总线驱动程序的私有资源。目前,这意味着 ACPI 和平台总线分别持有根资源,并向其他驱动程序提供更精细的资源。

系统调用