【UEFI基础】EDK网络框架(基础说明)

基础说明

UEFI中的网络框架大致如下:

在这里插入图片描述

红框部分是实现UEFI的EDK2开源项目中网络框架自带的实现,红框之外的部分需要网卡设备商提供驱动。UEFI下通常推荐使用最右边的形式,即网卡设备商提供实现了UNDI的网卡驱动。因此UEFI网络框架的另一个形式如下:

在这里插入图片描述

其中最底下UNDI部分并不在开源的EDK代码中,它代表的是网卡驱动,所以一般由网卡开发商来实现并提供出来供EDK代码集成。比如Intel的I350网卡驱动可以在Intel® 乙太網路介面卡 完整的驱动程序包下载到:

在这里插入图片描述

这里的zip压缩包包含了所有的Intel网卡驱动,其中有一部分就是在UEFI下使用的,如下所示:

在这里插入图片描述

这里的几个压缩包都是UEFI下的Intel网卡驱动源码,其中GigUndiDxe.zip可以用于初始化I350等网卡的,其它则是给更高速率的网卡使用的。

UNDI驱动提供的接口可以与SNP对接。而SNP及以上的部分在EDK中都有源码,它们是UEFI下的网络协议栈。另外关于安全部分(TLS或者HTTPS中的S)也可以认为是UEFI网络协议栈的一部分,虽然并不都在EDK开源代码中,但是也能够在其它地方找到对应的源码。

下面是一般的网络模型与UEFI网络模型的简单对比:

在这里插入图片描述

其实UEFI网络模型的大部分内容都与普通的TCP/IP网络模型一致,只不过多了一些UEFI特有的驱动,主要是MNP和SNP,而UNDI只是网卡在UEFI下的驱动而已。

代码说明

EDK代码中,可以在NetworkPkg目录下找到大部分的网络协议栈代码,以下是位于\NetworkPkg\NetworkComponents.dsc.inc(对应的EDK开源代码版本edk2-stable202211,不同的版本内容可能稍有差异)中描述的各个网络驱动:

!if $(NETWORK_ENABLE) == TRUENetworkPkg/DpcDxe/DpcDxe.inf!if $(NETWORK_SNP_ENABLE) == TRUENetworkPkg/SnpDxe/SnpDxe.inf!endif!if $(NETWORK_VLAN_ENABLE) == TRUENetworkPkg/VlanConfigDxe/VlanConfigDxe.inf!endifNetworkPkg/MnpDxe/MnpDxe.inf!if $(NETWORK_IP4_ENABLE) == TRUENetworkPkg/ArpDxe/ArpDxe.infNetworkPkg/Dhcp4Dxe/Dhcp4Dxe.infNetworkPkg/Ip4Dxe/Ip4Dxe.infNetworkPkg/Udp4Dxe/Udp4Dxe.infNetworkPkg/Mtftp4Dxe/Mtftp4Dxe.inf!endif!if $(NETWORK_IP6_ENABLE) == TRUENetworkPkg/Dhcp6Dxe/Dhcp6Dxe.infNetworkPkg/Ip6Dxe/Ip6Dxe.infNetworkPkg/Udp6Dxe/Udp6Dxe.infNetworkPkg/Mtftp6Dxe/Mtftp6Dxe.inf!endifNetworkPkg/TcpDxe/TcpDxe.infNetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf!if $(NETWORK_TLS_ENABLE) == TRUENetworkPkg/TlsDxe/TlsDxe.infNetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf!endif!if ($(NETWORK_HTTP_BOOT_ENABLE) == TRUE) OR ($(NETWORK_HTTP_ENABLE) == TRUE)NetworkPkg/DnsDxe/DnsDxe.infNetworkPkg/HttpDxe/HttpDxe.infNetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf!endif!if $(NETWORK_HTTP_BOOT_ENABLE) == TRUENetworkPkg/HttpBootDxe/HttpBootDxe.inf!endif!if $(NETWORK_ISCSI_ENABLE) == TRUENetworkPkg/IScsiDxe/IScsiDxe.inf!endif
!endif

可以看到EDK支持IPv4和IPv6两个版本,不过目前BIOS下使用比较多的还是IPv4,后面的分析也主要针对IPv4版本。以上的协议,按照UEFI代码模型分类的话大部分都属于UEFI Driver Model。它们都会在DXE阶段安装类似如下的结构:

//
// Simple Network Protocol Driver Global Variables
//
EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding = {SimpleNetworkDriverSupported,SimpleNetworkDriverStart,SimpleNetworkDriverStop,0xa,NULL,NULL
};

并在BDS阶段执行判断(xxxSupported)和执行具体实现(xxxStart),这种结构称为Driver Binding Protocol。

本文使用开源的EDK代码来具体说明UEFI网络协议栈的实现,可以在GitHub - tianocore/edk2: EDK II或者edk2: https://github.com/tianocore/edk2.git (gitee.com)下载到EDK源码,不过本文使用的测试代码来自edk2-beni: 用于学习和验证UEFI BIOS。 (gitee.com),使用该代码可以直接编译出在QEMU虚拟机上使用的BIOS,并可以使用它来测试UEFI网络代码。

另外,本文主要介绍的是UEFI中的网络协议实现代码,重点关注UEFI,而不是网络实现,所以对于UNDI中的网卡实现逻辑、网络协议的具体格式、网络数据包的具体解析等不会详细介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数_对称矩阵

对称矩阵是线性代数中一种非常重要的矩阵结构,它具有许多独特的性质和应用。下面是对称矩阵的详细描述: ### 定义 对称矩阵,即对称方阵,是指一个n阶方阵A,其转置矩阵等于其本身,即A^T A。这意味着方阵A中的…

python 知识点

ping ping 不能带协议,如:ping baidu.com 引入包顺序 分三级,第一级是 Python 的内置库,第二级是第三方库,第三级是自己的代码。每一级用一个空行间隔 运算符 keyError:key不存在 列表推导式 创建字典 字…

git 如何撤销历史某次merge

git,如何 撤销某一次历史提交或merge,并保留该版本的后续提交? 场景1: 你有两个功能迭代版本的分支,一个是 15 号上线,一个是25号上线。5号的时候产品突然说,这两个版本一起上,然后…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息,用JSON文件保存,比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

ubuntu 执行apt-get update报错

系统是Ubuntu22.04 执行apt-get update 遇到如下情况 E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/jammy/main/binary-arm64/Packages 404 Not Found [IP: 101.6.15.130 443] E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/jammy-upda…

RocketMQ5.0新组件Proxy

前言 RocketMQ 4.x 版本之前,一套完整的 MQ 服务包含的组件有:Namesrv、Broker、Consumer、Producer。 RocketMQ 5.0 版本之后,官方引入了一个新的组件:Proxy,它的作用是什么呢? 架构对比 RocketMQ 4.x …

Day22 二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 方法一:递归法(利用二叉搜索树性质) class Solution { public:TreeNode* lowestCommonAncestor(TreeN…

OpenCV-14图片的四则运算和图片的融合

一、图片的四则运算 1. 加法运算 通过使用API add来执行图像的加法运算 cv2.add(src1, src2)需要再其中传入两张图片。 图片就是矩阵,图片的加法运算就是矩阵的加法运算。 因此加法运算中要求两张图的shape必须是相同的。 首…

基于SpringBoot的旅游网站

目录 前言 开发环境以及工具 项目功能介绍 用户端: 管理端: 详细设计 用户端首页 登录页面 管理端页面 源码获取 前言 本项目是一个基于IDEA和Java语言开发基于SpringBoot的旅游网站。应用包含管理端和用户端等多个功能模块。 改革开放以来&am…

用HTML的原生语法实现两个div子元素在同一行中排列

代码如下&#xff1a; <div id"level1" style"display: flex;"><div id"level2-1" style"display: inline-block; padding: 10px; border: 1px solid #ccc; margin: 5px;">这是第一个元素。</div><div id"…

漏洞复现-任我行CRM系统SmsDataList接口SQL注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

APPnium 自动化实践 :第一步adb 连接手机

1. 下载安装 adb ,添加到环境变量。 ADB Download - Get the latest version of ADB and fastboot 2. 手机开启开发者模式 https://developer.huawei.com/consumer/cn/doc/quickApp-Guides/quickapp-open-developer-option-0000001137005543 3. adb 连接设备 【And…

国家开放大学形成性考核 统一考试 学习资料参考

试卷代号&#xff1a;11107 传感器与测试技术 参考试题 一、单项选择题&#xff08;12小题&#xff0c;每小题3分&#xff0c;共36分&#xff09; 1.以下不属于压电式传感器的特点的是&#xff08; &#xff09;。 A.体积小 B.结构简单…

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么&#xff1f;2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的&#xff1f;4.1 在潜在空间中…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式&#xff0c;例如在时域中表现出平稳性的动态纹理模式&#xff0c;以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…

Python----matplotlib库

目录 plt库的字体&#xff1a; plt的操作绘图函数&#xff1a; plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number)&#xff1a; plt.axes(rect)&#xff1a; plt.subplots_adjust(): plt的读取和显示相关函数&#xff1a; plt库的基础图…

vue和react哪种框架使用范围更广

Vue和React都是非常流行的前端JavaScript框架&#xff0c;它们各自有着广泛的应用场景和支持者。选择使用哪一个框架往往取决于特定的项目需求、开发团队的熟悉程度以及生态系统的偏好。以下是这两个框架的一些主要特点&#xff0c;以帮助比较它们的使用范围&#xff1a; React…