UEFI工程模块文件-驱动模块
前言
在UEFI中,驱动分为两类:一类是符合UEFI的驱动模型的驱动,模型的类型为UEFI_DRIVER,称为UEFI驱动;另一类是不遵循UEFI驱动模型的驱动,称为DXE驱动。下面介绍的是UEFI驱动工程文件格式。
一、驱动与应用程序
1. 驱动与应用程序的入口函数相同,入口函数原型如下:
typedef EFI_STATUS API (*UEFI_ENTRYPOINT)(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
2. 驱动与应用程序的最大区别是驱动会常驻内存,而应用程序执行完毕后就会从内存清除。
二、UEFI驱动模块工程文件
基本和应用程序模块相同,注意一下几点即可。
- [Defines]块
将MODULE_TYPE
设置为UEFI_DRIVER - [Sources]块
通常包含ComponentName.c
,在此文件中定义了驱动的名字,驱动安装之后,这个名字将显示给用户。 - [LibraryClasses]块
必须包含UefiDriverEntryPoint。
三、UEFI驱动模块工程文件示例
## @file
# Module that lays Disk I/O protocol on every Block I/O protocol.
#
# This module produces Disk I/O protocol to abstract the block accesses
# of the Block I/O protocol to a more general offset-length protocol
# to provide byte-oriented access to block media. It adds this protocol
# to any Block I/O interface that appears in the system that does not
# already have a Disk I/O protocol. File systems and other disk access
# code utilize the Disk I/O protocol.
#
# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = DiskIoDxe
MODULE_UNI_FILE = DiskIoDxe.uni
FILE_GUID = 6B38F7B4-AD98-40e9-9093-ACA2B5A253C4
MODULE_TYPE = UEFI_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = InitializeDiskIo
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
# DRIVER_BINDING = gDiskIoDriverBinding
# COMPONENT_NAME = gDiskIoComponentName
# COMPONENT_NAME2 = gDiskIoComponentName2
#
[Sources]
ComponentName.c
DiskIo.h
DiskIo.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
[LibraryClasses]
UefiBootServicesTableLib
MemoryAllocationLib
BaseMemoryLib
BaseLib
UefiLib
UefiDriverEntryPoint
DebugLib
PcdLib
[Protocols]
gEfiDiskIoProtocolGuid ## BY_START
gEfiDiskIo2ProtocolGuid ## BY_START
gEfiBlockIoProtocolGuid ## TO_START
gEfiBlockIo2ProtocolGuid ## TO_START
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdDiskIoDataBufferBlockNum ## SOMETIMES_CONSUMES
[UserExtensions.TianoCore."ExtraFiles"]
DiskIoDxeExtra.uni
四、小结
本文只是简要介绍了驱动模块的工程文件。关于驱动模块的更详细知识内容,后续再边学边整理。你也可以去看《UEFI原理与编程》的第九章开发UEFI驱动
学习。
参考资料
- 《UEFI原理与编程》 戴正华 著。
- UEFI Spec2_6。