一种用户态输入输出设备配置方法及装置与流程

文档序号:13331957阅读:469来源:国知局
一种用户态输入输出设备配置方法及装置与流程

本公开涉及linux操作系统配置技术领域,具体涉及一种用户态输入输出设备配置方法及装置。



背景技术:

现有技术中,linux操作系统一般的驱动设备都运行在内核态,在用户态用应用程序调用。由于传统驱动运行在内核态,为了解决内核态驱动对于用户态应用的驱动问题,针对内核态驱动已经开发出大量开源的配置工具。

随着发展,用户态输入输出(userspacei/o,uio)得到更多的应用,uio是运行在用户态的输入输出技术,它是将驱动的很少一部分运行在内核态,在用户态实现驱动的绝大多数功能。使用uio可以避免设备的驱动程序需要随着内核的更新而更新的问题。在uio框架下,用户态下的驱动程序比运行在内核态的驱动多,运行在内核态的驱动程序所做的工作相对简单,主要包括:分配和记录设备需要的资源以及注册uio设备。现有技术中,uio内核态的程序所做的越少越好,在用户态能完成的工作就不需要放在内核态做(例如响应中断)。这样,假如内核有变化,uio框架中的驱动维护也相对简单。

但是,现有技术中针对内核态驱动开发出的大量开源配置工具,不仅操作复杂,而且有针对性,并不能直接用于uio设备,往往需要针对uio设备做出大量修改,开发代价较大。

因而,针对现有uio用户态配置的种种缺陷,亟需要一种新的能够直接配置uio设备的方案。



技术实现要素:

鉴于上述问题,提出了本公开以便提供一种克服上述问题或者至少部分地解决上述问题的用户态输入输出设备配置方法及装置。

根据本发明的一个方面,一种用户态输入输出设备配置的方法,所述方法包括:

创建内核态与用户态之间的消息通路;

为所述用户态的输入输出uio设备创建对应的内核态伪设备;

内核态配置代理接收设备配置工具对所述内核态伪设备的配置请求;

所述内核态配置代理将该配置请求通过所述消息通路发送给用户态配置代理;

所述用户态配置代理从所述消息通路接收配置请求,调用对应的uio设备驱动执行相应的配置命令。

进一步的,在所述方法中,先执行所述创建内核态与用户态之间的消息通路步骤,再执行所述为所述用户态的输入输出uio设备创建对应的内核态伪设备设备;或者,所述创建内核态与用户态之间的消息通路步骤与所述为所述用户态的输入输出uio设备创建对应的内核态伪设备步骤,两者可以并行处理;或者,先执行所述为所述用户态的输入输出uio设备创建对应的内核态伪设备步骤,再执行所述创建内核态与用户态之间的消息通路步骤。

进一步的,所述方法还包括:所述内核态配置代理和所述用户态配置代理都能够访问所述消息通路的内存。

进一步的,所述方法还包括:

当所述内核态配置代理将该配置请求通过所述消息通路发送给所述用户态配置代理之后,每间隔设定时间查询所述消息通路;

当所述用户态配置代理调用对应的uio设备驱动执行相应的配置命令之后,将uio设备驱动返回的配置结果通过所述消息通路发送给所述内核态配置代理;

所述内核态配置代理在每间隔设定时间查询所述消息通路时,如果接收到返回的配置结果,则把该配置结果发送给所述设备配置工具。

进一步的,所述消息通路为先入先出fifo队列;所述用户态配置代理和内核态配置代理均能够对所述fifo队列进行操作。

进一步的,所述创建内核态与用户态之间的消息通路包括:

所述消息通路获取系统启动时预留的大页hugepage的物理地址,并将所述物理地址连续的所述大页hugepage归并为若干连续内存区域;

根据所述先入先出fifo队列的大小,在所述连续内存区域中获取内存区段,并在所述内存区段上申请大小为所述fifo队列的内存,根据其用户态首地址uaddr获取对应物理地址paddr;将所述物理地址paddr转换为内核虚拟地址kaddr;

所述用户态配置代理根据所述首地址uaddr操作所述fifo队列,所述内核态配置代理根据所述内核虚拟地址kaddr操作所述fifo队列。

进一步的,所述为用户态输入输出uio设备创建对应的内核态伪设备,包括,为uio设备分配唯一设备标识did,所述内核态伪设备与设备标识did唯一对应。

进一步的,所述消息通路由两个fifo队列构成,形成先入先出循环队列,其中:

所述内核态配置代理对所述第一fifo队列进行写操作以发送消息,对第二fifo队列进行读操作以接收消息;

所述用户态配置代理对所述第二fifo队列进行写操作以发送消息,对第一fifo队列进行读操作以接收消息。

进一步的,所述消息通路中的消息包括:

消息标识mid,用于标识一个特定的配置请求消息及其对应的配置结果消息;

设备标识did,用于标识需要配置的uio设备;

以及配置请求或配置结果。

此外,根据本发明的另一方面,还提出了一种用户态输入输出设备配置装置,包括:

消息通路,用于用户态配置代理和内核态配置代理传送消息;

所述内核态配置代理,用于接收设备配置工具对内核态伪设备的配置请求,并且将该配置请求通过所述消息通路发送给所述用户态配置代理;

所述用户态配置代理,用于从所述消息通路接收配置请求,调用对应的uio设备驱动执行相应的配置命令。

进一步的,还包括:

当所述内核态配置代理将该配置请求通过所述消息通路发送给所述用户态配置代理之后,每间隔设定时间查询所述消息通路;

当所述用户态配置代理调用所述对应的uio设备驱动执行相应的配置命令之后,将所述uio设备驱动返回的配置结果通过所述消息通路发送给所述内核态配置代理;

所述内核态配置代理在每间隔设定时间查询所述消息通路时,如果接收到返回的配置结果,则把该配置结果发送给所述设备配置工具。

进一步的,所述消息通路为先入先出fifo队列;所述用户态配置代理和所述内核态配置代理均能够对所述fifo队列进行操作。

进一步的,创建内核态与用户态之间的消息通路包括:

所述消息通路获取系统启动时预留的大页hugepage的物理地址,并将所述物理地址连续的所述大页hugepage归并为若干连续内存区域;

根据所述先入先出fifo队列的大小,在所述连续内存区域中获取内存区段,并在所述内存区段上申请大小为所述fifo队列的内存,根据其用户态首地址uaddr获取对应物理地址paddr;将所述物理地址paddr转换为内核虚拟地址kaddr;

所述用户态配置代理根据所述首地址uaddr操作所述fifo队列,所述内核态配置代理根据所述内核虚拟地址kaddr操作所述fifo队列。

进一步的,消息通路由两个fifo队列构成,形成先入先出循环队列,其中:

所述内核态配置代理对所述第一fifo队列进行写操作以发送消息,对第二fifo队列进行读操作以接收消息;

所述用户态配置代理对所述第二fifo队列进行写操作以发送消息,对所述第一fifo队列进行读操作以接收消息。

根据本发明的另一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

根据本发明的另一个方面,还提供了一种电子设备,包括:

上述的计算机可读存储介质;以及

一个或者多个处理器,用于执行所述计算机可读存储介质中的计算机程序。

根据本发明上述的一个或多个技术方案,其提供了一种用户态输入输出设备配置的方案,通过为用户态输入输出uio设备创建对应的内核态伪设备,内核态伪设备注册在linux操作系统内核中,从而可以在不修改用户态配置工具的前提下,实现直接配置uio设备,极大减少了开发代价。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本公开的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明一种实施例的用户态输入输出设备配置方法的流程示意图。

图2为本发明另一种实施例的用户态输入输出设备配置方法的流程示意图。

图3为本发明另一种实施例的用户态输入输出设备配置装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

如图1所示,一种用户态输入输出设备的配置方法,所述方法包括:

步骤s110,创建内核态与用户态之间的消息通路。

本实施例中,消息通路的本质为先入先出(firstinputfirstoutput,fifo)队列,其建立于内核态和用户态的共享内存上,内核态配置代理和用户态配置代理都能够访问该消息通路的内存,即用户态配置代理和内核态配置代理均能够对该fifo队列进行操作,用户态配置代理和内核态配置代理之间的消息传送通过消息通路进行。

消息通路中的消息包括:

消息标识mid,用于标识一个特定的配置请求消息及其对应的配置结果消息;设备标识did,用于标识需要配置的uio设备;以及配置请求或配置结果。每一个配置请求或配置结果都有唯一的消息标识mid,其配置结果的消息标识mid和与其对应的配置请求的消息标识mid相同。

具体的,fifo队列可以为一个,也可以为两个:

fifo队列仅为一个时,适用于uio设备的配置结果不需要返回到内核态的情况,这一个fifo队列用于将内核态的配置请求发送到用户态,即实现内核态配置代理向用户态配置代理发送配置请求,而无需另一个fifo队列将配置结果反向传送回内核态。

fifo队列为两个时,形成fifo循环队列,适用于uio设备的配置结果需要返回到内核态的情况,这时一个fifo队列用于将内核态的配置请求发送到用户态,即实现内核态配置代理向用户态配置代理发送配置请求;另一个fifo队列用于将用户态的配置结果反向传送回内核态。

进一步的,创建内核态与用户态之间的消息通路包括:

步骤s111,消息通路获取系统启动时预留的大页hugepage的物理地址,并将物理地址连续的大页hugepage归并为若干连续内存区域。

步骤s112,根据所先入先出fifo队列的大小,在连续内存区域中获取内存区段,并在该内存区段上申请大小为fifo队列的内存,根据其用户态首地址uaddr获取对应物理地址paddr;将所述物理地址paddr转换为内核虚拟地址kaddr。

步骤s113,用户态配置代理根据所述首地址uaddr操作fifo队列,内核态配置代理根据所述内核虚拟地址kaddr操作所述fifo队列。

本实施例中,在大页hugepage上创建共享内存,是因为大页hugepage上的内存不会被换出到硬盘上,同时物理地址连续,便于用户态空间和内核态空间的地址转换。

步骤s120,为用户态的输入输出uio设备创建对应的内核态伪设备。

需要为一个uio设备创建一个对应的内核态伪设备,也就是伪内核设备。这个内核态伪设备并不是实际的物理存在,而是对应于实际的uio设备存在。对内核态伪设备的配置可以映射到对实际uio设备的配置。

内核态伪设备运行于内核态中,注册在linux操作系统内核中。对于linux操作系统来说,相当于内核中运行着一个伪设备,系统可以对该伪设备进行各种操作,然后这些操作被映射到实际的uio设备,实现系统对于uio设备的配置和操作。

具体的,内核态伪设备创建步骤包括:

步骤s121,uio设备驱动初始化时,每接管一个uio设备,都要给该uio设备分配一个唯一设备标识did,该唯一设备标识did与该uio设备唯一对应。

步骤s122,同步在内核态创建一个与该uio设备对应的伪设备,建立该伪设备与uio设备设备标识did的一一对应关系。内核态伪设备注册到linux内核中,对该伪设备的配置将通过消息通路映射到与之对应的uio设备中。

步骤s130,内核态配置代理接到设备配置工具对内核态伪设备的配置请求。

内核态配置代理是在内核态创建的伪设备驱动。内核态配置代理接到设备配置工具对伪设备的配置请求,之后将该配置请求进行格式转换,以便于后续的传输。格式转换的通常目的是用于匹配不同场景下的格式需求。

步骤s140,内核态配置代理将该配置请求通过消息通路发送给用户态配置代理。

内核态配置代理将该配置请求格式转换后,生成一个唯一的配置请求消息标识mid,并且与需要被配置的uio设备的设备标识did、配置请求一起放入消息通路中,即放入一个fifo队列中。

步骤s150,用户态配置代理从消息通路接收配置请求,调用对应的uio设备驱动执行相应的配置命令。

用户态配置代理查询消息通路的fifo队列,如果查询到该配置请求则接收并解析消息通路中的配置请求,根据设备标识did调用对应uio设备驱动的相关函数,执行相应的配置命令。

用户态配置代理是uio设备驱动和消息通路之间的桥梁,用于从消息通路上接收配置请求,并把配置请求转换为uio设备的函数调用,如果需要,最后也可以把配置结果返回给消息通路。uio设备驱动是用户态的驱动程序,并以函数的形式提供获取设备状态、配置设备工作模式的接口。

本发明通过在linux内核建立与uio设备一一对应的内核态配置代理(即伪内核设备驱动),并设计了一个基于共享内存技术的消息通路,通过消息通路把对伪内核设备驱动的配置消息转换为针对uio设备的配置消息,从而在不修改用户态配置工具的前提下,实现使用该工具直接配置uio设备,大大减少了开发代价。

由于消息通路会对外导出一个接收/发送函数,伪设备只要调用这个函数就可以了,不需要知道通道的创建时机。因此,作为本发明的另一种实施例,消息通路也可以在首次调用时创建。

同样,作为本发明的另一种实施例,步骤s110创建内核态与用户态之间的消息通路与步骤s120为所述用户态的输入输出uio设备创建对应的内核态伪设备,两者可以并行处理,也可达到本发明的技术效果。

同样,作为本发明的另一种实施例,也可以先执行步骤s120为所述用户态的输入输出uio设备创建对应的内核态伪设备,再执行步骤s110创建内核态与用户态之间的消息通路。这种情况在消息通路初始化完成之前,会有一些指令配置失败,但初始化后即可达到本发明的技术效果。

上述实施例均是采用消息通路是一个fifo队列的情况,下面将以消息通路为两个fifo队列组成循环队列的情况举例说明,其中对与上述实施例有区别的地方做详细说明,对于与上述实施例相同步骤、相同原理的地方不再做过多的赘述,参照上述实施例即可。

如图2所示,一种用户态输入输出设备的配置方法,所述方法包括:

步骤s210,创建内核态与用户态之间的消息通路。

本实施例中,消息通路的本质是两个先入先出(firstinputfirstoutput,fifo)循环队列,其建立于内核态和用户态的共享内存上,内核态配置代理和用户态配置代理都能够访问该消息通路的内存。本实施例采用fifo队列,是为了使用户态程序和内核态程序在不加锁的前提下,可以同时作为生产者和消费者,并向队列中存数据和取数据。这里的内核态程序和用户态程序可以是内核态配置代理和用户态配置代理。

消息通路由两个fifo队列构成,其中:

第一fifo队列:内核态程序是生产者,用户态程序是消费者,用于内核态配置代理向用户态配置代理发送配置请求。

第二fifo队列:用户态程序是生产者,内核态程序是消费者,用于用户态配置代理向内核态配置代理返回配置结果。

换句话说,内核态配置代理对所述第一fifo队列进行写操作,对第二fifo队列进行读操作;用户态配置代理对所述第二fifo队列进行写操作,对第一fifo队列进行读操作。

fifo中的消息,结构如表1:

表1

每一个配置请求或配置结果都有唯一的mid号,其配置结果的mid号与之相同。

具体的fifo队列的创建步骤可以如下:

步骤s211,获取操作系统启动时预留的一定数量的大页hugepage;

步骤s212,消息通路(用户态部分)获取每块hugepage的物理地址,并将它们按照物理地址由小到大排序;

步骤s213,把物理地址连续的hugepage归并为若干连续内存区域;

步骤s214,根据fifo队列的大小size,在所述连续内存区域中找到合适的内存区段memzone,并在memzone上申请大小为size的内存,记录其用户态首地址uaddr,并将首地址uaddr转换为物理地址paddr;

步骤s215,消息通路(内核态部分)获取物理地址paddr,并通过函数phys_to_virt将物理地址paddr转换为内核态虚拟地址kaddr;

步骤116,消息通路(用户态部分)将首地址uaddr发送给用户态配置代理,消息通路(内核态部分)将虚拟地址kaddr发送给内核态配置代理,即用户态程序可以使用首地址uaddr,内核态程序可以使用虚拟地址kaddr操作同一块内存,也即让内核态配置代理和用户态配置代理能够操作同一个消息通路对应的内存。

本实施例中,在hugepage上创建共享内存,是因为hugepage上的内存不会被换出到硬盘上,同时物理地址连续,便于用户态空间和内核态空间的地址转换。

步骤s220,为用户态的输入输出uio设备创建对应的内核态伪设备。

在uio设备驱动模块初始化时,每接管一个设备,都要给该设备分配一个唯一的标识符,并同步在内核态创建一个与之一一对应的内核态配置代理。

此步骤原理同图1实施例的对应步骤,在此不再赘述。

步骤s230,内核态配置代理接收设备配置工具对内核态伪设备的配置请求。

内核态配置代理(即内核态伪设备驱动)接到设备配置工具对伪设备的配置请求后,将该配置请求进行格式转换,以便于后续传输。

步骤s240,内核态配置代理将该配置请求通过所述消息通路发送给所述用户态配置代理。

内核态配置代理将该配置请求格式转换后,生成一个唯一的配置请求消息标识mid,并且与需要被配置的uio设备的设备标识did、配置请求一起放入消息通路的第一fifo队列中发送给用户态配置代理,并且每隔一段时间或每间隔设定时间查询消息通路的第二fifo队列。

步骤s250,用户态配置代理从消息通路接收配置请求,调用对应的uio设备驱动执行相应的配置命令。

用户态配置代理查询消息通路的第一fifo队列,看是否有配置请求,如果有配置请求则接收并解析消息通路第一fifo队列中的配置请求,记录该请求的请求标识mid,根据设备标识did找到与之对应的uio设备,调用该uio设备驱动的相关函数,执行相应的配置命令。

步骤s260,用户态配置代理将uio设备驱动返回的配置结果通过消息通路发送给所述内核态配置代理。

用户态配置代理接收uio设备驱动返回的配置结果并记录配置返回结果,将配置结果格式转换,并将配置结果的消息标识号填写为mid,送回消息通路第二fifo队列。

由于用户态驱动和内核态驱动返回的结果数据结构不一致,因此需要对两种数据结构进行格式转化。因此,可以找到一种映射关系,把用户态驱动返回的结果直接转换格式,变为内核态驱动的格式。但是,由于用户态驱动和内核态驱动返回的结果都可能含有指针,而在本发明中,用户态和内核态是通过fifo通信的。这种通信方式决定了指针无法直接传输。因此需要一种中间格式,这种中间格式不包括指针。

以用户态给内核态返回数据为例,这里涉及两次格式转换。

第一次:在用户态,把用户配置代理返回的结果转为中间格式。

第二次:在内核态,把中间格式转换为内核驱动使用的格式(内核驱动使用的格式即配置工具的格式)。

以一个链表为例:

加入用户态驱动的返回结果是一个链表a->b->c,第一次格式转换后可以表示为长度为3的数组,数组内容为{a,b,c},第二次格式转换后,可能表示为一种内核使用的结构,如a->b->c。

本发明其他地方的格式转换也是为了匹配不同场景下的格式需求,本领域技术人员可依据此原理进行格式转换,在此不再赘述。

步骤s270,内核态配置代理在每间隔设定时间查询消息通路,如果接收到返回的配置结果,则把该配置结果发送给设备配置工具。

内核态配置代理查询消息通路的第二fifo队列,看返回的配置结果队首的id是否为mid,如果是则读取出返回的配置结果,并把配置结果经格式转换后发送给设备配置工具。或者,内核态配置代理查询消息通路的第二fifo队列,看返回的配置结果队首的id是否为mid,若是则直接把返回的配置结果经格式转换后发送给设备配置工具。

根据本发明的实施例,用户态配置代理接收内核态配置代理通过消息通路发送的对内核态伪设备对应的uio设备的配置请求,将配置请求发送与之对应的uio设备的uio设备驱动进行配置;用户态配置代理接收uio设备驱动发送配置的配置结果,并通过消息通路发送内核态配置代理。通过设计一个基于共享内存技术的消息通路,通过消息通路把对内核态伪设备的配置消息转换为针对uio设备的配置消息。建立起了完整的用户态配置代理与内核态配置代理的交互途径,提供了一个优选的实现直接配置uio设备的方案,在不修改用户态配置工具的前提下,实现直接配置uio设备,极大减少了开发代价。

由于消息通路会对外导出一个接收/发送函数,伪设备只要调用这个函数就可以了,不需要知道通道的创建时机。因此,作为本发明的另一种实施例,消息通路也可以在首次调用时创建。

同样,作为本发明的另一种实施例,步骤s210创建内核态与用户态之间的消息通路与步骤s220为所述用户态的输入输出uio设备创建对应的内核态伪设备,两者可以并行处理,也可达到本发明的技术效果。

同样,作为本发明的另一种实施例,也可以先执行步骤s220为所述用户态的输入输出uio设备创建对应的内核态伪设备,再执行步骤s210创建内核态与用户态之间的消息通路。这种情况在消息通路初始化完成之前,会有一些指令配置失败,但初始化后即可达到本发明的技术效果。

下面以一个实际例子来阐述本发明的原理,本实施例以对用户态网卡驱动为例,说明整个方案的运行流程:

linux操作系统启动时,初始化消息通路。

此时,uio设备驱动接管一块网卡,给该网卡分配唯一标识符did1;

同步的,在内核态创建一个内核态伪设备eth0,与上述唯一标识符为did1的网卡相对应。

若用户想要关闭该网卡时,通常,用户通过ifconfigeth0down命令来执行;这个命令就是一个配置请求。

内核态伪设备eth0的内核态配置代理接收到该配置请求,为该配置请求申请一个消息标识mid1,根据这个消息标识mid1和对应的设备标识did1将该配置请求送入消息通路中的第一fifo队列,并等待返回配置结果;

用户态配置代理从消息通路中中的第一fifo队列中取出该配置请求,并调用uio设备驱动关于关闭网卡的接口,根据相关参数完成对uio设备驱动的配置调用,也即完成对该网卡的关闭操作。

用户态配置代理将uio设备驱动返回的配置结果送回消息通路的第二fifo队列,这个配置结果的消息标识为mid1,与配置请求对应;这里的配置结果可以是网卡关闭完成或者未能关闭网卡;

内核态配置代理从消息通路中的第二fifo队列中收到该结果,并将该配置结果经格式转换后返回给系统的ifconfig命令;

ifconfig命令返回给用户配置结果,配置成功或者未能成功,用户得到对于uio设备的配置结果。

本发明在linux内核建立与uio设备一一对应的伪内核设备驱动,并设计了一个基于共享内存技术的配置通路,通过配置通路把对伪内核设备驱动的配置消息转换为针对uio设备的配置消息,从而在不修改用户态配置工具的前提下,实现使用该工具直接配置uio设备,大大减少了开发代价。

当然,对于用户态的驱动程序,还可以集成到某款应用软件中,因为使用uio的设备一般比较少见,所以作出这类的驱动也可以针对某款或者一类设备作出应用程序集成了驱动。

根据本发明的另一方面,本发明还提供一种用户态输入输出设备配置装置,由于其原理与上述方法各实施例对应,因此,在此不再赘述。如图3所示,用户态输入输出设备配置装置300包括:

消息通路310,用于用户态配置代理320和内核态配置代理330传送消息。

用户态配置代理320,用于从消息通路310接收配置请求,调用对应的uio设备驱动340执行相应的配置命令。

内核态配置代理330,用于接收设备配置工具350对内核态伪设备的配置请求,并且将该配置请求通过消息通路310发送给用户态配置代理320。

其中,uio设备驱动340、用户态配置代理320和设备配置工具350运行在用户态,内核态配置代理330运行在内核态,消息通路310采用共享内核技术,部分运行于内核态,部分运行于用户态。消息通路310为先入先出fifo队列,用户态配置代理320和内核态配置代理330均能够对fifo队列进行操作。当消息通路310由两个先入先出fifo队列组成时,内核态配置代理对第一fifo队列进行写操作以发送消息,对第二fifo队列进行读操作以接收消息;用户态配置代理对所述第二fifo队列进行写操作以发送消息,对第一fifo队列进行读操作以接收消息。

创建内核态与用户态之间的消息通路包括:

所述消息通路获取系统启动时预留的大页hugepage的物理地址,并将所述物理地址连续的所述大页hugepage归并为若干连续内存区域;

根据所述先入先出fifo队列的大小,在所述连续内存区域中获取内存区段,并在所述内存区段上申请大小为所述fifo队列的内存,根据其用户态首地址uaddr获取对应物理地址paddr;将所述物理地址paddr转换为内核虚拟地址kaddr;

所述用户态配置代理根据所述首地址uaddr操作所述fifo队列,所述内核态配置代理根据所述内核虚拟地址kaddr操作所述fifo队列。

进一步的,当内核态配置代理将该配置请求通过消息通路发送给用户态配置代理之后,每间隔设定时间查询消息通路;

当用户态配置代理调用对应的uio设备驱动执行相应的配置命令之后,将uio设备驱动返回的配置结果通过消息通路发送给内核态配置代理;

内核态配置代理在每间隔设定时间查询消息通路时,如果接收到返回的配置结果,则把该配置结果发送给设备配置工具。

根据本发明的另一方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

根据本发明的另一方面,本发明还提供一种电子设备,包括:

上述的计算机可读存储介质;以及一个或者多个处理器,用于执行所述计算机可读存储介质中的计算机程序。

本公开各个实施例中,提供了一种用户态输入输出设备配置的方案,通过为用户态输入输出uio设备创建对应的内核态伪设备,内核态伪设备注册在linux操作系统内核中,从而可以在不修改用户态配置工具的前提下,实现直接配置uio设备。

进一步的,用户态配置代理接收内核态配置代理通过消息通路发送的对内核态伪设备对应的uio设备的配置请求,将配置请求发送与之对应的uio设备的uio设备驱动进行配置;用户态配置代理接收uio设备驱动发送配置的配置结果,并通过消息通路发送内核态配置代理。通过设计一个基于共享内存技术的消息通路,通过消息通路把对内核态伪设备的配置消息转换为针对uio设备的配置消息。建立起了完整的用户态配置代理与内核态配置代理的交互途径,提供了一个优选的实现直接配置uio设备的方案,在不修改用户态配置工具的前提下,实现直接配置uio设备,极大减少了开发代价。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本公开的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。本说明书中涉及到的步骤编号仅用于区别各步骤,而并不用于限制各步骤之间的时间或逻辑的关系,除非文中有明确的限定,否则各个步骤之间的关系包括各种可能的情况。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本公开的范围之内并且形成不同的实施例。例如,在权利要求书中所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本公开的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本公开还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本公开的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本公开进行说明而不是对本公开进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本公开可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。

以上所述仅是本公开的具体实施方式,应当指出的是,对于本领域的普通技术人员来说,在不脱离本公开精神的前提下,可以作出若干改进、修改、和变形,这些改进、修改、和变形都应视为落在本申请的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1