当前位置: 首页 > news >正文

UEFI——使用标准C库

一、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.lryc.cn/news/436237.html

相关文章:

  • [全网首发]怎么让国行版iPhone使用苹果Apple Intelligence
  • C语言-综合案例:通讯录
  • XWiki中添加 html 二次编辑失效
  • 外贸|基于Java+vue的智慧外贸平台系统(源码+数据库+文档)
  • Elasticsearch:无状态世界中的数据安全
  • 动手学习RAG:迟交互模型colbert微调实践 bge-m3
  • springboot 整合quartz定时任务
  • erlang学习: Mnesia Erlang数据库3
  • 善于善行——贵金属回收
  • 用CSS 方式设置 table 样式
  • Elasticsearch7.x 集群迁移文档
  • 高空抛物检测算法的应用场景解析
  • Leetcode 无重复字符的最长子串
  • 用命令行的方式启动.netcore webapi
  • Spring6详细学习笔记(IOC+AOP)
  • @RequestMapping 基于哪个库进行通信
  • GPIO(General Purpose Input/Output)输入/输出
  • 两个pdf合并成一个pdf,这些pdf合并小技巧了解下
  • Transformer学习(2):自注意力机制
  • 分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序
  • 【React】Vite 构建 React
  • 算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 【linux】一种基于虚拟串口的方式使两个应用通讯
  • 并行程序设计基础——并行I/O(3)
  • 性能测试-jmeter脚本录制(十五)
  • 关系型数据库 - MySQL I
  • 解锁AI写作新境界:5款工具让你的论文创作事半功倍
  • 一文读懂多组学联合分析产品在医学领域的应用
  • js react 笔记 2
  • 快速使用react 全局状态管理工具--redux