UEFI原理与编程(六):UEFI工程模块文件-驱动模块工程文件

来源:互联网 发布:工业机器人编程用什么 编辑:程序博客网 时间:2024/06/07 04:05

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驱动学习。

参考资料

  1. 《UEFI原理与编程》 戴正华 著。
  2.  UEFI Spec2_6。
0 0
原创粉丝点击