UEFI 之 HelloWorld

2024-05-29 03:48
文章标签 helloworld uefi

本文主要是介绍UEFI 之 HelloWorld,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基础的Hello World

main.c
/*main.c */
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/UefiApplicationEntryPoint.h>EFI_STATUS
EFIAPI
UefiMain (IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable)
{SystemTable -> ConOut-> OutputString(SystemTable -> ConOut, L"HelloWorld\n"); return EFI_SUCCESS;
}
main.inf
##[Defines]INF_VERSION                    = 0x00010005BASE_NAME                      = main                   #输出文件的名字为 main.efiFILE_GUID                      = 6987936E-ED34-ffdb-AE97-1FA5E4ED2117MODULE_TYPE                    = UEFI_APPLICATION #模块类型:UEFI_DRIVER,DXE_DRIVER,DXE_RUNTIME_DRIVER,UEFI_APPLICATION,BASE,等VERSION_STRING                 = 1.0ENTRY_POINT                    = UefiMain               #入口函数UEFI_HII_RESOURCE_SECTION      = TRUE
#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
## 源文件
[Sources]main.c# .dec里面定义 include的路径
[Packages]MdePkg/MdePkg.dec#要链接的库
[LibraryClasses]UefiApplicationEntryPointUefiLib[Protocols] 
[FeaturePcd]
[Pcd.common]
[Guids]#编译选项, = 表示选项附加到默认选项后面。 == 表示仅使用所定义的选项,弃用默认选项。
[BuildOptions]#MSFT:*_*_*_CC_FLAGS ==  /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1ib2 /GL  /EHs-c- /GR- /GF /Gy /Zi /Gm /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006 /FAs /Oi-#MSFT:*_*_*_CC_FLAGS =   /wd4804 #MSFT:Debug_*_IA32_CC_FLAGS = #MSFT:Debug_*_X64_CC_FLAGS = #MSFT:Release_*_IA32_CC_FLAGS = #MSFT:Release_*_IA32_CC_FLAGS = #MSFT:Release_*_IA32_DLINK_FLAGS = #GCC:Release_*_IA32_CC_FLAGS = 
将inf加入到EmulatorPkg/EmulatorPkg.dsc进行比编译
[Components]
Demo/01_helloworld/main.inf

编译

source edkenv.sh
EmulatorPkg/build.sh
运行

运行Emulator后进入Shell命令行

EmulatorPkg/build.sh run
(gdb) r

Continue进入命令行
Shell> fs0: 进入fs0 目录
Emulator默认的fs0目录在edk2/Build/Emulator/DEBUG_GCC5/X64
FS0:\> main.efi

问题

问题一:
将inf加入到EmulatorPkg/EmulatorPkg.dsc进行编译出现如下问题;

edk2/Demo/01_helloworld/main.c:7:1: error: conflicting types for ‘UefiMain’UefiMain (^
In file included from <command-line>:0:0:
edk2/Build/Emulator/DEBUG_GCC5/X64/Demo/01_helloworld/main/DEBUG/AutoGen.h:67:1: note: previous declaration of ‘UefiMain’ was here
make: 对“tbuild”无需做任何事。UefiMain (

解决,是由于在函数名前少了一个宏EFIAPI

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

这篇关于UEFI 之 HelloWorld的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012557

相关文章

Python简单入门教程helloworld

Python 学习资源 推荐书籍: Python核心编程(第二版) (强烈推荐,建议有一定基础的看,或者看完简明Python教程再看) Python 基础教程 第二版 (入门,没有核心编程好,但也不错) 编写高质量代码:改善Python程序的91个建议 (进阶,有一定基础再看) 书籍下载: Python 教程(部分内容来源于网络, 历时一年多总结整理的,给刚刚入门的

win10 gpt分区+uefi引导 卸载双系统ubuntu

1、首先暴力卸载ubuntu 在win10里面磁盘管理中找到对应的linux磁盘分区 删除卷OK 2、重启 出现下面(根据机型不同界面可能不一样 ) 3、exit 退出grub引导 进入uefi引导  选择win10引导项 (当然你要是一直按着进入bios boot的那个按键的话 也不用看第二步了 直接选择windows启动项进去 dell的话是F12) 4、进入

HelloWorld 模块

helloworld.c 代码 #include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){printk(KERN_ALERT "Hello world\n");return 0;}static void hello_exit(v

UEFI——Shell下读取SMBIOS信息

一、SMBIOS简介 SMBIOS的全称为System Management BIOS,它不是一个BIOS,只是与BIOS相关。它是一个规范,定义了BIOS传递给操作系统的系统管理信息。它也表示了一系列的数据结构,包含了各类信息,由BIOS启动过程中创建并放在特定的内存,之后操作系统可以拿来用。 整个 SMBIOS_STRUCTURE 结构体定义了 SMBIOS 表中的一个基本单元。每个 SM

ROS程序设计系列 - 5.实例helloworld

ROS程序设计系列 - 5.实例helloworld 1. 源由2. 步骤Step 1:安装ROS系统Step 2:创建框架工程Step 3:检查工程结构Step 4:创建CPP文件Step 5:修改配置文件Step 6:编译工程 3. 测试Step 1: 启动ROS CoreStep 2: 启动Hello程序 4. 总结5. 参考资料6. 补充 1. 源由 在做《Ardupil

【UEFI基础】SMBIOS基础和使用

SMBIOS的定义 SMBIOS的全称是System Management BIOS,关于它的理解包括: 它不是一个BIOS,之所以出现了BIOS字样,是因为它跟BIOS有关,仅此而已。它是一个规范,定义了BIOS传递给操作系统的系统管理信息,具体有哪些信息,可以参考SMBIOS规范。它也可以表示一系列的数据结构,包含了各类信息,由BIOS启动过程中创建并放到特定的内存,之后操作系统可以拿来用

UEFI BIOS之SMBIOS

SMBIO spec: SMBIOS Specification (dmtf.org) https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.5.0.pdf SMBIOS SMBIOS(System Management BIOS)是一种标准化的系统信息数据结构,旨在提供有关计算机硬件配置、系统功能

使用命令行窗口新建一个Java文件,输出HelloWorld

进入桌面 cd desktop 在桌面新建文件夹 mkdir zwt 进入文件夹,新建.Java文件 cd zwtecho. > helloWorld.java 使用记事本打开文件编写代码 notepad HelloWorld.java 此时电脑就会自动打开文件,直接编写代码 public class HelloWorld(){public static void mi

Qwen-7B-Chat大模型安装训练推理-helloworld

初始大模型之helloworld编写 开发环境:modelscope GPU版本上测试的,GPU免费36小时 ps:可以不用conda直接用环境自带的python环境使用 魔搭社区 安装conda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh 1.2 bash Minicond

Shiro HelloWorld (二)从数据库中获得数据

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、创建users表,插入一条记录</span> <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb