UEFI——使用标准C库

news/2024/12/22 1:56:59/

一、C标准库

C标准库是ANSL C标准为C语言定义的标准库。C标准库包含15个头文件:assert.h ctype.h error.h float.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stddef.h stdio.h stdlib.h string.h time.h。标准库函数与C语言的紧密结合给我们开发程序带来了极大的便利。使用C标准库开发的应用程序有很强的可移植性,标准库为上层应用程序屏蔽了底层平台的差异,使得这些程序可以在任意平台上通过编译。但同时它也给我们很大的约束,尤其是当我们将旧代码移植到UEFI平台的时候,不得不进行权衡。

当我们决定在工程中使用标准库函数的时候,有两种方法。如果我们只是使用有限的几个简单标准库函数,则可以使用宏或inline函数实现这些函数。如果简单的封装不能实现这些函数,就不得不使用EDK2中的StdLib。StdLib为UEFI开发者提供了C标准库。

二、使用标准C库

编写一个简单的C语言代码:

#include <stdio.h>int main(int args , char ** argv)
{printf("Hello world2024!\n");return 0;
}

编写inf文件, 添加标准C库头文件StdLib/StdLib.dec 添加标准C库

[Defines]INF_VERSION = 0x00010006BASE_NAME = MyHelloWorldStdLibCFILE_GUID = c912f194-7f0e-4803-b907-b757b806ec73MODULE_TYPE = UEFI_APPLICATIONVERSION_STRING = 1.0ENTRY_POINT = ShellCEntryLibVALID_ARCHITECTURES = X64[Sources] MyHelloWorldStdLibC.c# 添加标准C库头文件  
[Packages]MdePkg/MdePkg.decShellPkg/ShellPkg.dec StdLib/StdLib.dec# 添加标准C库
[LibraryClasses]LibC LibStdioShellCEntryLib

修改OvmfPkg/OvmfPkgX64.dsc文件,文件末尾添加

##############################################################################
#
#  Include Boilerplate text required for building with the Standard Libraries.
#
##############################################################################
!include StdLib/StdLib.inc
!include AppPkg/Applications/Sockets/Sockets.inc

编译UEFI应用程序,并运行。


http://www.ppmy.cn/news/1522055.html

相关文章

本地Docker部署Navidrome音乐服务器与远程访问听歌详细教程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

springblade-JWT认证缺陷漏洞CVE-2021-44910

漏洞成因 SpringBlade前端通过webpack打包发布的&#xff0c;可以从其中找到app.js获取大量接口 然后直接访问接口&#xff1a;api/blade-log/api/list 直接搜索“请求未授权”&#xff0c;定位到认证文件&#xff1a;springblade/gateway/filter/AuthFilter.java 后面的代码…

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…

15 用户管理

如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用mysql的用户管理 张三只能操纵mytest这个库&#xff0c;李四只能操纵msg这个库&#xff0c;如果给他们root账户&#xff0c;就可以操纵所有库&#xff0c;风险太大 用户 用户信息 用户都存…

AI基础 L4 Uninformed Search I 无信息搜索

Problem-solving agent • Deterministic, fully observable ⇒ single-state problem Agent knows exactly which state it will be in; solution is a sequence • Non-observable ⇒ conformant problem Agent may have no idea where it is; solution (if any) is a sequen…

数据库系统 第40节 数据库安全策略

数据库安全策略是确保数据库系统安全、防止数据泄露和未授权访问的关键措施。以下是一些常见的数据库安全策略&#xff0c;以及它们在实际应用中的一些示例。 1. 访问控制 访问控制是数据库安全的基础&#xff0c;它确保只有授权用户才能访问数据库资源。这通常通过以下方式实…

【开源免费】基于SpringBoot+Vue.JS高校校园招聘服务系统(JAVA毕业设计)

本文项目编号 T 010 &#xff0c;文末自助获取源码 \color{red}{T010&#xff0c;文末自助获取源码} T010&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

利用Stable Diffusion AI图像模型评估智能车模型算法表现(下篇)

今天小李哥将介绍亚马逊云科技的Jupyter Notebook机器学习托管服务Amazon SageMaker上&#xff0c;通过AI图像生成模型Stable Diffusion Upscale和Depth、向量知识库和LangChain Agent&#xff0c;生成用于AI 智能车模型训练的图像数据集并评估模型表现。 本系列共分为上下两篇…