静态库就是没有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函数,