
uefi
文章平均质量分 66
youyudexiaowangzi
读书苦,读书累,晓来谁染霜林醉,名落孙山泪
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UEFI开发环境搭建
这里没有开发需要的代码和库,但是又很多资料文档,比如UEFI Specification就在Developer->Specification Library里面。该页面提供了UDK2015 Downloads的各种资源,我们开发需要的是workspaces,所以选择UDK2015 Workspace (ZIP File)该页面最下面提供了UDK各种版本的链接,2022年看到最新版本是UDK2018,由于公司用的是UDK2015,所以就选择了UDK2015,下载解压后有两个目录,三个压缩包,一个txt。...原创 2022-08-09 12:11:52 · 1512 阅读 · 0 评论 -
编译第一个uefi文件
搭建好uefi开发环境之后,在MyWorkspace文件夹中建立一个文件夹ExamplePkg; ,然后在ExamplePkg文件夹中创建HelloWorld文件夹,Include文件夹,ExamplePkg.dec文件,ExamplePkg.dsc文件,buildx86.bat文件(这个文件的文件名不重要,重要的是里面的批处理命令,).dec文件中内容为[Defines] DEC_...原创 2014-12-10 14:45:05 · 4053 阅读 · 3 评论 -
用C++写uefi程序
uefi编程多半是以C语言进行开发,要想使用类和模板要在cpp文件中以如下方式包含头文件#ifdef __cplusplusextern "C"{#endif#include #include #include #include #include #include #include #include //#include原创 2015-06-07 16:54:50 · 2092 阅读 · 0 评论 -
uefi的c++编程支持new和delete
new和delete其实只是操作符而已,uefi没有提供我们可以自己写__inline void * operator new (size_t Size){void *RetVal;EFI_STATUS Status;if(0 == Size){return NULL;}Status = gBS->AllocatePool原创 2015-06-07 17:14:07 · 718 阅读 · 0 评论 -
error F002: Module for [X64] is not a component of active platform.
编译uefi程序的时候报 error F002: Module for [X64] is not a component of active platform. Please make sure that the ARCH and inf file path are given in the same as in [XXX.dsc]这个错误的大概意思是dsc中的component块中没原创 2015-09-06 10:33:52 · 4018 阅读 · 0 评论 -
GetFirmwareEnvironmentVariable失败返回错误码1314
GetFirmwareEnvironmentVariable是获取efi主板写入到固件里的数据,如果单单调用#define VariableGuidStr "{8BE4DF61-93CA-11D2-AA0D-00E098032B8C}"#define BootOrderStr "BootOrder"DWORD dwRet = 0;原创 2015-09-06 16:02:43 · 4198 阅读 · 0 评论 -
Efi读取环境变量
Status = gRT->GetVariable(VarName, //变量名,如L"BootOrder"&gEfiGlobalVariableGuid, //固定guid值&uiVarAttribute, //UINT32,用来接收变量属性,可以传NULL&BufferSize,原创 2015-09-12 17:07:45 · 2059 阅读 · 0 评论 -
Linux操作EFI固件的环境变量
Windows操作EFI环境变量的方法为GetFirmwareEnvironmentVariable,SetFirmwareEnvironmentVariable详见http://blog.youkuaiyun.com/youyudexiaowangzi/article/details/48245309但是EFI的LInux系统怎么在Linux层操作EFI的环境变量呢,终于找到接口了,linux系统如原创 2015-11-25 09:53:16 · 2816 阅读 · 0 评论 -
uefi创建文件、文件夹导致文件夹中某个文件丢失
uefi创建文件的时候如果路径中有某一级目录不存在会报错,所以要创建文件夹以满足目录的要求,如果只是创建路径中不存在的目录不会有问题,但是如果写个循环依次创建每一级文件夹,就会创建原来就已经存在的文件夹,这个时候就会出现文件系统解析的问题,可能导致文件丢失#define PARTITION_HANDLE EFI_HANDLE#defi原创 2015-06-07 16:39:10 · 1145 阅读 · 0 评论 -
uefi读硬盘第一次成功,第二次却失败
uefi的基本读写硬盘方式熟悉之后可以进行uefi读写硬盘,但是今天遇到一个奇怪的问题,读硬盘的第一次成功了,读取到一个缓冲区中,第二次又读取到这个缓冲区中,只是传入的不是首地址了,然后就发生错误。原来从硬盘读取到内存,内存需要4字节对齐,以前传入首地址自然没有问题,如果往后偏移512字节甚至1024字节也没问题,因为内存申请成功之后首地址就是4字节对齐,512,1024也是4的倍数,如果往后偏移原创 2015-06-01 10:12:11 · 900 阅读 · 0 评论 -
编写uefi的lib时的一个错误
.dsc(...): error 4000: Instance of library class [UefiDriverEntryPoint] is not found这个说明在另一个Pkg中inf文件生成的LIBRARY_CLASS = mylib时,没有指定,也不用指定ENTRY_POINT,而在[LibraryClasses]块中指定了UefiDriverEntryPoi原创 2015-01-08 09:52:02 · 4385 阅读 · 0 评论 -
uefi读取文件
读取文件会需要一个协议 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 在myworkspace目录下搜索 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL;(在搜索选项中选择 "文件内容")可以发现很多文件中有此协议,但是根据命名规范,可以推测文件命中有 simple file system三个单词然后找到simplefilesystem.h文原创 2014-12-16 14:52:09 · 5828 阅读 · 4 评论 -
uefi写lib静态库
静态库就是没有entrypoint,只提供函数,变量等所以inf文件要这么写:[Defines] INF_VERSION = 0x00010005 BASE_NAME = firstlib FILE_GUID = a0b9f7a1-9636-11e4-84a4-74d435dec6原创 2015-01-09 11:45:17 · 2005 阅读 · 2 评论 -
uefi No such file/directory
Uefi中好多地方包含路径,各个地方包含inf里面包含[Packages] [Sources] [Protocols] ....dec里面可以包含Pkg内部的文件夹dsc里面包含外部文件夹作为环境变量路径bat文件里面会使用路径,这些地方都要确保路径的正确原创 2015-01-09 09:44:36 · 620 阅读 · 0 评论 -
uefi读硬盘和分区数据
inf文件:[Defines] INF_VERSION = 0x00010006 BASE_NAME = efidiskx #BASE_NAME = efidisk FILE_GUID = 6987936E-ED34-44db-AE97-1FA5E4ED2117原创 2014-12-18 18:01:52 · 4359 阅读 · 4 评论 -
uefi只有头文件和库的用法
inf文件中需要[BuildOptions]块[BuildOptions] *_*_X64_DLINK_FLAGS = /LIBPATH:"$(WORKSPACE)\testlib\Library" *_*_*_DLINK_FLAGS = EfiMyLib.lib /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /ALIGN:4096 /FI原创 2015-02-02 17:49:23 · 1760 阅读 · 1 评论 -
uefi获取键盘输入
EFI_STATUS EFIAPI UefiMain( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable){UINTN Index;EFI_INPUT_KEY key;原创 2014-12-15 13:24:03 · 2977 阅读 · 0 评论 -
调用Uefi第一个驱动--hello world
前面写了一个helloworld驱动,现在简单调用一下-----------------testlib.c文件----------------------------#include #include #include #include #include #include //#include #include EFI_STATUS EFI原创 2015-01-05 09:40:35 · 2839 阅读 · 1 评论 -
第一个Uefi驱动--helloworld
uefi驱动和普通的uefi应用程序一样,只是,驱动入口进入后,马上结束,但是结束后驱动依然挂载在内存中,其它应用程序可以通过guid和protocol安装该驱动,这样其它应用程序就可以使用该驱动中protocol提供的函数了。就像diskio和blockio可以直接调用,自己写的驱动也可以直接调用,但是diskio和blockio是基础驱动,必须提供,所以bios启动时会自动加载这些基础且重原创 2015-01-05 09:23:54 · 5975 阅读 · 1 评论 -
UEFI申请内存
EFI_STATUS EFIAPI GetMemory(EFI_SYSTEM_TABLE* gST){EFI_STATUS status;CHAR16 *keys=NULL;status=gST->BootServices->AllocatePool(EfiBootServicesData,100,&原创 2014-12-15 13:20:53 · 1685 阅读 · 0 评论