uefi写lib静态库

静态库就是没有entrypoint,只提供函数,变量等

所以inf文件要这么写:

[Defines]
    INF_VERSION                 = 0x00010005
    BASE_NAME                   = firstlib
    FILE_GUID                   = a0b9f7a1-9636-11e4-84a4-74d435dec62b
    MODULE_TYPE                 = BASE
    VERSION_STRING              = 1.0
    LIBRARY_CLASS               = FirstLib

[Packages]
    MdePkg/MdePkg.dec
    firstlibPkg/firstlibPkg.dec

[Sources]
    firstlib.c

[LibraryClasses]
    #UefiDriverEntryPoint
    UefiBootServicesTableLib
    MemoryAllocationLib
    BaseMemoryLib
    BaseLib
    UefiLib
    DevicePathLib
    DebugLib

头文件中

EFI_STATUS EFIAPI PrintHello();

源文件中

EFI_STATUS
EFIAPI
PrintHello ()
{
    EFI_STATUS    Status;

    Status = EFI_SUCCESS;

    Print(L"hello_world!!!\n");

    return Status;
}

firstlibPkg中有dec文件,dsc文件,firstlib文件夹,Include文件夹,Library文件夹,(为了和uefi自己的lib类似,所以这么分配)

firstlib文件夹中有个一b.bat就够了

Include文件夹中要有一个Library文件夹,Library文件夹中有firstlib.h

firstlibPkg的Library文件夹中有firstlibrary文件夹,firstlibrary文件夹中要有firsrtlib.c文件 和 firstlib.inf文件

如果静态库重要包含自己写的驱动,等等,直接将驱动的函数封装成lib中api函数即可,然后程序调用lib,lib调用驱动

程序调用lib

testlib

testlib的dsc文件中的 [LibraryClasses] 块中加入FirstLib|firstlibPkg/Library/firstliblibrary/firstlib.inf

inf文件中的 [Packages] 块中加入firstlibPkg/firstlibPkg.dec

[LibraryClasses] 块中加入FirstLib ,(即firstlib 的 inf 文件中的 LIBRARY_CLASS             = FirstLib 生成的lib,替代了原来的entrypoint)

源文件中

EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
{

    PrintHello();

    return EFI_SUCCESS;
}

以此类推,可以封装更多的函数到lib中,也可以封装驱动中protocol的成员函数为普通api函数,


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值