0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

virtio I/O通信流程及设备框架的实现

openEuler 来源:openEuler 作者:openEuler 2022-03-10 13:37 次阅读

virtio 是一种通用的半虚拟化的 I/O 通信协议,提供了一套前后端 I/O 通信的的框架协议和编程接口。根据该协议实现的设备通过前后端的配合,相比全模拟设备可以大幅减少陷入陷出以及内存拷贝的次数,使 guest 获得高效的 I/O 性能。作为目前虚拟化标准的通用协议规范,经历了 0.95、1.0、1.1 三个版本的演进。根据 0.95 版本实现的称为传统 virtio 设备,1.0 版本修改了一些 PCI 配置空间的访问方式和 virtioqueue 的优化和特定设备的约定,1.1 版本则增加了 packed virtqueue 的支持,详细可以参考官方发布的 virtio 协议规范。

之所以称 virtio 是一种半虚拟化的解决方案,是因为其首先需要在主机侧通过软件创建 virito 的后端设备,其次在 Guest 要有对应的设备前端驱动,前后端通过共享内存进行通信。virtio 规范定义了设备的控制和数据面接口,控制面接口包括设备状态、feature 的协商等,数据面则包括共享内存的数据布局定义以及前后端的通知方式。基于 virtio 协议,目前已衍生出了 virtio-blk、virtio-net、virtio-scsi、virtio-mem 等各种各样的半虚拟化设备。virtio 设备可以支持多种传输层协议,既可以挂载到 MMIO 总线,也可以作为 PCI 设备,另外还可以支持基于标准 I/O 通道机制的 S/390 设备。

4963ac88-a026-11ec-952b-dac502259ad0.png

鉴于 virtio 设备具备较好的性能及通用性,StratoVirt 自然也支持,StratoVirt 中 virtio 设备的实现架构以及 I/O 通信流程如上图所示。下面就基于目前最新的代码,探究一下 StratoVirt 中 virtio 设备的代码实现框架。

VirtioDevice Trait

StratoVirt 的 virtio crate 提供了 virtio 设备的通用接口以及所有 virtio 设备的相关实现。其中,lib.rs 中定义了为所有 virtio 设备定义的 VirtioDevice Trait。每种 virtio 设备都需要实现自定义的 VirtioDevice 接口。

///Thetraitforvirtiodeviceoperations.
pubtraitVirtioDevice:Send{
///Realizelowleveldevice.
fnrealize(&mutself)->Result<()>;

///Unrealizelowleveldevice
fnunrealize(&mutself)->Result<()>{
bail!("Unrealizeofthevirtiodeviceisnotimplemented");
}

///Getthevirtiodevicetype,refertoVirtioSpec.
fndevice_type(&self)->u32;

///Getthecountofvirtiodevicequeues.
fnqueue_num(&self)->usize;

///Getthequeuesizeofvirtiodevice.
fnqueue_size(&self)->u16;

///Getdevicefeaturesfromhost.
fnget_device_features(&self,features_select:u32)->u32;

///Setdriverfeaturesbyguest.
fnset_driver_features(&mutself,page:u32,value:u32);

///Readdataofconfigfromguest.
fnread_config(&self,offset:u64,data:&mut[u8])->Result<()>;

///Writedatatoconfigfromguest.
fnwrite_config(&mutself,offset:u64,data:&[u8])->Result<()>;

///Activatethevirtiodevice,thisfunctioniscalledbyvcputhreadwhenfrontend
///virtiodriverisreadyandwrite`DRIVER_OK`tobackend.
///
///#Arguments
///
///*`mem_space`-Systemmem.
///*`interrupt_evt`-Theeventfdusedtosendinterrupttoguest.
///*`interrupt_status`-Theinterruptstatuspresenttoguest.
///*`queues`-Thevirtioqueues.
///*`queue_evts`-Thenotifiereventsfromguest.
fnactivate(
&mutself,
mem_space:Arc,
interrupt_cb:Arc,
queues:&[Arc>],
queue_evts:Vec,
)->Result<()>;

///Deactivatevirtiodevice,thisfunctionremoveeventfd
///ofdeviceoutoftheeventloop.
fndeactivate(&mutself)->Result<()>{
bail!(
"Resetthisdeviceisnotsupported,virtiodevtypeis{}",
self.device_type()
);
}

///Resetvirtiodevice.
fnreset(&mutself)->Result<()>{
Ok(())
}

///UpdatethelowlevelconfigofMMIOdevice,
///forexample:updatetheimagesfilefdofvirtioblockdevice.
///
///#Arguments
///
///*`_file_path`-Therelatedbackendfilepath.
fnupdate_config(&mutself,_dev_config:OptiondynConfigCheck>>)->Result<()>{
bail!("Unsupportedtoupdateconfiguration")
}
}
  • realize()/unrealize(): 这一组接口用于具现化/去具现化具体的 virtio 设备。具现化做的一些具体操作包括设置支持的 features、设备特有的属性(如网卡的 mac)、初始化连接 Host 后端设备等。
  • set_driver_features():将前端驱动支持的 features 与后端模拟设备支持的 features 进行协商后,设置最终实现的 features。
  • read_config()/write_config():virtio 协议规范为每种 virtio 设备定义了自定义的配置空间,这组接口就是用来读写这部分配置数据。
  • activate()/deactivate(): 激活/去激活设备,负责绑定/解绑后端、加入/移除 I/O 循环。
  • reset():虚拟机重启时某些设备需要重置。
  • update_config():支持轻量机型下的 virtio-mmio 设备动态绑定/解绑后端,实现 virtio-mmio 设备的模拟热插拔。

virtqueue

499e7368-a026-11ec-952b-dac502259ad0.png

virtio 设备可以有一个或多个队列,每个队列有描述符表、available ring、used ring 三个部分。当前 StratoVirt 的 virtio 设备均遵循 1.0 规范,队列的内存布局仅支持 Split Vring 的方式。queue.rs 中定义了一系列针对队列操作及查询的接口。所有的 I/O 请求数据信息以描述符的形式存放在描述符表中,前端准备好数据后更新 available ring 告诉后端还有哪些 I/O 待发送,后端执行完 I/O 更新 used ring 通知前端。不同设备的 I/O 处理不尽相同,但是核心的 virtqueue 操作是一样的。

pubstructSplitVring{
///Regioncacheinformation.
pubcache:Option,
///Guestphysicaladdressofthedescriptortable.
///Thetableiscomposedofdescriptors(SplitVringDesc).
pubdesc_table:GuestAddress,

///Guestphysicaladdressoftheavailablering.
///Theringiscomposedofflags(u16),idx(u16),ring[size](u16)andused_event(u16).
pubavail_ring:GuestAddress,

///Guestphysicaladdressoftheusedring.
///Theringiscomposedofflags(u16),idx(u16),used_ring[size](UsedElem)andavail_event(u16).
pubused_ring:GuestAddress,

///Hostaddresscache.
pubaddr_cache:VirtioAddrCache,

///Indicatewhetherthequeueconfigurationisfinished.
pubready:bool,

///Themaximalsizeinelementsofferedbythedevice.
pubmax_size:u16,

///Thequeuesizesetbyfrontend.
pubsize:u16,

///Interruptvectorindexofthequeueformsix
pubvector:u16,

///Thenextindexwhichcanbepoppedintheavailablevring.
next_avail:Wrapping<u16>,

///Thenextindexwhichcanbepushedintheusedvring.
next_used:Wrapping<u16>,

///Theindexoflastdescriptorusedwhichhastriggeredinterrupt.
last_signal_used:Wrapping<u16>,
}

virtio-mmio 设备

StratoVirt 目前提供两种机型:轻量机型和标准机型。轻量机型由于需要追求极致的启动速度以及内存底噪开销,因此只支持挂载数量有限的 virtio-mmio 设备。而标准机型面向传统的标准云化场景,对于 I/O 设备的性能要求较高,且需要支持热插拔满足资源弹性,因此标准机型支持将 virtio 设备以 PCI 设备挂载在模拟的 PCI 总线上。目前标准机型只支持配置 virtio-pci 设备,不支持 virtio-mmio 设备。

结构体 VirtioMmioDevice 定义了一个通用的 virtio-mmio 设备,其中的 device 即为实现了 VirtioDevice 这个 trait 的具体的 virtio 设备结构,可以是网卡、磁盘等。VirtioMmioState 结构体中存放了 virtio-mmio 设备的控制寄存器,并且为其实现了对应的读写接口 read_common_config()/write_common_config()。virtio-mmio 设备的配置空间布局如下图所示:

49b533a0-a026-11ec-952b-dac502259ad0.png

interrupt_evt 通过 irqfd 向虚拟机注入中断,host_notify_info 则为每个队列创建了一个 eventfd,虚拟机利用 ioeventfd 机制陷出到 StratoVirt 执行后端的 I/O 处理。

pubstructVirtioMmioDevice{
//Theentityoflowleveldevice.
pubdevice:ArcdynVirtioDevice>>,
//EventFdusedtosendinterrupttoVM
interrupt_evt:EventFd,
//Interruptstatus.
interrupt_status:Arc,
//HostNotifyInfousedforguestnotifier
host_notify_info:HostNotifyInfo,
//Thestateofvirtiommiodevice.
state:VirtioMmioState,
//Systemaddressspace.
mem_space:Arc,
//Virtioqueues.
queues:Vec>>,
//SystemResourceofdevice.
res:SysRes,
}

VirtioMmioDevice 实现了 realize 接口完成设备的具现化:

  1. 调用各设备实现的 VirtioDevice trait 的具现化接口。
  2. virtio-mmio 设备挂载在了系统总线上,StratoVirt 为每个设备分配 512 字节的配置空间。除此之外,需要为其注册 irqfd 以便后续 I/O 完成后向虚拟机注入中断。这些信息都保存在 SysRes 数据结构中。
  3. 添加内核启动参数,通过内核启动参数将设备的内存区间及中断号信息直接告诉 Guest。
pubfnrealize(
mutself,
sysbus:&mutSysBus,
region_base:u64,
region_size:u64,
#[cfg(target_arch="x86_64")]bs:&Arc>,
)->ResultSelf>>>{
self.device
.lock()
.unwrap()
.realize()
.chain_err(||"Failedtorealizevirtio.")?;

ifregion_base>=sysbus.mmio_region.1{
bail!("Mmioregionspaceexhausted.");
}
self.set_sys_resource(sysbus,region_base,region_size)?;
letdev=Arc::new(self));
sysbus.attach_device(&dev,region_base,region_size)?;

#[cfg(target_arch="x86_64")]
bs.lock().unwrap().kernel_cmdline.push(Param{
param_type:"virtio_mmio.device".to_string(),
value:format!(
"{}@0x{:08x}:{}",
region_size,
region_base,
dev.lock().unwrap().res.irq
),
});
Ok(dev)
}

前端驱动加载过程中会读写设备的配置空间,前后端完成 feature 的协商,一切 OK 后前端驱动将向配置空间写状态,后端设备将会调用 activate 方法激活设备。当触发激活时,前端已为这三个部分分配了内存空间,Guest 物理地址(GPA)已写入设备的配置空间,后端需要将 GPA 地址转化为 Host 虚拟地址(HVA)。随后,就可以根据队列配置创建队列,并将 I/O 的 eventfd 加入事件循环激活设备开始 I/O 通信。

virtio-pci 设备

如上所述,virtio 设备也可以作为一个 PCI 类设备挂载到 PCI 总线上。类似的,在 StratoVirt 中用结构体 VirtioPciDevice 来表示一个 virtio-pci 设备。既然是作为一个 PCI 设备,virtio-pci 就需要拥有符合 PCI 规范拥有 PCI 设备的配置空间,Guest 启动后通过 PCI 设备树枚举来发现设备,而不是像 virtio-mmio 设备一样直接通过内核启动参数告诉 Guest。

pubstructVirtioPciDevice{
///Nameofthisdevice
name:String,
///Theentityofvirtiodevice
device:ArcdynVirtioDevice>>,
///Deviceid
dev_id:Arc,
///Devfn
devfn:u8,
///Ifthisdeviceisactivatedornot.
device_activated:Arc,
///MemoryAddressSpace
sys_mem:Arc,
///Pciconfigspace.
config:PciConfig,
///VirtiocommonconfigrefertoVirtioSpec.
common_config:Arc>,
///PrimaryBus
parent_bus:Weak>,
///Eventfdsusedfornotifyingtheguest.
notify_eventfds:NotifyEventFds,
///Thefunctionforinterrupttriggering
interrupt_cb:Option>,
///Virtioqueues.ThevectorandQueuewillbesharedacrossingthread,soallwithArc>wrapper.
queues:ArcVec>>>>,
///Multi-Functionflag.
multi_func:bool,
}

VirtioPciDevice 通过实现 PciDevOps trait 的 realize()方法完成设备的具现化:

  1. 初始化 PCI 配置寄存器
  2. 将 virtio 协议规定的 common configuration、notifications、ISR status、Device-specific configuration 作为四个 PCI 设备的 capability, 对应数据的内存空间则映射到第 3 个 BAR 空间的不同部分。配置空间布局如下图所示:

49ca4dda-a026-11ec-952b-dac502259ad0.png

  1. 前端驱动对于各空间的访问的回调函数由 modern_mem_region_init()注册,当前端读写这部分内存区间时会陷出到 StratoVirt 执行注册的回调接口。每个队列在 notification cap 指向的空间中占据 4 个字节,StratoVirt 为每个队列的 4 个字节空间注册 ioeventfd。前端驱动准备好某个队列后,就会写对应队列的这 4 个字节的地址空间,后端借助 ioeventfd 机制收到通知后陷出进行 host 侧的 I/O 下发。
  2. 中断机制采用 MSI-X,向量表和 pending 位图则位于第 2 个 BAR 空间。

审核编辑:郭婷
  • PCI
    PCI
    +关注

    关注

    3

    文章

    487

    浏览量

    128941
  • 虚拟化
    +关注

    关注

    1

    文章

    310

    浏览量

    29420
收藏 人收藏

    评论

    相关推荐

    详解全志V853上的ARM A7和RISC-V E907之间的通信方式

    层 的 VirtIO 是一种I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各
    发表于 07-07 14:15

    StratoVirt 中的虚拟网卡是如何实现的?

    基于 virtio 协议的半虚拟化框架实现前后端通信Virtio 协议是一种在半虚拟化场景中使用的 I/O 传输协议,它的出现解决了全虚拟化场景中模拟指令导致的性能开销问题。整体架构如下图所示
    发表于 08-10 11:16

    MPU进化,多核异构处理器有多强?

    CoreB 传递消息的过程,反之亦然。二、驱动层Virtio下RPMsg通信实现Virtio是通用的IO虚拟化模型,位于设备之上的抽象层,负责前后端之间的通知机制和控制流程,为异构多核间数据通信提供了层
    发表于 11-21 09:45

    采用LabVIEW FPGA模块和可重新配置I/O设备开发测量与控制应用

    使用LabVIEW FPGA 模块和可重新配置I/O 设备开发测量与控制应用通过使用LabVIEW FPGA 模块和可重新配置I/O(RIO)硬件,NI 为您提供了一种直观可用的解决方案,它可以将
    发表于 07-23 08:15

    Linux设备驱动中的异步通知与异步I/O

    ;信号驱动的异步I/O"。Linux信号Linux系统中,异步通知使用信号来实现。信号也就是一种软件中断。信号的产生:kill raise alarm用户按下某些终端键;硬件异常;终止进程信号
    发表于 02-21 10:52

    89C51 单片机I/O 口模拟串行通信实现方法 ·严天峰·

    的方法是扩展一片8251 或 8250 通用同步/异步接收发送芯片(USART),需额外占用单片机I/O 资源。本文介绍一种用单片机普通I/O实现串行通信的方法,可在单片机的最小应用系统中实现与两个
    发表于 06-07 15:17

    使用XILINX的ROCKET I/O 实现150M的光纤通信合适/可行吗?

    要使用FPGA实现150M的光纤通讯,使用XILINX XAPP244的串行数据恢复功能感觉有些麻烦。使用XILINX的ROCKET I/O 实现150M的光纤通信合适/可行吗?
    发表于 03-26 16:06

    2I/OI2C 通信 4I/O口 SPI

    自行设计,所以对于后续开发 本店也会可与大力的支持与帮助。 目前小店只有6排针 (4i/o口) 不过马上即将 4排针(2i/o口)支持I2C 通信的OLED 就会在本店上架,价格和之前是一样
    发表于 11-04 19:37

    MDO3000示波器在通信I/O接口测试中的用途

    I/O接口的功能是负责实现CPU通过系统总线把I/O电路和外围设备联系在一起,按照电路和设备的复杂程度,I/O接口的硬件主要分为两大类: (1)I/O接口芯片 这些芯片大都是集成电路,通过CPU输入
    发表于 11-04 11:39

    一种基于AliOS Things的uData感知设备软件框架

    摘要:uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。uData
    发表于 01-22 17:30

    基于TinyOS操作系统的I/O控制

    TinyOS系统下的I/O控制程序,并给出在CC2340芯片上实现的结果,可用来控制对Sink节点的输入和输出.对该程序进行一定的扩展和改进便可以实现对Sink节点与节点通信和数据传输的控制.  0
    发表于 11-13 16:27

    CAN通信控制器程序框架实现

    实现的 CAN 通信控制器参照 SJA1000 CAN 通信控制器的结构,程序基本框架如图 9-9 所示。 CAN 通信控制器的具体实现各模块的组织结构如图 9-10 所示。
    发表于 12-19 17:26

    通过应用外部设备解决MCU I/O扩展问题

    从器件都需要一个专用输出引脚来选择它进行通信。很容易想象,如果开发人员有许多他们想要连接的外部设备,他们可能会快速耗尽I / O线来选择从设备。例如,如果开发人员
    发表于 02-23 16:00

    I2C代码是如何在和声框架实现

    嗨,我想了解I2C代码是如何在和声框架实现的。我使用的是IASCII中断代码作为BASYS。我尝试使用PIC32 MX975 F512H作为主机,并将I2C总线转换成USB通过CH34 1A转换器
    发表于 03-07 12:21

    LabVIEW的I/O接口设备和硬件构成

    pci-6527后启动max的画面。图3 max自动识别ni的i/o设备对于这类labview直接支持的i/o设备,调用labview中的相应驱动程序模块就可以实现板卡的所有功能。(2
    发表于 05-31 05:00

    I/O连接器有什么功能?

    I/O接口的功能是负责实现CPU通过系统总线把I/O电路和 外围设备联系在一起,按照电路和设备的复杂程度
    发表于 09-18 09:01

    轻松实现高速串行I/O (FPGA应用设计者指南)

    轻松实现高速串行I/OFPGA应用设计者指南输入/输出(I/O)在计算机和工业应用中一直扮演着关键角色。但是,随着信号处理越来越复杂,I/O通信会变得不可靠。在早期的并行I/O总线中,接口的数据对齐
    发表于 01-02 12:12

    请问怎样设计并实现闪存设备I/O软件?

    闪存设备管理技术的现状及存在的问题是什么?闪存设备I/O软件的分层结构是怎样的?怎样设计并实现闪存设备I/O软件?
    发表于 04-27 06:44

    如何去实现一种多主节点通信?有什么流程

    本文根据I2C总线仲裁的思想,提出一种多主节点通信的思想及实现流程
    发表于 05-28 06:21

    怎样去操作I/O设备呢?有哪些流程

    什么是I/O设备I/O设备是由哪些部分组成的?内存映射I/O的优点和缺点分别有哪些?
    发表于 08-13 07:04

    Modbus程序框架流程是怎样的

    什么是Modbus协议?Modbus程序框架流程是怎样的?
    发表于 10-20 07:13

    什么是 I/O 口?I/O 具体能做什么呢

    电平 ,输出高低电平。就是通过这简单的控制电平来实现大多数的应用控制。1. 什么是 I/O 口?I 表示 IN(输入),O 表示 OUT(输出),所以 I/O = 输入/输出2. I/O 具体能做什么呢?如果你是刚刚步入电子的新手,那
    发表于 11-24 06:47

    STM32硬件I2C重新编制I2C的通信流程

    怎么用软件模拟I2C?怎样去编制I2C的通信流程
    发表于 12-14 07:09

    为什么称为I/O编程

    Linux C 文件编程 – Linux I/O编程1.为什么称为I/O编程? Linux一点哲学:一切皆为文件。2.硬件设备也被抽象为文件:对硬件的操作=对硬件I/O操作=对文件的操作
    发表于 12-15 07:07

    Flutter框架相关资料下载

    作者: Flutter 团队I/O 期间我们迎来 Flutter 框架的一个重要里程碑,因为我们的开发重点从移动平台扩展到了更广泛的设备和机型。在 I/O 大会上,我们发...
    发表于 12-16 08:06

    什么是Super I/O?用SuperIo实现什么

    UEFI学习(四)-SuperIo的访问一、什么是Super I/O?二、我们要用SuperIo实现什么三、NCT5581D的访问机制一、什么是Super I/O?Super I/O 芯片也叫 I
    发表于 01-24 08:12

    单片机I/O设备有哪几种主要的控制方式

    单片机I/O设备有哪几种主要的控制方式?单片机如何实现当一个程序在访问一个I/O设备时,而不占用CPU呢?
    发表于 01-26 07:06

    I/O口的简单配置

    功能选择。2.1 I/O 的简单配置430I/O 的配置是用软件来实现的,是通过相应的配置寄存器来实现的。(用到某个 I/O 时,一定要先配置好该 I/O,否则易出错)2.2.1 I/O 方向
    发表于 02-15 06:12

    了解stm32I/O的输入操作及如何使用HAL库来实现I/O输入

    前言此实验是通过STM32CubeMX来配置stm32实现按键输入,以此来了解stm32I/O的输入操作及如何使用HAL库来实现I/O输入。本实验中的按键操作使用的是软件中断,并未用到stm32
    发表于 03-01 06:58

    介绍HDMI显示的两套流程框架

    HDMI显示有几套流程框架呢?DRM标准HDMI框架是怎样的?RK HDMI框架又是怎样的呢?
    发表于 03-04 07:27

    RT-Thread 的 IO 设备模型框架是由哪些部分组成的呢

    RT-Thread 的 I/O 设备模型框架是由哪些部分组成的呢?接下来由小编给大家详细介绍一下。1、RT-Thread 的 I/O 设备模型框架位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O设备
    发表于 03-11 18:17

    Windows 2000/XP下I/O设备驱动程序的设计

    本文介绍了Windows 2000/XP 下WDM 驱动程序的基本设计方法;阐述了I/O 设备驱动程序的基本构成,硬件资源的配置和访问的方法;提出了设备驱动程序在实际应用中的层次化结构。
    发表于 06-12 13:46 18次下载

    基于COM的组态软件I/O 设备驱动程序设计

    详细介绍了一种基于COM 组件技术的组态软件I/O 设备驱动程序的设计方法。在 分析了设计原理的基础上,给出了一种以太网数据服务器驱动程序的具体实现。 COM 组件驱动
    发表于 07-30 11:32 25次下载

    数字I/O介绍

    数字I/O脚有专用和复用。数字I/O脚的功能通过9个16位控制寄存器来控制。控制寄存器分为两类:(1)I/O复用控制寄存器(MCRX),来选择I/O脚是外设功能还是I/O功能。(
    发表于 09-16 12:20 17次下载

    冗余I/O

    6.1 冗余I/O的定义当I/O模块以每两个一组组态成冗余对运行时,I/O模板即认为是冗余配置。这样意味着S7-400H系统的所有元件都可以冗余。使用冗余I/O可以使H系统提高可用性。6.2
    发表于 07-23 00:29 23次下载

    远程智能I/O装置在DCS中的应用

    针对目前分散控制系统( DCS ) 中I/ O 点设计过多而导致的系统资源浪费问题,提出了采用远程智能I/O 装置实现数据采集,并简要介绍了远程智能I/ O 装置的构成、性能,以及与DCS 实现联网通
    发表于 06-17 17:42 25次下载
    远程智能<b>I</b>/<b>O</b>装置在DCS中的应用

    基于开源虚拟机的模拟设备的设计与实现

    在研究了QEMU虚拟机的工作原理及其I/O框架基础上,设计并实现了模拟QBUS设备之间,基于socket设备通信模型,模拟QBUS设备与物理设备之间,基于虚拟设备转发的通信模型。有效地解决
    发表于 10-08 15:09 30次下载
    基于开源虚拟机的模拟<b>设备</b>的设计与<b>实现</b>

    实现千兆位串行I_O的相关技术

    一名设计工程师怎样才能真正充分利用串行I/O的各种技术呢?在开始设计之前,我们需要知道什么对于实现串行I/O是有益的。我们需要研究一些基于串行设计的单元器件,从而了解一下
    发表于 04-01 15:01 29次下载
    <b>实现</b>千兆位串行<b>I_O</b>的相关技术

    实现Windows95/98的I/O端口读写_Delphi教程

    Delphi教程实现Windows95/98的I/O端口读写,很好的Delphi学习资料。
    发表于 03-16 14:59 6次下载

    I/O扩展(8255)模块

    为用户在中提供一个I/O 扩展的方法,在设计过程遇到I/O不够用时可以用此种方案。
    发表于 07-04 17:12 12次下载

    CANopen协议I_O设备子协议DS_401的解析

    CANopen协议I_O设备子协议DS_401的解析_邵世彪
    发表于 10-24 10:18 57次下载

    uClinux下中断驱动的I_O设备驱动开发

    uClinux下中断驱动的I_O设备驱动开发
    发表于 01-24 17:21 9次下载

    Java I/O 的相关方法分析

    I/O,即 Input/Output(输入/输出) 的简称。就 I/O 而言,概念上有 5 种模型:blocking I/O,nonblocking I/OI/O multiplexing
    发表于 09-27 13:18 0次下载
    Java <b>I</b>/<b>O</b> 的相关方法分析

    西门子分布式ET 200M的I/O设备调试及连接

    组建系统时,通常需要将过程的输入和输出集中集成到该自动化系统中。如果输入和输出远离可编程控制器,将需要铺设很长的电缆,从而不易实现,并且可能因为电磁干扰而使得可靠性降低。分布式I/O 设备便是这类
    发表于 11-20 17:52 6次下载
    西门子分布式ET 200M的<b>I</b>/<b>O</b><b>设备</b>调试及连接

    如何减少器件间通信所用的I/O引脚数实现双向通信

    随着嵌入式系统的小型化趋势,市场对减少器件间通信所用的I/O 引脚数的需求与日俱增。Microchip 开发的UNI/O® 总线满足了这一需求,这一低成本且易于实现的解决方案,仅需要使用一个I/O 引脚就可实现双向通信
    发表于 04-27 16:14 8次下载
    如何减少器件间<b>通信</b>所用的<b>I</b>/<b>O</b>引脚数<b>实现</b>双向<b>通信</b>

    使用定时器实现中档PIC单片机与兼容UNI/O总线串行EEPROM的接口

    随着嵌入式系统小型化的趋势,市场对于减少器件间通信所用 I/O 引脚数的需求也与日俱增。Microchip 开发的 UNI/O® 总线正满足了这一需求,这一个低成本且易于实现的解决方案,仅需要使用一个 I/O 引脚就可实现双向通信
    发表于 06-15 09:27 1次下载
    使用定时器<b>实现</b>中档PIC单片机与兼容UNI/<b>O</b>总线串行EEPROM的接口

    UNI/O总线规范

    随着嵌入式系统小型化的趋势,市场对于最少化器件间通信所用 I/O 引脚数的需求也与日俱增。为了满足这一需求,Microchip 开发了拥有专利 ** 的 UNI/O® 总线,它是低成本、易于实现的解决方案,通信时只需传输单个I/O 信号。
    发表于 05-20 10:33 15次下载

    MCU实现I2C通信

    调试过程吧。  需要做的工作小结如下:1、MCU的I2C采用IO口模拟实现;2、MCU作为I2C主设备与定时芯片RX-8025SA建立通信;3、实现定时闹钟、定时唤醒及睡眠的功能;
    发表于 11-01 16:24 4次下载
    MCU<b>实现</b><b>I</b>2C<b>通信</b>

    PIC单片机I/O口控制

    为什么配置I/O口:I/O端口寄存器复位后默认为输入(输出高阻态);为实现I/O端口功能需要先对端口进行I/O口初始化配置I/O口需要的几种寄存器:ANSELx(模拟选择寄存器):0 = 数字I
    发表于 11-16 11:21 6次下载
    PIC单片机<b>I</b>/<b>O</b>口控制

    单片机I/O控制方式

    单片机如何实现当一个程序在访问一个I/O设备时,而不占用CPU呢?对于这个问题,我们先了解一下单片机I/O设备有哪几种主要的控制方式;程序循环检测中断驱动直接内存访问一、程序循环检测基本思路:在设备
    发表于 12-01 16:21 9次下载
    单片机<b>I</b>/<b>O</b>控制方式

    基础I/O功能

    基础数字I/O口介绍 LED点亮 按键消抖检测 延时函数
    发表于 12-03 13:51 11次下载
    基础<b>I</b>/<b>O</b>功能

    STM32单片机---I/O应用

    STM32单片机---(二)I/O应用stm32I/O简介GPIO的8种工作模式stm32I/O简介在 STM32 中I/O 引脚,又称为GPIO (General-Purpose I/O),可以被
    发表于 12-17 18:33 18次下载
    STM32单片机---<b>I</b>/<b>O</b>应用

    Springboot整合netty框架实现终端、通讯板子(单片机)TCP/UDP通信案例

    如何springboot和netty案例的源代码一个springboot整合netty框架的开发小案例,实现服务端与单片机终端实时通信的通讯架构案例。物联网通信给板子下发指令案例附带源码及整合流程步骤
    发表于 12-29 18:55 13次下载
    Springboot整合netty<b>框架</b><b>实现</b>终端、通讯板子(单片机)TCP/UDP<b>通信</b>案例

    单片机如何通过I/O实现断电自关机

    单片机应用系统中,常有用单片机的I/O口来实现自关机(彻底关机)的功能。一般用单片机的一个I/O口控制一个电子开关来实现,因单片机关电后,失去电源,所以在关机时,实现关机的IO口的电平必须用低电平。
    发表于 02-09 10:42 4次下载
    单片机如何通过<b>I</b>/<b>O</b>口<b>实现</b>断电自关机

    I/O口是单片机与外界联系的通道

    I/O口是单片机与外界联系的通道。它可对各类外部信号(开关量、模拟量、频率信一号)进行检测、判断、处理,并可控制各类外部设备。单片机通过I/O口感知外界的存在,而外界也通过I/O口感知单片机的存在。
    发表于 02-10 10:32 1次下载
    <b>I</b>/<b>O</b>口是单片机与外界联系的通道

    如何实现单片机用一个I/O采集多个按键信号?

    如何实现单片机用一个I/O采集多个按键信号 使用模数转换(ADC)的特点就可以实现单片机用一个I/O采集多个按键信号。 一、单片机的I/O口检测按键简说 我们知道,一般情况下单片机的一个I/O口作为
    发表于 02-11 14:23 10次下载
    如何<b>实现</b>单片机用一个<b>I</b>/<b>O</b>采集多个按键信号?

    Arduino供电的I/O Modbus/TCP设备服务器

    电子发烧友网站提供《Arduino供电的I/O Modbus/TCP设备服务器.zip》资料免费下载
    发表于 11-24 14:27 0次下载
    Arduino供电的<b>I</b>/<b>O</b> Modbus/TCP<b>设备</b>服务器

    RT-Thread文档_I/O 设备模型

    RT-Thread文档_I/O 设备模型
    发表于 02-22 18:31 0次下载
    RT-Thread文档_<b>I</b>/<b>O</b> <b>设备</b>模型

    串转并的I/O口实验

    串转并的I/O 口实验 一. 实验目的熟悉并掌握串转并的I/O 口扩展方法。二. 实验设备及器件IBM PC 机 一台DP-51PROC 单片机
    发表于 09-22 10:52 8924次阅读
    串转并的<b>I</b>/<b>O</b>口实验

    并转串的I/O口实验

    并转串的I/O口实验 一. 实验目的熟悉并掌握并转串的I/O 口扩展方法。二. 实验设备及器件IBM PC 机 一台DP-51PROC 单片机综
    发表于 09-22 10:56 5319次阅读
    并转串的<b>I</b>/<b>O</b>口实验

    基于Rocket I/O模块的高速I/O设计

    摘要: 介绍了采用Videx-ⅡPR0系列FPCA设计的应用于下一代无线通信系统中的高速IO。由于充分利用芯片中集成的Rocket IO模块,并采用差分输入参考时钟、
    发表于 06-20 10:45 1114次阅读
    基于Rocket <b>I</b>/<b>O</b>模块的高速<b>I</b>/<b>O</b>设计

    什么是I/O地址

    什么是I/O地址 I/O地址中I是input的简写,O是output的简写,也就是输入输出地址。每个设备都会有一个专用的I/O地址(如图 ),用来处理自己的输入输
    发表于 02-05 10:01 1243次阅读

    单片机I/O 口模拟串行通信设计

    本文介绍的用 89C51 单片机I/O 口模拟实现串行通信的方法,已成功地应用在某电压数据采集系统中
    发表于 06-30 11:25 1262次阅读

    LabVIEW的I/O接口设备驱动

    虚拟仪器系统的硬件平台由i/o接口设备和计算机构成,为了能使计算机能够对i/o接口设备有效地进行控制,就要考虑系统中i/o接口设备的驱动问题。
    发表于 11-18 11:04 1.2w次阅读
    LabVIEW的<b>I</b>/<b>O</b>接口<b>设备</b>驱动

    LabVIEW的RIO与I/O对比

    NI可重配置I/O(RIO)产品可在灵活的开发平台上实现高精度测量,适用于需要高速闭环控制的系统级应用。这些应用有时需要比核心系统可提供的更多的通道数或分布更广的架构。而扩展I/O系统可以实现1个
    发表于 11-18 02:44 4334次阅读
    LabVIEW的RIO与<b>I</b>/<b>O</b>对比

    基于FPGA I/O接口的五大优势与FPGA深层分析

    NI VeriStand是一款用于配置实时测试系统应用的软件环境,如硬件在环(HIL)测试系统等。当向NI VeriStand添加实时I/O接口时,用户能够快速配置多种标准模拟、数字和通信总线接口
    发表于 11-18 07:47 8092次阅读
    基于FPGA <b>I</b>/<b>O</b>接口的五大优势与FPGA深层分析

    输入输出设备I/O设备总结

    I/O设备又叫输入输出设备。对于I/O bus 包含数据总线、控制总线、地址总线;每一个I/O设备均连接到I/O总线上,与pc进行数据传输。所以衍生出I/O接口的概念,逐渐产生了
    发表于 11-24 09:28 2773次阅读
    输入输出<b>设备</b><b>I</b>/<b>O</b><b>设备</b>总结

    控制关电的I/O口,如何实现彻底关电

    单片机应用系统中,常有用单片机的I/O口来实现自关机(彻底关机)的功能。一般用单片机的一个I/O口控制一个电
    的头像 发表于 12-20 07:32 8390次阅读
    控制关电的<b>I</b>/<b>O</b>口,如何<b>实现</b>彻底关电

    Smart I/O模块的应用 实现管脚电平数字逻辑的实现

    芯片设计工程师常常需要根据输入输出信号(Input and Output, I/O实现管脚电平数字逻辑。例如,系统工程师利用微控制器进行时钟增殖时常常需要创建时钟树,将输入时钟输入至多个缓冲时钟(具有适当的驱动能力),和/或倒转时钟极性。还有许多场景下,系统工程师必须对I/O信号进行逻辑
    发表于 04-07 10:04 3396次阅读

    用单片机I/O端口驱动74LS165 实现并行数据输入

    I/O接口的功能是负责实现CPU通过系统总线把I/O电路和外围设备联系在一起,按照电路和设备的复杂程度,I/O接口的硬件主要分为两大类。
    发表于 03-07 16:09 2647次阅读
    用单片机<b>I</b>/<b>O</b>端口驱动74LS165 <b>实现</b>并行数据输入

    介绍 I/O NI系统,C系列的I/O模块

    内容包括:理想的确定性以太网I/O,具有确定性分布式I/O的NI系统,C系列的I/O模块,与LabVIEW的无缝集成,
    的头像 发表于 06-14 06:19 3787次阅读
    介绍 <b>I</b>/<b>O</b> NI系统,C系列的<b>I</b>/<b>O</b>模块

    关于PROFINET I/O设备芯片TPS-1演示过程介绍

    PROFINET I/O设备芯片TPS-1演示
    的头像 发表于 07-20 01:07 9801次阅读

    如何通过I2C总线I/O实现系统的多个功能?

    仪器的开发领域得到了广泛应用,本文介绍了一个测试系统通过FC总线扩展I/O实现了系统的多个功能。给出了系统的硬件连接以及Atmega128与三个Atmega168之间的软件通信流程图。
    的头像 发表于 08-30 10:05 5490次阅读
    如何通过<b>I</b>2C总线<b>I</b>/<b>O</b>口<b>实现</b>系统的多个功能?

    DPDK和Virtio的简介

    DPDK和virtio
    的头像 发表于 10-30 06:07 3662次阅读

    如何更改 Linux 的 I/O 调度器

    Linux 的 I/O 调度器是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度器。Linux I/O 调度器的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先级更高以及何时下发 I/O
    发表于 05-15 15:54 583次阅读
    如何更改 Linux 的 <b>I</b>/<b>O</b> 调度器

    新唐科技超级 I/O 系列介绍

    新唐超級I/O(Super I/O)系列芯片,被广泛的使用在主板、工业计算机、一体机(AIO)以及工作站上。除了传统输出入的功能, 例如串口、打印机接口、键盘鼠标(KBC)接口、通用型I/O(GPI/O)接口等,还内建硬件监控(Hardware Monitor)
    的头像 发表于 02-04 09:51 1060次阅读
    新唐科技超级 <b>I</b>/<b>O</b> 系列介绍

    Geinus I/O总线的特性、网络实现及应用分析

    geinus i/o总线是美国ge fanuc自动化公司推出的一种工业控制总线,它既是i/o总线又是通信网络,非常适合于大量i/o处理和数据传输。可作为一个网络、或作为一个交换实时信息的高速局域通信网络而进行工作,对安装在不同位置上的i
    发表于 04-02 09:33 1237次阅读
    Geinus <b>I</b>/<b>O</b>总线的特性、网络<b>实现</b>及应用分析

    PLC的I/O模块如何选择

    一般IO模块的价格占PLC价格的一半以上。PLC的IO模块有开关量IO模块、模拟量IO模块及各种特殊功能模块等。不同的IO模块,其电路及功能也不同,直接影响PLC的应用范围和价格,应当根据实际需要加以选择。
    发表于 05-19 08:54 7291次阅读
    PLC的<b>I</b>/<b>O</b>模块如何选择

    关于标准I/O库执行I/O操作

    当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。这允许我们一次输出一个字符,但只有在写了一行之后才进行实际I/O操作。标准输入和标准输出对应终端设备(如屏幕)时通常是行缓冲的。
    的头像 发表于 07-01 17:17 1776次阅读

    并行I/O口扩展的2种方式实例介绍

    I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2口用作地址总线和数据总线,此时能用的I/O口就只有P1和P3口,如果再使用串行通信I/O口就不够使用了,需要扩展I/O口。
    的头像 发表于 09-23 17:09 4990次阅读
    并行<b>I</b>/<b>O</b>口扩展的2种方式实例介绍

    linux设备virtio组织关系及设备初始化调用流程

    从哪里开始初始化的?要理清这些关系需要以linux设备驱动模型为背景展开讨论。这篇文章,我们以linux kernel 3.10代码为例,分析一下virtio的相关组织关系,以及设备
    的头像 发表于 09-25 15:47 3339次阅读
    linux<b>设备</b>中<b>virtio</b>组织关系及<b>设备</b>初始化调用<b>流程</b>

    系统虚拟化技术virtio总体设计思想

    ,主要有计算资源,存储资源和网络资源。所以,系统虚拟化技术又可以细分为计算虚拟化,存储虚拟化和网络虚拟化。其中存储设备和网络设备一般都是以外设的形式和CPU通过I/O总线连接起来的,所以存储虚拟化和网络虚拟化又可以统一归类为I/O虚拟化技术。我
    的头像 发表于 05-07 15:40 3260次阅读
    系统虚拟化技术<b>virtio</b>总体设计思想

    I/O软件模拟虚拟化和类虚拟化

    的标准化接口。Virtio成为整个问题的焦点:不管是SPDK/vhost、还是vDPA加速,都是围绕着Virtio接口展开。 1 I/O设备虚拟化:从软件模拟到SR-IOV I/O虚拟化是计算机虚拟化
    的头像 发表于 10-13 11:09 1663次阅读

    PLC系统的I/O接口该如何选择

    作为一台工业控制计算机,plc控制着工业过程。它与工业生产过程的连接是通过输入输出接口实现的。输入输出接口是PLC与外界的接口。I/O接口的功能是将输入信号转换成CPU可以接收和处理的信号,将CPU
    发表于 01-17 09:48 1789次阅读

    RT-Thread设备模型框架及创建注册设备实现

    RT-Thread设备模型框架及创建注册设备实现方式介绍如下:
    的头像 发表于 05-28 10:38 1100次阅读
    RT-Thread<b>设备</b>模型<b>框架</b>及创建注册<b>设备</b>的<b>实现</b>

    RT-Thread记录(十三、I/O 设备模型之PIN设备

    讲完UART设备之后,我们已经熟悉RT-Thread I/O 设备模型了,回头看看基本的 PIN 设备
    的头像 发表于 07-03 11:28 2740次阅读
    RT-Thread记录(十三、<b>I</b>/<b>O</b> <b>设备</b>模型之PIN<b>设备</b>)

    RT-Thread记录(十五、I/O 设备模型之SPI设备

    本文学习一下I/O 设备模型之SPI设备使用,I/O 设备模型篇的最后一篇文章。
    的头像 发表于 07-04 15:46 2123次阅读
    RT-Thread记录(十五、<b>I</b>/<b>O</b> <b>设备</b>模型之SPI<b>设备</b>)

    PLC I/O接口的作用及选择

    PLC作为一种工业控制计算机,其控制对象是工业过程。它与工业生产过程的联系就是通过输入/输出(I/O)接口实现的。I/O接口是PLC与外界连接的接口。I/O接口的作用是将输入信号转换为CPU能够接收和处理的信号,将CPU输出的微弱信号转换为外部设备
    发表于 09-01 10:10 3125次阅读

    I/O虚拟化及Virtio接口介绍

    I/O虚拟化是计算机虚拟化最复杂的部分,因为涉及到CPU、操作系统、Hypervisor以及I/O设备的相互配合。I/O虚拟化也经历了从软件模拟虚拟化、类虚拟化向完全硬件虚拟化的转变。
    的头像 发表于 10-26 17:21 1251次阅读

    工业远程I/O模块CANopen I/O模块产品概述

    Mxxc系列CANopen工业I/O数据采集模块按照苛刻的工业应用环境需求而设计,广泛应用于各种工业自动化生产、安防监控系统、自动化测量与控制系统中。用户可以采用不同的I/O的模块,来扩展IO,实现现场扩展控制和数据采集。
    发表于 12-30 14:00 406次阅读

    什么是I/O

    I/O 的全称是input/output,即输入和输入设备,常见的输入设备有:键盘、鼠标,输出设备则比如 显示器、音响 这样的
    的头像 发表于 01-20 17:16 540次阅读

    探究I/O虚拟化及Virtio接口技术(上)

    I/O虚拟化是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是从I/O硬件虚拟化开始,逐渐开启了DPU这个新处理器类型的创新。而Virtio接口,已经是事实上的云计算虚拟化
    的头像 发表于 04-04 16:54 794次阅读
    探究<b>I</b>/<b>O</b>虚拟化及<b>Virtio</b>接口技术(上)

    探究I/O虚拟化及Virtio接口技术(下)

    I/O虚拟化是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是从I/O硬件虚拟化开始,逐渐开启了DPU这个新处理器类型的创新。而Virtio接口,已经是事实上的云计算虚拟化
    的头像 发表于 04-04 17:03 1030次阅读
    探究<b>I</b>/<b>O</b>虚拟化及<b>Virtio</b>接口技术(下)

    XDC约束技巧之I/O篇(上)

    上有多种构建和实现方式,所以从 UCF 到 XDC 的转换过程中,最具挑战的可以说便是本文将要讨论的 I/O 约束了。
    的头像 发表于 04-06 09:53 88次阅读

    下载硬声App