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

MTFTP4

在TCP/IP网络协议族中有FTP协议,但是UEFI下的MTFTP4并不是对FTP协议的实现,两者虽然功能上差不多,但是实现却是不同的。FTP下层使用TCP来连接:

在这里插入图片描述

而MTFTP4下层却是UDP4。

MTFTP4代码综述

MTFTP4的实现在NetworkPkg\Mtftp4Dxe\Mtftp4Dxe.inf,这里首先需要看下它的入口:

EFI_STATUS
EFIAPI
Mtftp4DriverEntryPoint (IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable)
{return EfiLibInstallDriverBindingComponentName2 (ImageHandle,SystemTable,&gMtftp4DriverBinding,ImageHandle,&gMtftp4ComponentName,&gMtftp4ComponentName2);
}

仅仅是安装了EFI_DRIVER_BINDING_PROTOCOL

EFI_DRIVER_BINDING_PROTOCOL  gMtftp4DriverBinding = {Mtftp4DriverBindingSupported,Mtftp4DriverBindingStart,Mtftp4DriverBindingStop,0xa,NULL,NULL
};

DHCP4在UEFI网络协议栈中的关系图:

支持
提供
支持
支持
提供
支持
提供
提供
提供
支持
提供
提供
支持
支持
提供
提供
提供
支持
提供
提供
gEfiPciIoProtocolGuid
UNDI
gEfiNetworkInterfaceIdentifierProtocolGuid_31
gEfiDevicePathProtocolGuid
SNP
gEfiSimpleNetworkProtocolGuid
MNP
gEfiVlanConfigProtocolGuid
gEfiManagedNetworkServiceBindingProtocolGuid
gEfiManagedNetworkProtocolGuid
ARP
gEfiArpServiceBindingProtocolGuid
gEfiArpProtocolGuid
IP4
gEfiIp4ServiceBindingProtocolGuid
gEfiIp4Config2ProtocolGuid
gEfiIp4ProtocolGuid
DHCP4
gEfiMtftp4ServiceBindingProtocolGuid
gEfiMtftp4ProtocolGuid

它跟DNS4和DHCP4的结构基本一致。

Mtftp4DriverBindingSupported

前面已经说过,MTFTP4依赖于UDP4:

EFI_STATUS
EFIAPI
Mtftp4DriverBindingSupported (IN EFI_DRIVER_BINDING_PROTOCOL  *This,IN EFI_HANDLE                   Controller,IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath)
{Status = gBS->OpenProtocol (Controller,&gEfiUdp4ServiceBindingProtocolGuid,NULL,This->DriverBindingHandle,Controller,EFI_OPEN_PROTOCOL_TEST_PROTOCOL);
}

Mtftp4DriverBindingStart

Start函数的流程大致如下:

  1. 初始化MTFTP4_SERVICE
  2. 安装gEfiMtftp4ServiceBindingProtocolGuid

MTFTP4_SERVICE

MTFTP4_SERVICE在Start函数中创建:

EFI_STATUS
EFIAPI
Mtftp4DriverBindingStart (IN EFI_DRIVER_BINDING_PROTOCOL  *This,IN EFI_HANDLE                   Controller,IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath)
{Status = Mtftp4CreateService (Controller, This->DriverBindingHandle, &MtftpSb);
}

其结构体如下:

struct _MTFTP4_SERVICE {UINT32                       Signature;EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;UINT16                       ChildrenNum;LIST_ENTRY                   Children;EFI_EVENT                    Timer;            ///< Ticking timer for all the MTFTP clients to handle the packet timeout case.EFI_EVENT                    TimerNotifyLevel; ///< Ticking timer for all the MTFTP clients to calculate the packet live time.EFI_EVENT                    TimerToGetMap;EFI_HANDLE                   Controller;EFI_HANDLE                   Image;//// This UDP child is used to keep the connection between the UDP// and MTFTP, so MTFTP will be notified when UDP is uninstalled.//UDP_IO                       *ConnectUdp;
};

这里的成员都比较简单,重点是如下的几个:

  • TimerTimerNotifyLevelTimerToGetMap:几个不同作用的定时器,在注释中已经有说明。
  • ConnectUdp:与UDP4相关的结构体。

代码示例

MTFTP4的一个示例就是tftp命令,它位于ShellPkg\DynamicCommand\TftpDynamicCommand\TftpDynamicCommand.inf,其主要实现在RunTftp(),它包含以下的几个部分:

  1. 获取参数,包括网口、下载的文件名,等等。需要注意的是-s 的blksize和-w指定的windowsize,它们会被Mtftp4Token的选项值传递给服务器端,它们会影响到数据传输的速度。
  2. 获取EFI_MTFTP4_PROTOCOL,使用其Configure成员函数进行配置。
  3. 获取文件大小。
  4. 下载文件。

具体的实现可以直接看代码,这里不再介绍。

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

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

相关文章

【数据结构】在链队列中你可能忽视的二三事

链队列及其基本操作的C语言实现 导言一、链队列二、链队列的基本操作的实现2.1 链队列的数据类型2.2 链队列的初始化2.2.1 带头结点的链队列的初始化2.2.3 不带头结点的链队列的初始化 2.3 链队列的判空2.3.1 带头结点的链队列的判空2.3.2 不带头结点的链队列的判空 2.4 链队列…

数据集笔记:UJIIndoorLoc

1 数据集介绍 UJIIndoorLoc - UCI Machine Learning Repository UJIIndoorLoc是一个多建筑多楼层的室内定位数据库&#xff0c;用于测试依赖于WLAN/WiFi指纹的室内定位系统。 2 数据读取 数据分类训练数据和测试数据 import pandas as pdapd.read_csv(Downloads/ujiindoo…

《WebKit 技术内幕》学习之五(1): HTML解释器和DOM 模型

第五章 HTML 解释器和 DOM 模型 1.DOM 模型 1.1 DOM标准 DOM &#xff08;Document Object Model&#xff09;的全称是文档对象模型&#xff0c;它可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。这里的文档可以是 HTML 文档、XML 文档或者 XHTML 文档。D…

《WebKit 技术内幕》学习之七(4): 渲染基础

4 WebKit软件渲染技术 4.1 软件渲染过程 在很多情况下&#xff0c;也就是没有那些需要硬件加速内容的时候&#xff08;包括但不限于CSS3 3D变形、CSS3 03D变换、WebGL和视频&#xff09;&#xff0c;WebKit可以使用软件渲染技术来完成页面的绘制工作&#xff08;除非读者强行…

pytorch学习笔记(十一)

优化器学习 把搭建好的模型拿来训练&#xff0c;得到最优的参数。 import torch.optim import torchvision from torch import nn from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoaderdataset torchvision.datas…

《WebKit 技术内幕》学习之六(2): CSS解释器和样式布局

2 CSS解释器和规则匹配 在了解了CSS的基本概念之后&#xff0c;下面来理解WebKit如何来解释CSS代码并选择相应的规则。通过介绍WebKit的主要设施帮助理解WebKit的内部工作原理和机制。 2.1 样式的WebKit表示类 在DOM树中&#xff0c;CSS样式可以包含在“style”元素中或者使…

最全笔记软件盘点!你要的笔记神器都在这里:手写笔记、知识管理、文本笔记、协作笔记等!

在当今的信息化社会中&#xff0c;人们对信息的处理速度越来越快&#xff0c;从工作到生活&#xff0c;我们都面临着大量信息的冲击。在这样的环境下&#xff0c;一个能够帮助我们管理、整理和储存信息的好工具显得尤为重要&#xff0c;而笔记软件恰恰可以满足这些需求。 在选…

中仕教育:国考调剂和补录的区别是什么?

国考笔试成绩和进面名单公布之后&#xff0c;考生们就需要关注调剂和补录了&#xff0c;针对二者之间的区别很多考生不太了解&#xff0c;本文为大家解答一下关于国考调剂和补录的区别。 1.补录 补录是在公式环节之后进行的&#xff0c;主要原因是经过面试、体检和考察&#…

在vscode中悄无声息地摸鱼

想法 作为前端开发者&#xff0c;大多数人都使用 VSCode&#xff0c;并且可能会找一些在 VSCode 中可以摸鱼的插件。我也尝试了一些&#xff1a; Zhihu On VSCode&#xff0c;知乎摸鱼。 daily anime&#xff0c;追番插件。 韭菜盒子&#xff0c;看股票、基金、期货实时数据…

GitHub README-Template.md - README.md 模板

GitHub README-Template.md - README.md 模板 1. README-Template.md 预览模式2. README-Template.md 编辑模式References A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 1. README-Template.md 预览模式 2. README-Templat…

Java 面向对象案例 02 (黑马)

代码&#xff1a; public class foodTest {public static void main(String[] args) {//1、构建一个数组food[] arr new food[3];//2、创建三个商品对象food f1 new food("apple","123",3.2,500);food f2 new food("pear","456",4…

大模型学习之书生·浦语大模型6——基于OpenCompass大模型评测

基于OpenCompass大模型评测 关于评测的三个问题Why/What/How Why What 有许多任务评测&#xff0c;包括垂直领域 How 包含客观评测和主观评测&#xff0c;其中主观评测分人工和模型来评估。 提示词工程 主流评测框架 OpenCompass 能力框架 模型层能力层方法层工具层 支持丰富…