首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用gnu编译uefi应用程序?

如何使用gnu编译uefi应用程序?
EN

Stack Overflow用户
提问于 2015-07-20 11:04:59
回答 2查看 10.2K关注 0票数 2

我试图使用gnu-efi编译uefi代码。但我不明白如何编译我的uefi应用程序代码。

我得到gnu-efi 3.0.2,解压缩并输入make && make install。我写你好世界代码:

代码语言:javascript
复制
#include <efi.h>
#include <efilib.h>

EFI_STATUS efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
    InitializeLib(ImageHandle, SystemTable);
    Print(L"Hello, world!\n");

    return EFI_SUCCESS;
}

我的操作系统是Ubuntu15.04。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-20 13:14:10

  1. 包括gnu-efi文件。 #包含 #包括 它看起来像你的包括被移除的地方
  2. 创建制作文件;

如果您要在Linux环境中为Linux构建一个"Hello,World“程序,您可以不使用Makefile编译它。不过,在Linux中为EFI构建程序,本质上是一种交叉编译操作。因此,它需要使用不寻常的编译和链接选项,以及一个邮政链接操作,将程序转换为EFI将接受的形式。尽管您可以手动键入所有相关命令,但是Makefile会有很大帮助。

代码语言:javascript
复制
ARCH            = $(shell uname -m | sed s,i[3456789]86,ia32,)

OBJS            = main.o
TARGET          = hello.efi

EFIINC          = /usr/include/efi
EFIINCS         = -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol
LIB             = /usr/lib64
EFILIB          = /usr/lib64/gnuefi
EFI_CRT_OBJS    = $(EFILIB)/crt0-efi-$(ARCH).o
EFI_LDS         = $(EFILIB)/elf_$(ARCH)_efi.lds

CFLAGS          = $(EFIINCS) -fno-stack-protector -fpic \
          -fshort-wchar -mno-red-zone -Wall 
ifeq ($(ARCH),x86_64)
  CFLAGS += -DEFI_FUNCTION_WRAPPER
endif

LDFLAGS         = -nostdlib -znocombreloc -T $(EFI_LDS) -shared \
          -Bsymbolic -L $(EFILIB) -L $(LIB) $(EFI_CRT_OBJS) 

all: $(TARGET)

hello.so: $(OBJS)
    ld $(LDFLAGS) $(OBJS) -o $@ -lefi -lgnuefi

%.efi: %.so
    objcopy -j .text -j .sdata -j .data -j .dynamic \
        -j .dynsym  -j .rel -j .rela -j .reloc \
        --target=efi-app-$(ARCH) $^ $@

参考资料:

http://www.rodsbooks.com/efi-programming/hello.html

票数 6
EN

Stack Overflow用户

发布于 2019-03-23 19:47:07

在Ubuntu 18.04中,这两行:

代码语言:javascript
复制
LIB             = /usr/lib64

EFILIB          = /usr/lib64/gnuefi

需要改为:

代码语言:javascript
复制
LIB             = /usr/lib

EFILIB          = /usr/lib
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31514866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档