UEFI——Device Path
1 Device Path
设备路径Device Path用于定义到设备的编程路径,设备路径的主要目的是让一个应用程序(例如OS加载器)确定接口正在抽象的设备的物理设备。
设备路径的集合通常称为名称空间。例如,ACPI基于用ASL (ACPI源语言)编写的名称空间。
考虑到EFI不会取代ACPI,而是尽可能遵从ACPI,在EFI中使用ACPI名称空间似乎是合乎逻辑的。
然而,ACPI名称空间是为在操作系统运行时使用而设计的,并不适合平台固件或操作系统加载程序。鉴于此,EFI定义了自己的名称空间,称为设备路径。
设备路径旨在最大限度地利用ACPI名称空间。Device Path中的一个关键结构定义了回ACPI名称空间的链接。设备路径还用于填补ACPI使用标准枚举算法遵从总线的空白。设备路径能够将有关总线上正在使用的设备的信息与标准枚举机制关联起来。设备路径还用于定义文件应该在介质上的位置,或者从哪里加载文件。设备路径的一种特殊情况也可用于支持从遗留介质启动遗留操作系统。
设备路径被设计成这样,操作系统加载程序和操作系统可以告诉平台固件使用哪些设备作为引导设备。这允许操作系统维护与平台固件一致的系统视图。这方面的一个例子是使用网络连接作为引导设备和控制台的“无头”系统。在这种情况下,固件将向操作系统传递网络适配器和网络协议信息,作为这些设备的设备路径中的控制台和引导设备。
2 EFI Device Path Protocol
其函数原型为
/**这个协议可以用于任何设备句柄,来获得相关物理设备和逻辑设备的通用路径或位置信息如果handle逻辑上没有映射到物理设备,那么该句柄不一定支持device path协议设备路径描述句柄所针对的设备的位置设备路径的大小可以从组成设备路径的结构中确定
**/
typedef struct {//设备类型UINT8 Type; ///< 0x01 Hardware Device Path.///< 0x02 ACPI Device Path.///< 0x03 Messaging Device Path.///< 0x04 Media Device Path.///< 0x05 BIOS Boot Specification Device Path.///< 0x7F End of Hardware Device Path.UINT8 SubType; ///< Varies by Type///< 0xFF End Entire Device Path, or///< 0x01 End This Instance of a Device Path and start a new///< Device Path.UINT8 Length[2]; ///< Specific Device Path data. Type and Sub-Type define///< type of data. Size of data is included in Length.
} EFI_DEVICE_PATH_PROTOCOL
执行UEFI Image可以使用设备路径来匹配它自己的设备驱动程序到特定的设备。注意,执行UEFI操作系统加载程序和UEFI应用程序映像必须通过引导服务设备句柄访问所有物理设备,直到EFI_BOOT_SERVICES.ExitBootServices()被成功调用。UEFI驱动程序只能访问它提供功能的物理设备。
3 Device Path Nodes
设备路径节点主要有六种类型:
- Hardware Device Path:此设备路径定义了设备如何附加到系统的资源域,其中资源域就是系统的共享内存、内存映射I/O和I/O空间——PCI设备,vendor自定义的设备,BMC
- ACPI Device Path:此设备路径用于描述未以行业标准方式描述枚举的设备,这些设备必需在ACPI名称空间中使用ACPI AML来描述,此设备路径是到ACPI名称空间的链接。——PCI总线域、显示输出设备、ACPI设备(比如鼠标、键盘)
- Messageing Device Path:此设备路径用于描述资源域外设备的连接路径,此设备路径可以描述物理消息传递信息,如SCSI ID或抽象信息,如网络协议IP地址。——IDE设备、USB设备、SATA设备、SAS设备、SCSI设备、UART设备、Vendor自定义对象、MAC地址、IPv4/IPv6地址、其它新兴设备
- Media Device Path:此设备路径用于描述由引导服务抽象的媒体部分,例如,媒体设备路径可以定义正在使用的硬盘驱动器上的哪个分区。——硬盘分区、CDROM分区、Vendor自定义的Media、文件路径、UEFI固件分区、UEFI固件文件、RAM Disk
- BIOS Boot Specification:此路径设备用于指向引导legacy操作系统,它基于BIOS Boot Specification 1.01——传统的BIOS启动设备
- 硬件路径结束:根据子类型,此设备路径用于指示设备路径实例或设备路径结构的结束。——Device Path终结符