【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) == TRUE
  NetworkPkg/DpcDxe/DpcDxe.inf

  !if $(NETWORK_SNP_ENABLE) == TRUE
    NetworkPkg/SnpDxe/SnpDxe.inf
  !endif

  !if $(NETWORK_VLAN_ENABLE) == TRUE
    NetworkPkg/VlanConfigDxe/VlanConfigDxe.inf
  !endif

  NetworkPkg/MnpDxe/MnpDxe.inf

  !if $(NETWORK_IP4_ENABLE) == TRUE
    NetworkPkg/ArpDxe/ArpDxe.inf
    NetworkPkg/Dhcp4Dxe/Dhcp4Dxe.inf
    NetworkPkg/Ip4Dxe/Ip4Dxe.inf
    NetworkPkg/Udp4Dxe/Udp4Dxe.inf
    NetworkPkg/Mtftp4Dxe/Mtftp4Dxe.inf
  !endif

  !if $(NETWORK_IP6_ENABLE) == TRUE
    NetworkPkg/Dhcp6Dxe/Dhcp6Dxe.inf
    NetworkPkg/Ip6Dxe/Ip6Dxe.inf
    NetworkPkg/Udp6Dxe/Udp6Dxe.inf
    NetworkPkg/Mtftp6Dxe/Mtftp6Dxe.inf
  !endif

  NetworkPkg/TcpDxe/TcpDxe.inf
  NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf

  !if $(NETWORK_TLS_ENABLE) == TRUE
    NetworkPkg/TlsDxe/TlsDxe.inf
    NetworkPkg/TlsAuthConfigDxe/TlsAuthConfigDxe.inf
  !endif

  !if ($(NETWORK_HTTP_BOOT_ENABLE) == TRUE) OR ($(NETWORK_HTTP_ENABLE) == TRUE)
    NetworkPkg/DnsDxe/DnsDxe.inf
    NetworkPkg/HttpDxe/HttpDxe.inf
    NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
  !endif

  !if $(NETWORK_HTTP_BOOT_ENABLE) == TRUE
    NetworkPkg/HttpBootDxe/HttpBootDxe.inf
  !endif

  !if $(NETWORK_ISCSI_ENABLE) == TRUE
    NetworkPkg/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中的网卡实现逻辑、网络协议的具体格式、网络数据包的具体解析等不会详细介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HCIA-Datacom题库(自己整理分类的)_02_网络设备基础多选【14道题】

注:红色题目是答案有争议。 1.以下哪些MAC地址不能作为主机网卡的MAC地址? 00-02-03-04-05-06 02-03-04-05-06-07 01-02-03-04-05-06 03-04-05-06-07-08 解析:MAC地址的第二位必须是偶数。 2.堆叠,集群技术有以下哪些优势&…

微信小程序:图片处理

参考&#xff1a;image | 微信开放文档 1、针对image图片属性 <view class"page"><view class"page__hd"><text class"page__title">image</text><text class"page__desc">图片</text></vie…

How to understand DataArts Insight in Huawei Cloud

How to understand DataArts Insight in Huawei Cloud 概述什么是DataArts Insight为什么选择华为云DataArts Insight多业务场景全覆盖&#xff0c;实现企业智能分析产品架构产品功能数据接入数据加工仪表板数据大屏交互式分析嵌入式分析智能分析助手智能洞察BI内存引擎企业级数…

HTML5-简单文件操作

文件操作 简介 概念&#xff1a;可以通过file类型的input控件或者拖放的方式选择文件进行操作 语法格式&#xff1a; <input type"file" multiple>属性 multiple&#xff1a;表示是否选择多个文件 accept&#xff1a;用于设置文件的过滤类型&#xff08;MI…

AI:115-基于深度学习的创意广告图像生成

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

七、Redis 缓存 —— 超详细操作演示!

七、Redis 缓存 —— 超详细操作演示&#xff01; 七、Redis 缓存7.1 Jedis 客户端7.1.1 Jedis 简介7.1.2 创建工程7.1.3 使用 Jedis 实例7.1.4 使用 JedisPool7.1.5 使用 JedisPooled7.1.6 连接 Sentinel 高可用集群7.1.7 连接分布式系统7.1.8 操作事务 7.2 金融产品交易平台7…

Power Automate删除SharePoint Online或OneDrive for Business文件版本历史

SharePoint Online和OneDrive for Business支持版本控制&#xff0c;可以保留文件的版本历史&#xff0c;方便用户随时查看和恢复以前的版本。但该功能也会占用大量SharePoint Online或OneDrive for Business存储空间。官方删除版本历史的方法无法批量操作&#xff0c;故今天提…

122基于matlab的CSO-SVM,BA-SVM模式识别模型

基于matlab的CSO-SVM&#xff0c;BA-SVM模式识别模型。优化SVM的两个参数晚上最佳参数确定。输出分类识别结果和准确率。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 122鸡群优化算法蝙蝠优化算法 (xiaohongshu.com)

ASP.NET Core基础之图片文件(一)-WebApi图片文件上传到文件夹

阅读本文你的收获&#xff1a; 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中&#xff0c;学习了如何获取WebApi中的静态图片&#xff0c;本文继续分享如何上传图片。 那么…

Linux 如何 kill 指定的 python 进程

文章目录 写在前面一、显示python相关的进程二、找到自己想要 kill 的进程&#xff0c;执行下述指令 写在前面 自己的系统是 Ubuntu 20.04 一、显示python相关的进程 ps -ef | grep python显示结果如下 其中&#xff0c;第二列分别是各个进程的 PID 号。 二、找到自己想要…

芯课堂 | MCU之TIMER精准延时

引言 华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别&#xff0c;为了让您更加简单的使用这一功能&#xff0c;下面小编将以SWM190为例&#xff0c;给大家展示如何使用SWM系列产品的TIMER功能。 TIMER精准延时 一、TIMER简介 TIMER是一种定时器工具&#xff0c;…

数字信号处理期末复习——基础知识汇总(三)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

(vue)增加行,对应行删除

(vue)增加行&#xff0c;对应行删除 效果&#xff1a; 代码&#xff1a; <div v-for"(ele,i) of algorithmList" :key"i"><el-form-item label"模型类型"><el-selectv-model"ele.algorithmId"placeholder"选择模…

技术旅程分享:收获与成长的探索

2023年对我而言是充满挑战和机遇的一年&#xff0c;我在这段时间里积累了丰富的技术经验和个人成长。通过不懈努力和持续学习&#xff0c;我在技术领域迈出了一系列坚实的步伐。在这篇文章中&#xff0c;我将分享我在这段时间中的收获和技术成长经历&#xff0c;与CSDN的朋友们…

基于Vue的宿舍管理系统

基于Vue的宿舍管理系统资源-CSDN文库 基于 Koa 以及 VueJS 的宿舍管理系统。 新增功能&#xff1a; 【楼层管理】添加『入住人员信息』模块&#xff0c;显示入住学生、性别、院系、专业的人数&#xff0c;可用饼图表示【用户信息】学生用户添加性别、院系、专业字段【楼层管理…

【Vue2+3入门到实战】(21)认识Vue3、使用create-vue搭建Vue3项目、熟悉项目和关键文件

目录 一、认识Vue31. Vue2 选项式 API vs Vue3 组合式API2. Vue3的优势 二、 使用create-vue搭建Vue3项目1. 认识create-vue2. 使用create-vue创建项目 三、 熟悉项目和关键文件四、总结 一、认识Vue3 1. Vue2 选项式 API vs Vue3 组合式API <script> export default {…

YOLOv8改进 | 主干篇 | CSWinTransformer交叉形窗口网络

一、本文介绍 本文给大家带来的改进机制是CSWin Transformer,其基于Transformer架构,创新性地引入了交叉形窗口自注意力机制,用于有效地并行处理图像的水平和垂直条带,形成交叉形窗口以提高计算效率。它还提出了局部增强位置编码(LePE),更好地处理局部位置信息,我将其…

Kubernetes之Ingress详解

目录 IngressIngress配置配置写法转发到单个后端服务不同的URL路径被转发到不同的服务上不同的域名转发到不同的服务上不使用域名的转发规则 Ingress Ingress 是 Kubernetes 中的一种 API 对象&#xff0c;用于管理和配置集群中的 HTTP 和 HTTPS 服务路由。 Ingress 可以在 K…

Termius for Mac/Win:一款功能强大的终端模拟器、SSH 和 SFTP 客户端软件

随着远程工作和云技术的普及&#xff0c;对于高效安全的远程访问和管理服务器变得至关重要。Termius&#xff0c;一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件&#xff0c;正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案&#xff0c;允许用户通过单一平…

webpack知识点总结(高级应用篇)

除开公共基础配置之外&#xff0c;我们意识到两点: 1. 开发环境(modedevelopment),追求强大的开发功能和效率&#xff0c;配置各种方便开 发的功能;2. 生产环境(modeproduction),追求更小更轻量的bundle(即打包产物); 而所谓高级应用&#xff0c;实际上就是进行 Webpack 优化…