全系统模式下的设备

全系统模式下的设备

I/O 设备基类

src/dev/*_device.* 中的基类可以轻松创建设备。必须实现的类和虚函数如下所列。在阅读以下内容之前,建议首先熟悉存储系统。

PioPort类

PioPort 类是一个编程I/O端口,所有对地址范围敏感的设备都使用它。端口将所有内存访问类型整合到设备必须响应的一个read()和write()调用中。设备还必须提供addressRanges()函数,用于返回其感兴趣的地址范围。如果需要,设备可以有多个PIO端口。然而,在正常情况下,设备只会有一个端口,并在调用addressRanges()函数时返回多个范围。只有在设备希望与两个内存对象分别连接时,才需要多个PIO端口。

PioDevice类

这是所有对地址范围敏感的设备继承的基类。所有设备必须实现三个纯虚函数:addressRanges()、read() 和 write()。选择模式等的魔术处理由PioPort处理,因此设备不必担心。

每个设备的参数应在从PioDevice::Params 派生的Params结构中。

BasicPioDevice类

由于大多数PioDevice只响应一个地址范围,BasicPioDevice提供了addressRanges()函数以及用于正常PIO延迟和设备响应地址的参数。由于设备的大小通常不可配置,因此不使用参数来表示这一点,任何从该类继承的设备都应在其构造函数中将其大小写入pioSize。

DMAPort类

DmaPort(在dma_device.hh中)仅用于设备主控访问。recvTimingResp()方法必须对其发出的请求响应(无论是否被拒绝)可用。该端口有两个公共方法:dmaPending()返回dma端口是否忙碌(例如,它仍在尝试发送上一个请求的所有部分)。所有将请求分解成合适大小块、收集潜在的多个响应并响应设备的代码都通过dmaAction()访问。一个命令、起始地址、大小、完成事件和可能的数据被传递给该函数,完成事件的process()方法将在请求完成时执行。内部代码使用DmaReqState管理接收的块,并知道何时执行完成事件。

DMADevice类

这是一个非PCI的DMA设备继承的基类,然而目前M5中不存在这样的设备。该类确实有一些方法:dmaWrite()、dmaRead(),它们从DMA读或写操作中选择适当的命令。

NIC设备

gem5 模拟器有两个不同的网络接口卡(NICs: Network Interface Cards)设备,可以用于通过模拟以太网连接两个模拟实例。

获取以太网链路上的数据包列表

你可以通过创建一个 Etherdump 对象、设置它的 file 参数,并在 EtherLink 上设置 dump 参数来获取以太网链路上的数据包列表。这可以通过在 fs.py 示例配置中添加命令行选项 --etherdump=<filename> 轻松实现。生成的文件将命名为 <file>,并采用标准 pcap 格式。此文件可以使用 Wireshark 或任何其他支持 pcap 格式的工具读取。

PCI设备

待办事项:解释平台和系统,说明它们的关系以及各自的用途

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值