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

UEFI学习笔记(六):EDK II 模块:Libraries,DriversApplication

UEFI学习笔记(六):EDK II Modules:Libraries,Application&Drivers

  • 一、模块(Modules)的概念
    • 1、Library模块
    • 2、Application模块
    • 3、Driver模块
    • 4、Application和Driver的区别
  • 二、EDK II 实现UEFI Application
      • 1)HelloWorld.inf
      • 2)HelloWorld.c
  • 三、EDK II 实现UEFI Driver
      • 1)MyDriver.inf
      • 2)MyDriver.c

一、模块(Modules)的概念

模块是一个最小的可编译单元,在放在Package里面的(Package是EDK II 最小的对外发布的单元)。模块包括LibraryDriverApplication等类型。每一个模块都有一个INF文件。

1、Library模块

Library和Library之间可以互相依赖。

[LibraryClasses.common]## <LibraryClassName>|<LibraryInstancePathToInf/Name.inf>DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf

(p.s. 可以用Doxygen根据代码生成CHM文件,方便查找Libary的功能)
MdePkg(Specs) —>SerialPort(Class)—>DebugLibSerialPort(Instance)—>DebugLib

LibraryClass应的是头文件, Library Intance对应的是一个模块(INF)
LibraryClass主要在include/Library/目录下面找,Libray Instance主要在Libary目录下找

2、Application模块

作用: 调试device、平台分析、工具开发、显示变量、显示设备等

(os loader 是一种特殊的application,执行完成后不会return或者exit,相反会调用EFI boot service gBS->ExitBootServices()来将控制权从fireware 传递给os)

3、Driver模块

Driver可以依赖Library,Driver可以生产protocols,主要用于支持硬件。

4、Application和Driver的区别

Application相当于是一次性的,一执行完就结束,而Driver是一直存在的。App是被UEFI loader加载的,不会装protocols。

二、EDK II 实现UEFI Application

实现一个简单的HelloWorld应用程序

1)HelloWorld.inf

[Defines]INF_VERSION = 0x00010005BASE_NAME = HelloWorldFILE_GUID = 67A6DE6D-XXXX-XXXX-XXXX-XXXXXXXXXXXXMODULE_TYPE = UEFI_APPLICATIONVERSION_STRING = 1.0ENTRY_POINT = HelloWorldEntry[Sources]HelloWorld.c[Packages]MdePkg/MdePkg.dec[LibraryClasses]UefiApplicationEntryPointUefiLib[Guids][Ppis][Protocols]

2)HelloWorld.c

#include <Uefi.h>
#include <Library/UefiApplicationEntryPoint.h>
#include <Library/UefiLib.h>EFI_STATUS
EFIAPI
HelloWorldEntry(IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable
)
{Print (L" HelloWorld!\n");return EFI_SUCCESS;
}

三、EDK II 实现UEFI Driver

1)MyDriver.inf

实现一个简单的MyDriver驱动

[Defines]INF_VERSION = 0x00010005BASE_NAME = MyDriverFILE_GUID = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXMODULE_TYPE = UEFI_DRIVERVERSION_STRING = 1.0ENTRY_POINT = MyDriverEntry[Sources]MyDriver.c[Packages]MdePkg/MdePkg.dec[LibraryClasses]UefiApplicationEntryPoint[Guids][Ppis][Protocols]

2)MyDriver.c

#include <Uefi.h>
#include <Library/UefiApplicationEntryPoint.h>EFI_STATUS
EFIAPI
MyDriverEntry(IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable
)
{//在此实现内容return EFI_SUCCESS;
}

相关文章:

UEFI学习笔记(六):EDK II 模块:Libraries,DriversApplication

UEFI学习笔记&#xff08;六&#xff09;&#xff1a;EDK II Modules&#xff1a;Libraries&#xff0c;Application&Drivers 一、模块&#xff08;Modules&#xff09;的概念1、Library模块2、Application模块3、Driver模块4、Application和Driver的区别 二、EDK II 实现U…...

详解 Pandas 的透视表函数

Pandas 的透视表函数主要为 pivot() 和 pivot_table()&#xff0c;主要的功能为对 DataFrame 的行和列进行重新组合来重塑数据。 一、pivot 函数 pivot 函数只能对数据进行重塑&#xff0c;不能进行聚合 1. 数据准备 import pandas as pddf1 pd.DataFrame({department_id: […...

基于python+django+vue的农业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…...

动态内存管理之malloc,free,calloc和realloc函数

Hello&#xff0c;各位小伙伴们&#xff0c;小编在这里祝福各位中秋佳节快乐呀&#xff0c;今天让我们来学习一下动态内存管理吧&#xff01; 引言 像我们之前在开辟一段空间的时候你可能会使用整型变量来申请一块空间&#xff0c;或者使用数组来申请一段连续的空间&#xff…...

Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改

目录 一.背景 二.思路 三.代码流程 1.colos.xml自定义颜色 2.设置状态栏的背景颜色 3.对View进行操作 ①.对Clock(状态栏左侧的数字时钟)进行操作 ②.对电池(BatteryMeterView)进行操作 4.锁屏状态栏 5.patch汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…...

【CTF Reverse】XCTF GFSJ1092 easyEZbaby_app Writeup(Android+逆向工程+Java)

easyEZbaby_app 究极简单的安卓逆向 解法 得到一个 apk 安装包。 用 jadx 打开&#xff0c;搜索文本 flag&#xff0c;加载所有。 flag 是 obj obj2&#xff0c;来自用户的用户名和密码。 Override // android.view.View.OnClickListenerpublic void onClick(View view) {St…...

ubuntu 22.04 ~24.04 如何修改登录背景

ubuntu 22.04 ~24.04 如何修改登录背景 背景&#xff1a;由于22.04 登录gdm的变更&#xff0c;之前的修改登录背景的方案已经无法使用。现在给大家分享新的使用方法&#xff1a; 1&#xff0c;下载如下路径的脚本&#xff1a; https://download.csdn.net/download/xdhyqd/89…...

Andrej Karpathy谈AI未来:自动驾驶、Transformer与人机融合

引言 在人工智能领域&#xff0c;Andrej Karpathy 是一个无法忽视的名字。从他早期在 OpenAI 的工作&#xff0c;到后来担任 Tesla 的 AI 主管&#xff0c;他在自动驾驶、深度学习等方面的贡献广为人知。最近&#xff0c;卡帕西做客了著名的播客节目 No Priors&#xff0c;他在…...

Vue使用query传参Boolean类型,刷新之后转换为String问题

做项目时发现第一次进入页面时传参是正常的Boolean类型&#xff0c;刷新之后变成了String&#xff0c;这是浏览器进行的一次强制转换&#xff1b; vue-router 传参&#xff0c;不管是 params 形式还是query形式传参&#xff0c;在页面刷新后&#xff0c;params 和 query 对象中…...

开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界(一)

一、前言 学习Qwen2-VL ,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。 Qwen2-VL 具有卓越的图像和视频理解能力,以及多语言支…...

国学盛典 致敬先贤 《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕

9月10日&#xff0c;《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕。中国著名表演艺术家、曾饰演央视86版电视剧《西游记》中“孙悟空”的六小龄童先生与两百余人传统文化传播者、践行者、爱好者齐聚一堂&#xff0c;共同交流。本次会议由中国文化促进会福文化工作委…...

sqlgun新闻管理系统

一&#xff0c;打开主页 1.输入框测试回显点 -1union select 1,2,3# 出现回显点2 2.查看数据库表名 -1union select 1,database(),3# 3.查看表名 -1union select 1,2,group_concat(table_name) from information_schema.tables where table_schemasqlgunnews# 4.查看admin中…...

react hooks--useState

概述 useState 可以使函数组件像类组件一样拥有 state&#xff0c;也就说明函数组件可以通过 useState 改变 UI 视图。那么 useState 到底应该如何使用&#xff0c;底层又是怎么运作的呢&#xff0c;首先一起看一下 useState 。 问题&#xff1a;Hook 是什么? 一个 Hook 就是…...

C/C++:优选算法(持续更新~~)

一、双指针 1.1移动零 链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操…...

【qt信号槽-6】槽函数不执行的一种原因——未知线程

背景&#xff1a; 项目需要调用第三方库&#xff0c;又要涉及多线程&#xff0c;遇到了在connect成功之后&#xff0c;槽函数依然不执行的情况。按照常理&#xff0c;槽函数不执行无非就几种情况&#xff1a; 要么connect未成功。 要么disconnect&#xff0c;或者对象被销毁…...

Leetcode面试经典150题-162.寻找峰值

解法都在代码里&#xff0c;不懂就留言或者私信 想清楚的话会特别简单&#xff0c;你可能想不到这是个二分。。。 class Solution {/**本题题目规定我们只能用O(logN)的时间复杂度来解题&#xff0c;这显然就是让二分嘛而题目给的数组本身是无需&#xff0c;怎么二分呢其实我…...

Vue组件:模板引用ref属性的使用

Vue 组件系列文章&#xff1a; 《Vue组件&#xff1a;创建组件、注册组件、使用组件》 《Vue组件&#xff1a;使用Prop实现父组件向子组件传递数据》 《Vue组件&#xff1a;使用$emit()方法监听子组件事件》 《Vue组件&#xff1a;插槽》 《Vue组件&#xff1a;混入》 《Vue组件…...

robomimic基础教程(一)——基本概念

robosuite和robomimic都是由ARISE Initiative开发的开源工具&#xff0c;旨在推进机器人学习和机器人操作领域的研究。 一、基本概念 robomimic是一个用于机器人示范学习的框架。它提供了在机器人操作领域收集的大量示范数据集&#xff0c;以及用于从这些数据集中学习的离线学…...

7天速成前端 ------学习日志 (继苍穹外卖之后)

前端速成计划总结&#xff1a; 全26h课程&#xff0c;包含html&#xff0c;css&#xff0c;js&#xff0c;vue3&#xff0c;预计7天内学完。 起始日期&#xff1a;9.16 预计截止&#xff1a;9.22 每日更新&#xff0c;学完为止。 学前计划 课…...

讲课研判:基于教师上课视频文件的综合分析

在教育评估与改进的过程中&#xff0c;对教师上课视频文件进行详尽的研判是一项至关重要的工作。它不仅能够帮助教师自我反思、提升教学质量&#xff0c;还能为教育管理者提供决策依据&#xff0c;促进教育教学的整体优化。本文将从教学目标、教学内容、教学效果、教学能力、教…...

Qwen3-VL-30B效果实测:识别复杂图表毫无压力,回答精准又详细

Qwen3-VL-30B效果实测&#xff1a;识别复杂图表毫无压力&#xff0c;回答精准又详细 1. 开篇&#xff1a;当AI真正"看懂"了世界 想象一下这样的场景&#xff1a;你随手拍下一张满是数据和曲线的科研论文图表&#xff0c;AI不仅能准确识别出每个坐标轴的含义&#x…...

Windows下Gradle全局镜像配置避坑指南:从环境变量到init.gradle

Windows下Gradle全局镜像配置避坑指南&#xff1a;从环境变量到init.gradle 每次打开Android Studio准备大干一场时&#xff0c;那个卡在"Downloading gradle-xxx-all.zip"的进度条是不是让你想砸键盘&#xff1f;作为常年与Gradle斗智斗勇的老司机&#xff0c;今天我…...

MySQL 5.7.32 Online DDL避坑指南:如何避免主从延迟和锁等待?

MySQL 5.7.32 Online DDL实战避坑&#xff1a;高并发场景下的零停机表结构变更策略 在数据库运维的日常工作中&#xff0c;表结构变更&#xff08;DDL&#xff09;操作总是让人又爱又恨。特别是当面对千万级数据表时&#xff0c;一个简单的ALTER TABLE操作就可能引发连锁反应—…...

扩散模型技术演进三部曲:从理论奠基到产业落地的核心突破

1. 扩散模型&#xff1a;一场关于"破坏与重建"的技术革命 想象你正在教一个孩子画画&#xff0c;但用的是一种特别的方式&#xff1a;先给他看一张完整的画作&#xff0c;然后你不断地在上面涂抹修改&#xff0c;直到画作变成一团杂乱无章的线条。接着&#xff0c;你…...

技术赋能B端拓客:号码核验行业的迭代与价值升级,氪迹科技法人股东号码核验系统,阶梯式价格

2026年&#xff0c;B端市场竞争进入白热化阶段&#xff0c;拓客逻辑已从“规模扩张”转向“价值深耕”&#xff0c;“精准、高效、低成本”成为所有拓客团队的核心追求。号码核验作为B端拓客的前置基础性环节&#xff0c;其服务质量直接决定线索价值、人力效能与投入回报比&…...

OpenClaw调试进阶:百川2-13B-4bits量化模型响应日志分析

OpenClaw调试进阶&#xff1a;百川2-13B-4bits量化模型响应日志分析 1. 为什么需要关注模型响应日志 上周我在用OpenClaw对接百川2-13B-4bits量化模型时&#xff0c;遇到了一个奇怪的现象&#xff1a;自动化任务执行到一半突然中断&#xff0c;控制台只显示"模型响应异常…...

OpenClaw性能对比测试:Qwen3-4B与Qwen3-32B模型任务执行效率

OpenClaw性能对比测试&#xff1a;Qwen3-4B与Qwen3-32B模型任务执行效率 1. 测试背景与目标 最近在本地部署OpenClaw时遇到了一个实际选择难题&#xff1a;作为个人开发者&#xff0c;到底该选择Qwen3-4B这样的轻量模型&#xff0c;还是直接上Qwen3-32B这样的"大家伙&qu…...

STM32F4 Flash读写避坑指南:如何安全存储关键数据(附完整代码)

STM32F4 Flash读写避坑指南&#xff1a;如何安全存储关键数据&#xff08;附完整代码&#xff09; 第一次在STM32F4上操作Flash时&#xff0c;我遇到了一个令人抓狂的问题——设备运行几小时后数据莫名其妙丢失。经过三天三夜的调试才发现&#xff0c;原来是在写入前忘记检查扇…...

别再只建网站了!宝塔面板的‘Node项目’功能,让你的Express/Koa后端服务上线更简单

解锁宝塔面板的隐藏技能&#xff1a;Node.js后端服务一键部署实战指南 你是否还在为Node.js项目的繁琐部署流程而头疼&#xff1f;手动配置PM2、Nginx反向代理、环境变量设置...这些操作不仅耗时耗力&#xff0c;还容易出错。其实&#xff0c;你每天都在使用的宝塔面板早已内置…...

阿博图书馆管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 在信息化时代背景下&#xff0c;图书馆作为知识传…...