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

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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值