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

UEFI基础——测试用例Hello Word

Hello 测试用例

硬件环境:龙芯ls3a6000平台
软件环境:龙芯uefi固件

GUID获取网址:https://guidgen.com

一、创建工程

  • mkdir TextPkg/
  • 三个文件 Hello.c 、 Hello.inf 、HelloPkg.dsc

1.1 Hello.c

/** @fileThe application to print hello word.Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution.  The full text of the license may be found at
http://opensource.org/licenses/bsd-license.phpTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.**/#include <Uefi.h>
#include <Library/UefiLib.h>
//#include <Library/UefiBootServicesTableLib.h>EFI_STATUS
EFIAPI
MyHello(IN EFI_HANDLE           ImageHandle,  IN EFI_SYSTEM_TABLE     *SystemTable)                                                                                                                                              
{Print(L"Hello World!\n");
//  gST->ConOut->OutputString(SystemTable->ConOut, L"Hello World!\n");   
//  SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello World!\n");   return EFI_SUCCESS;
}

1.2 Hello.inf

## @file
#  The application to print hello word.
#
#  The application pops up a menu showing all the boot options referenced by
#  BootOrder NV variable and user can choose to boot from one of them.
#  
#  Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#  
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#  
##[Defines]INF_VERSION                    = 0x00010005BASE_NAME                      = HelloFILE_GUID                      = ae9fad76-2e2a-457f-bf1f-90c9c5afe889MODULE_TYPE                    = UEFI_APPLICATIONVERSION_STRING                 = 1.0 ENTRY_POINT                    = MyHello#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#[Sources]Hello.c[Packages]MdePkg/MdePkg.decMdeModulePkg/MdeModulePkg.dec[LibraryClasses]UefiLibUefiApplicationEntryPoint

1.3 HelloPkg.dsc

## @file
#  The application to print hello word.
#
#  The application pops up a menu showing all the boot options referenced by
#  BootOrder NV variable and user can choose to boot from one of them.
#  
#  Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#  
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#  
##[Defines]PLATFORM_NAME					 = HelloPkgPLATFORM_GUID                  = 41ee9fe9-c2aa-4f67-a6e5-5bae7560438dPLATFORM_VERSION               = 0.1DSC_SPECIFICATION              = 0x00010005SUPPORTED_ARCHITECTURES        = LOONGARCH64BUILD_TARGETS                  = DEBUG|RELEASESKUID_IDENTIFIER               = DEFAULTPLATFORM_DIRECTORY             = LsRefCodePkg/SampleCode/Desktop/CONFIG_FILE                    = $(PLATFORM_DIRECTORY)/Script/Desktop.cfg!include $(CONFIG_FILE)
!if ($(CPU_TYPE) == 3A5000 || $(CPU_TYPE) == 3B5000)
!include $(PLATFORM_DIRECTORY)/Script/Loongson3a.fdf.incPLATFORM_NAME                  = Ls3a50007aCPU_TYPE                       = 3A5000CORES_PRE_NODE                 = 4TOT_NODE_NUM                   = 1APPEND_FLAG                    = -DLOONGSON_3A5000
!elseif ($(CPU_TYPE) == 3A6000)
!include $(PLATFORM_DIRECTORY)/Script/Loongson3a.fdf.incPLATFORM_NAME                  = Ls3a60007aCPU_TYPE                       = 3A6000CORES_PRE_NODE                 = 8TOT_NODE_NUM                   = 1APPEND_FLAG                    = -DLOONGSON_3A5000 -DFLAT_MODE
!elseif ($(CPU_TYPE) == 2K2000)
!include $(PLATFORM_DIRECTORY)/Script/Loongson2k.fdf.incPLATFORM_NAME                  = Ls2k2000CPU_TYPE                       = 2K2000CORES_PRE_NODE                 = 2TOT_NODE_NUM                   = 1APPEND_FLAG                    = -DLOONGSON_2K2000 -DLS2K2000_GMEM_SIZE="256"
!endifOUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)NODE_OFFSET                    = 44DEFINE COMMON_BUILD_OPTIONS_FLAGS = -DLS$(CPU_TYPE) -DCLK_BASE=$(BASE_CLK) -DHIGH_MEM_BASE_ADDRESS=$(HIGH_MEM_BASE_ADDRESS) -DHT0_FREQ=$(HT0_FREQ) -DDDR_FREQ=$(MEM_FREQ) -DLS$(SOUTH_BRIDGE) -DCLK_DDR=$(DDR_CLK) -DCLK_REF=$(REF_CLK) -DMPS_ADDR=$(MPS_ADDR) -DMPS_STEP=$(MPS_STEP) -DVOL_LEVEL_HI=$(VOL_LEVEL_HI) -DVOL_LEVEL_MI=$(VOL_LEVEL_MI) -DVOL_LEVEL_LO=$(VOL_LEVEL_LO) -DCACHED_MEMORY_ADDR=$(CACHED_MEMORY_ADDR) -DUNCACHED_MEMORY_ADDR=$(UNCACHED_MEMORY_ADDR) -DTOT_NODE_NUM=$(TOT_NODE_NUM) -DCORES_PER_NODE=$(CORES_PRE_NODE) -DPCIE_CONF_BASE=$(PCIE_CONF_BASE) $(APPEND_FLAG) -DVGA_HOTP_LEVEL=$(VGA_HOTP_LEVEL) -DNODE_OFFSET=$(NODE_OFFSET) -DLS7A_LINK_ID_BUF="0"COMMON_BUILD_OPTIONS_FLAGS        = -DTOT_7A_NUM="1" -DBEEP_NEW="1" $(COMMON_BUILD_OPTIONS_FLAGS)!if $(BONITO_100M) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DBONITO_100M $(COMMON_BUILD_OPTIONS_FLAGS)!elseCOMMON_BUILD_OPTIONS_FLAGS   = -DBONITO_25M $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(CPU_FREQ)COMMON_BUILD_OPTIONS_FLAGS   = -DCPU_FREQ=$(CPU_FREQ) $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(SPI_DUAL_LINE) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DSPI_DUAL_LINE $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(COMP_TYPE) == DEBUGCOMMON_BUILD_OPTIONS_FLAGS   = -DASM_DEBUG $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(PG_MODE) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DPG_MODE $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(GMEM_ENABLE) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DGMEM_ENABLE='1' $(COMMON_BUILD_OPTIONS_FLAGS)!elseCOMMON_BUILD_OPTIONS_FLAGS   = -DGMEM_ENABLE='0' $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(LS7A_PHYS48_TO_HT40) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DLS7A_PHYS48_TO_HT40 $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(CODEC_VERBTABLE_SUPPORT) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DFIX_VERB_TABLE $(COMMON_BUILD_OPTIONS_FLAGS)!endif!if $(EFFICIENT_CORE_DYNAMIC_CONTROL) == TRUECOMMON_BUILD_OPTIONS_FLAGS   = -DEFFICIENT_CORE_DYNAMIC_CONTROL $(COMMON_BUILD_OPTIONS_FLAGS)!endif############################################################################
#
# Defines for default states.  These can be changed on the command line.
# -D FLAG=VALUE
############################################################################[BuildOptions]GCC:RELEASE_*_*_CC_FLAGS       = -DMDEPKG_NDEBUG -DSPEEDUPGCC:*_*_*_CC_FLAGS             = $(COMMON_BUILD_OPTIONS_FLAGS)*_*_LOONGARCH64_PP_FLAGS       = $(COMMON_BUILD_OPTIONS_FLAGS)*_*_*_ASLPP_FLAGS              = $(COMMON_BUILD_OPTIONS_FLAGS)*_*_*_VFRPP_FLAGS              = $(COMMON_BUILD_OPTIONS_FLAGS)[LibraryClasses]UefiLib                          | MdePkg/Library/UefiLib/UefiLib.infUefiApplicationEntryPoint        | MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.infUefiBootServicesTableLib         | MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.infDebugLib                         | MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.infBaseLib                          | MdePkg/Library/BaseLib/BaseLib.infPcdLib                           | MdePkg/Library/BasePcdLibNull/BasePcdLibNull.infBaseMemoryLib                    | MdePkg/Library/BaseMemoryLib/BaseMemoryLib.infSerialPortLib                    | LsRefCodePkg/Library/SerialPortLib/SerialPortLib.infPrintLib                         | MdePkg/Library/BasePrintLib/BasePrintLib.infDebugPrintErrorLevelLib          | MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.infIoLib                            | MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.infRegisterFilterLib                | LsRefCodePkg/Core/Library/RegisterFilterLib/RegisterFilterLib.infMemoryAllocationLib              | MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.infDevicePathLib                    | MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLibDevicePathProtocol.infUefiRuntimeServicesTableLib      | MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf[Components]TextPkg/Hello.inf

二、编译工程

2.1 配置环境变量

  • export WORKSPACE=$PWD
  • export EDK_TOOLS_PATH=$PWD/BaseTools/
  • source edksetup.sh

2.2 执行编译

build -a LOONGARCH64 -t GCC83 -p TextPkg/HelloPkg.dsc -j log.txt

  • a 指定架构
  • t 指定工具链版本
  • p 指定工程路径
  • j 编译输出存放位置

2.3 编译截图

在这里插入图片描述

2.4 编译结果

在这里插入图片描述

2.5 运行结果

在这里插入图片描述

相关文章:

UEFI基础——测试用例Hello Word

Hello 测试用例 硬件环境&#xff1a;龙芯ls3a6000平台 软件环境&#xff1a;龙芯uefi固件 GUID获取网址&#xff1a;https://guidgen.com 一、创建工程 mkdir TextPkg/三个文件 Hello.c 、 Hello.inf 、HelloPkg.dsc 1.1 Hello.c /** fileThe application to print hello …...

【tomcat、java】

java&#xff1a;maven配置 1.安装插件 <build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port&…...

京东获取推荐商品列表 API

item_recommend-获取推荐商品列表 请求参数 请求参数&#xff1a;type 参数说明&#xff1a;type:推荐类型 进入API测试页 响应参数 Version: Date: 名称类型必须示例值描述 items items[]0获取推荐商品列表 num_iid Bigint010021415166448宝贝ID detail_url String0http…...

rust cfg的使用

前提是一个crate倒入另一个crate。 先看结构 test_lib目录结构 这与另一个crate处于同一个目录,所以另一crate倒入的时候在Cargo.toml中使用如下语句。 test_lib = {path = "../test_lib" }先在test_lib/src/abc/abc.rs中添加没有cfg的两个函数做测试。 pub fn…...

电脑屏幕怎么录制?5 个最佳免费录屏软件

您是否想使用网络摄像头录制优酷视频、抖音直播或在线课程等项目&#xff0c;但完全不知道如何开始&#xff1f; 不用担心。有很多软件选项可以帮助您。虽然每一款都有不同的功能&#xff0c;但它们都能够录制网络摄像头并输出精美的高质量视频。 以下是我们精选的最佳作品。…...

vscode 调试使用 make 编译的项目

1、首先点击运行 --> 启动调试&#xff1a; 2、选择g或gcc生成和调试活动文件&#xff1a; 3、出现下面提示是正常的&#xff0c;点击仍要调试&#xff1a; 点击打开“launch.json”&#xff1a; 4、此时会在项目工作目录下生成tsak.josn和launch.json文件&#xff1a; 如…...

Docker修改阿里源

在一次安装rtmp推流服务时&#xff0c;总是无法下载源&#xff0c;估计是国外资源下载超时照成的&#xff0c;于是想到修改为国内源。 docker pull alfg/nginx-rtmp Using default tag: latest latest: Pulling from alfg/nginx-rtmp 530afca65e2e: Retrying in 7 seconds c20…...

有必要买一台内衣裤专洗机吗?家用小洗衣机推荐

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高强度的清洁&#xff0c;而小小…...

高精度与高精度的乘法---基础算法

看到一个博主写得不错&#xff0c;我也照猫画虎&#xff1a;&#xff09; 原因 在计算两个非负整数时&#xff0c;如果位数很大&#xff0c;连 long long 类型都存储不了&#xff0c;就要使用到高精度的乘法 原理 原理依旧是模拟人计算两个数的积&#xff0c;早在小学我们已…...

护眼灯有效果吗?科普护眼灯的作用与推荐

现在我们很多家长对自己孩子的视力十分关心&#xff0c;生怕自己的孩子是近视、远视、弱视等等。对于父母而言&#xff0c;在孩子读书压力大课业重的关键时期&#xff0c;为孩子选择合适的桌椅&#xff0c;保护灯具从而保护孩子的眼睛是非常重要的事情!那么买给孩子读书做功课的…...

【办公自动化】在Excel中按条件筛选数据并存入新的表2.0(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

HDLbits: Lfsr5

我的错误写法&#xff0c;半成品&#xff0c;完全错误&#xff1a; module top_module(input clk,input reset, // Active-high synchronous reset to 5h1output [4:0] q ); dff dff_1(clk, 0 ^ q[0],q[4]);dff dff_2(clk, q[4] ,q[3]);dff dff_3(clk, q[3] ^ q[0] ,q[2]);…...

Visual Studio 错误CS0006:未能找到元数据文件踩坑记录

前言 在写项目的时候&#xff0c;添加了个新的Nuget包&#xff0c;突然就不行&#xff0c;然后就是报错&#xff0c;找不到文件、 出现的原因是因为项目之间互相引用出现了问题&#xff0c;比如如下情况 先版本回退 如果有Git仓库 第一时间去看Git 文件比较&#xff0c;找到…...

tcpdump(三)命令行参数讲解(二)

一 tcpdump实战详解 骏马金龙tcpdump详解 强调&#xff1a; 注意区分选项参数和过滤条件 本文继上篇 网卡没有开启混杂模式 tcpdump默认开启混杂模式 --no-promiscuous-mode --> 可以指定在非混杂模式抓包 ① -vv 控制详细内容的输出 ② -s -s 长度: 可以只…...

面试算法25:链表中的数字相加

题目 给定两个表示非负整数的单向链表&#xff0c;请问如何实现这两个整数的相加并且把它们的和仍然用单向链表表示&#xff1f;链表中的每个节点表示整数十进制的一位&#xff0c;并且头节点对应整数的最高位数而尾节点对应整数的个位数。例如&#xff0c;两个分别表示整数98…...

APP如何设计应用的屏幕截图以提高下载量

APP高质量的应用程序商店屏幕截图&#xff0c;对于建立初始信任以及向潜在用户推销应用程序的优势至关重要。创建应用程序商店屏幕截图&#xff0c;以最好的方式展示我们的应用程序&#xff0c;从而优化应用形象。 1、使用大标题。 确保重点突出品牌的独特性&#xff0c;在屏幕…...

qt 关于自定义控件,然后其他页面提升后背景样式表不生效问题

一、自定义控件如果是widget &#xff0c;需要再widget 里放一个QFrame &#xff0c;在QFrame设置样式表背景才行 二、重写paintEvent void Form::paintEvent(QPaintEvent *e) {QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widg…...

对比纯软开与嵌入式硬件开发谁更好呢?

对比纯软开与嵌入式硬件开发谁更好呢&#xff1f; 你的纠结和犹豫是理解的&#xff0c;职业选择确实是一个重要的决策。我明白你在嵌入式和软件开发之间犹豫不决的原因。让我给你提供一些建议&#xff0c;帮助你做出更明智的决定。最近很多小伙伴找我&#xff0c;说想要一些嵌入…...

软考 系统架构设计师系列知识点之软件质量属性(5)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之软件质量属性&#xff08;4&#xff09; 所属章节&#xff1a; 第8章. 系统质量属性与架构评估 第2节. 面向架构评估的质量属性 相关试题 5. 某公司欲开发一个网上商城系统。在架构设计阶段&#xff0c;公司的架构师…...

修改ubuntu服务器fs文件最大打开数

起因 在对项目进行压测的时候&#xff0c;请求异常 java.net.SocketException: socket closed&#xff0c;查看nginx代理服务器的日志。tail -f -n500 /var/log/nginx/error.log 显示 文件打开数太多socket() failed (24: Too many open files) while connecting to upstream …...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...