CN114968535A - 一种数据传输方法、装置、电子设备及介质 - Google Patents
一种数据传输方法、装置、电子设备及介质 Download PDFInfo
- Publication number
- CN114968535A CN114968535A CN202210691741.3A CN202210691741A CN114968535A CN 114968535 A CN114968535 A CN 114968535A CN 202210691741 A CN202210691741 A CN 202210691741A CN 114968535 A CN114968535 A CN 114968535A
- Authority
- CN
- China
- Prior art keywords
- data
- write
- queue
- usb
- processed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0042—Universal serial bus [USB]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明实施例公开了一种数据传输方法、装置、电子设备及介质。方法包括:在USB串口逻辑文件下的端口结构体中添加写入队列;通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至写入队列中;通过USB串口逻辑文件的数据发送函数,依次将写入队列中的待处理数据传输至UDC,直至写入队列中的待处理数据传输完毕。通过在USB串口逻辑文件下的端口结构体中添加写入队列,更改部分数据结构和发送时的数据处理流程,实现用户数据先暂存写入队列,然后再传至UDC的发送队列,并实现去掉两次多余的内存拷贝和较大的一块内存缓冲区,减少了Linux内核对内存的占用,提高了数据传输的效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据传输方法、装置、电子设备及介质。
背景技术
目前,Linux操作系统中已经比较完整的实现了电传打字机(Teletypewriter,tty)架构下的通用串行总线(Universal Serial Bus,USB)驱动,用户只要实现自己的USB设备控制器(USB Device Controller,UDC)驱动即可。现有tty架构,对于Linux的应用程序(Application,APP)来说,如果打开tty架构下的USB驱动所提供的USB虚拟串口(如“ttyGSx”端口),以发送数据至个人计算机(Personal Computer,PC)时,tty架构下的USB驱动会包含三次相应的内存拷贝,最终通过USB控制器将数据发送至PC。
但是,在上述数据传输过程中,需要通过三次内存拷贝才能将数据发送至PC,内存拷贝次数过多,还会占用较多内存,从而影响了数据传输的效率。
发明内容
本发明实施例提供了一种数据传输方法、装置、电子设备及介质,以提高数据传输的效率。
根据本发明实施例的一方面,提供了一种数据传输方法,包括:
在USB串口逻辑文件下的端口结构体中添加写入队列,所述写入队列用于作为存储用户空间传输的待处理数据的内存空间;
通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至所述写入队列中;
通过所述USB串口逻辑文件的数据发送函数,依次将所述写入队列中的待处理数据传输至UDC,直至所述写入队列中的待处理数据传输完毕。
根据本发明实施例的另一方面,提供了一种数据传输装置,包括:
队列添加模块,用于在USB串口逻辑文件下的端口结构体中添加写入队列,所述写入队列用于作为存储用户空间传输的待处理数据的内存空间;
传输模块,用于通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至所述写入队列中;
拷贝模块,用于通过所述USB串口逻辑文件的数据发送函数,依次将所述写入队列中的待处理数据传输至UDC,直至所述写入队列中的待处理数据传输完毕。
根据本发明实施例的另一方面,提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的数据传输方法。
根据本发明实施例的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的数据传输方法。
本发明实施例的技术方案,首先在USB串口逻辑文件下的端口结构体中添加写入队列,写入队列用于作为存储用户空间传输的待处理数据的内存空间;然后通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至写入队列中;最后通过USB串口逻辑文件的数据发送函数,依次将写入队列中的待处理数据传输至UDC,直至写入队列中的待处理数据传输完毕。该方法通过在USB串口逻辑文件下的端口结构体中添加写入队列,更改部分数据结构和发送时的数据处理流程,实现用户数据先暂存写入队列,然后再传至UDC的发送队列,并实现去掉两次多余的内存拷贝和较大的一块内存缓冲区,减少了Linux内核对内存的占用,提高了数据传输的效率。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据传输方法的实现示意图;
图2为本发明实施例一提供的一种数据传输方法的流程图;
图3为本发明实施例二提供的一种数据传输方法的流程图;
图4为本发明实施例二提供的一种数据传输方法的实现示意图;
图5为本发明实施例二提供的另一种数据传输方法的实现示意图;
图6为本发明实施例三提供的一种数据传输装置的结构示意图;
图7为本发明实施例四提供的一种电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
现有tty架构的USB驱动发送数据至PC会存在三次内存拷贝,除了用户态到内核态的内存拷贝外,其余两次内存拷贝是多余的,而且还会多占用内存。本发明实施例提出了一种数据传输方法,去掉两次多余的内存拷贝,提高数据传输效率;还通过去掉两次多余的内存拷贝,能够去掉一块较大内存缓冲区(即内存占用较大的内存拷贝所对应的内存缓冲区),从而减少了Linux内核对内存的占用。
为了更好地理解本发明实施例,下面对相关术语进行介绍。
内核空间和用户空间:为了避免用户进程直接操作内核,保证内核安全,Linux系统将自身虚拟内存划分为两部分,一部分为核心软件,即可称为kernel,也称作内核空间;另一部分为普通应用程序,这部分可称为用户空间,可表示为user。内核空间中存放的是内核代码和数据,而用户进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟内存空间中,都是对物理地址的映射。
用户态到内核态的内存拷贝:拷贝可以指复制,从用户态的内存复制数据至内核态的内存,也就是说,从用户空间向内核空间拷贝传递数据。
图1为本发明实施例提供的一种数据传输方法的实现示意图。如图1所示,现有tty架构下的USB驱动传输数据至PC会存在三次内存拷贝,第一次内存拷贝是内核空间的tty从用户空间拷贝内存(即copy_from_user),2K Buffer可表示2K的内存缓冲区;第二次内存拷贝是u_serial(即USB串口逻辑文件)从tty拷贝内存(即通过内存拷贝函数(即memcpy)从tty拷贝内存),4M Buffer可表示4M的内存缓冲区;第三次内存拷贝是UDC从u_serial拷贝内存(即通过内存拷贝函数(即memcpy)从u_serial拷贝内存),1K Buffer Queue可表示1K的内存缓冲区队列。
实施例一
图2为本发明实施例一提供的一种数据传输方法的流程图,本实施例可适用于通过USB虚拟串口传输数据的情况,该方法可以由数据传输装置来执行,该数据传输装置可以采用硬件和/或软件的形式实现,该数据传输装置可配置于电子设备中。如图2所示,该方法包括:
S110、在USB串口逻辑文件下的端口结构体中添加写入队列,所述写入队列用于作为存储用户空间传输的待处理数据的内存空间。
本实施例中,USB串口逻辑文件可理解为用于指示USB虚拟串口相关运行逻辑的文件。也可理解为,USB串口逻辑文件为包含USB虚拟串口相关运行代码信息的文件。
对于Linux的应用程序来说,如果打开tty架构下的USB驱动所提供的USB虚拟串口(如“ttyGSx”端口),以发送数据至PC时,会涉及到USB虚拟串口相关运行逻辑的执行。在编程领域,USB虚拟串口相关运行逻辑可以以文件形式(如二进制文件)存放在相关的目录下(如USB驱动目录和USB驱动框架目录)。例如,以Linux4.4版本为例,USB串口逻辑文件可以指目录“usb/gadget”下的“u_serial.c”文件,其中“usb”可表示USB驱动目录,“gadget”可表示USB驱动框架目录,“u_serial.c”文件可表示USB串口逻辑文件;“usb/gadget”下的“u_serial.c”文件,可以是指在“usb”目录下的“gadget”目录下,存在一个“u_serial.c”文件为USB串口逻辑文件。
在编程领域,结构体可以指一种数据结构,可以是由一系列具有相同类型或不同类型的数据构成的数据集合;结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。端口结构体可理解为与USB虚拟串口相关联的结构体;例如,端口结构体可表示为“gs_port”。
写入队列可以用于作为存储用户空间传输的待处理数据的内存空间;也就是说,写入队列可以用作UDC的写缓存,当UDC发送数据时可以从写入队列中依次读取数据并发送。例如,写入队列可表示为“write_queue”。待处理数据可理解为等待处理的数据。
具体的,在USB串口逻辑文件下的端口结构体中可以添加写入队列,以用于作为存储用户空间传输的待处理数据的内存空间,使得后续UDC可以从写入队列中依次读取数据并发送。例如,在USB串口逻辑文件下的端口结构体中可以添加写入队列,可表示为在“u_serial.c”文件下的端口结构体“gs_port”中添加“struct list_head write_queue”,以用作UDC的写缓存,UDC发送数据时可以依次从这里读取数据。
S120、通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至所述写入队列中。
本实施例中,第一写文件函数可理解为USB串口逻辑文件下的用于向文件中写数据的函数。例如,第一写文件函数可表示为“gs_write”。第一写文件函数已经存在于USB串口逻辑文件下,通过更改第一写文件函数中的相关逻辑代码,可以将用户空间传输的待处理数据移至写入队列中。
在一实施例中,由于现有tty架构下的USB驱动传输数据至PC会存在三次内存拷贝,除了用户态到内核态的内存拷贝,其他两次内存拷贝(即可认为是内核空间的tty从用户空间拷贝内存,以及u_serial从tty拷贝内存)是多余的,且还会额外占用内存,可以直接将用户空间的内存拷贝至UDC。因此,在将用户空间传输的待处理数据移至写入队列中之前,可以跳过上述的第一次内存拷贝(即跳过2K Buffer不使用),也就是说跳过通过2KBuffer从用户空间拷贝内存这个过程;在此基础上,还可删除USB串口逻辑文件下的内存拷贝相关信息(即可认为是上述的第二次内存拷贝),即不使用该内存拷贝对应的内存缓冲区(即4M Buffer),而是直接使用在USB串口逻辑文件下的端口结构体中所添加的写入队列作为存储用户空间传输的待处理数据的内存空间。
S130、通过所述USB串口逻辑文件的数据发送函数,依次将所述写入队列中的待处理数据传输至UDC,直至所述写入队列中的待处理数据传输完毕。
本实施例中,数据发送函数可理解为USB串口逻辑文件下用于发送数据的函数。例如,数据发送函数可表示为“gs_start_tx”函数。
在将用户空间传输的待处理数据移至写入队列中之后,可以通过USB串口逻辑文件的数据发送函数,依次将写入队列中的待处理数据传输至UDC(如传输至UDC的发送队列中,发送队列可理解为UDC中存储待发送数据的消息队列),直至写入队列中的待处理数据传输完毕。
本发明实施例一提供了一种数据传输方法,首先在USB串口逻辑文件下的端口结构体中添加写入队列,写入队列用于作为存储用户空间传输的待处理数据的内存空间;然后通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至写入队列中;最后通过USB串口逻辑文件的数据发送函数,依次将写入队列中的待处理数据传输至UDC,直至写入队列中的待处理数据传输完毕。该方法通过在USB串口逻辑文件下的端口结构体中添加写入队列,更改部分数据结构和发送时的数据处理流程,实现用户数据先暂存写入队列,然后再传至UDC的发送队列,并实现去掉两次多余的内存拷贝和较大的一块内存缓冲区,减少了Linux内核对内存的占用,提高了数据传输的效率。
实施例二
图3为本发明实施例二提供的一种数据传输方法的流程图,本实施例二在上述各实施例的基础上进行细化。在本实施例中,对第一拷贝信息的删除、第二内存拷贝信息的跳过、将用户空间传输的待处理数据移至所述写入队列中的过程进行了具体描述。需要说明的是,未在本实施例中详尽描述的技术细节可参见上述任意实施例。如图3所示,该方法包括:
S210、在USB串口逻辑文件的串口调用函数里添加预设标识,预设标识用于指示USB虚拟串口。
本实施例中,串口调用函数可理解为USB串口逻辑文件下用于调用USB虚拟串口的函数。例如,串口调用函数可表示为“gs_open”。
预设标识可理解为预先设定的标识,以用于指示USB虚拟串口。此处对预设标识的设置不作具体限定,例如,预设标识可以为一串数字和字符构成,如0x80000000。
为区分USB虚拟串口和一般串口设备,可以在USB串口逻辑文件的串口调用函数里添加预设标识,通过预设标识来指示USB虚拟串口。例如,在USB串口逻辑文件的串口调用函数里添加预设标识,可表示为“tty->flags|=0x80000000”。
S220、在输入输出功能实现文件下,根据预设标识更改第二写文件函数,更改后的第二写文件函数用于指示在通过USB虚拟串口传输待处理数据时,输入输出功能实现文件下的第二内存拷贝信息被跳过。
本实施例中,输入输出功能实现文件可理解为tty架构目录(如“tty”目录)下的用于实现输入输出功能的文件。例如,输入输出功能实现文件可表示为“tty_io.c”文件。第二写文件函数可理解为输入输出功能实现文件下的用于向文件中写数据的函数。例如,第二写文件函数可表示为“tty_write”函数。第二内存拷贝信息可理解为输入输出功能实现文件下的内存拷贝信息;内存拷贝信息可理解为与内存拷贝相关联的逻辑代码信息。第二内存拷贝信息可认为是上述的第一次内存拷贝。
在输入输出功能实现文件下,根据预设标识更改第二写文件函数中与第二内存拷贝信息相关的原始执行逻辑,以使得更改后的第二写文件函数用于指示在通过USB虚拟串口传输待处理数据时,输入输出功能实现文件下的第二内存拷贝信息被跳过不执行。
示例性的,修改“tty_write”函数,将ret=do_tty_write(ld->ops->write,tty,file,buf,count);(即第二写文件函数中与第二内存拷贝信息相关的原始执行逻辑)更改为:
if(tty->flags&0x80000000){
ret=tty->ops->write(tty,buf,count);
}else{
ret=do_tty_write(ld->ops->write,tty,file,buf,count)
};(即更改后的第二写文件函数)
根据预设标识更改第二写文件函数所得到的更改后的第二写文件函数,通过基于预设标识设置一个if判断逻辑,以判断当前串口是否是USB虚拟串口;若是USB虚拟串口,则更改后的第二写文件函数用于指示在通过预设标识所指示的USB虚拟串口传输待处理数据时,输入输出功能实现文件下的第二内存拷贝信息被跳过;否则(如是一般串口设备)执行第二写文件函数中与第二内存拷贝信息相关的原始执行逻辑。
S230、删除USB串口逻辑文件下的第一内存拷贝信息,以使用户空间传输的待处理数据传输至写入队列。
本实施例中,第一内存拷贝信息可理解为USB串口逻辑文件下的内存拷贝信息;第一内存拷贝信息可认为是上述的第二次内存拷贝。
在跳过输入输出功能实现文件下的第二内存拷贝信息的基础上,删除USB串口逻辑文件下的第一内存拷贝信息,以使得用户空间传输的待处理数据不使用第一内存拷贝信息和第二内存拷贝信息,可直接传输至写入队列中。例如,删除USB串口逻辑文件下的第一内存拷贝信息,可表示为删除“u_serial.c”文件中的所有“port_write_buf”相关代码信息;其中所有“port_write_buf”相关代码信息可认为是第一内存拷贝信息。
需要说明的是,本发明对S210至S220,与S230之间的执行先后顺序不作具体限定。如可以先执行S210至S220,再执行S230。也可以先执行S230,再执行S210至S220。
S240、在USB串口逻辑文件下的端口结构体中添加写入队列。
本实施例中,在跳过第二内存拷贝信息和删除第一内存拷贝信息之后,可以在USB串口逻辑文件下的端口结构体中添加写入队列,以使得写入队列在后续过程中用于作为存储用户空间传输的待处理数据的内存空间。
S250、通过USB串口逻辑文件的第一写文件函数,从预设写空间内获取一个USB请求结构体,USB请求结构体为缓存数据的最小数据单元。
本实施例中,预设写空间可理解为在第一写文件函数下预先设定的写空间。预设写空间中可包括多个USB请求结构体,多个USB请求结构体按照一定的顺序以列表形式排列在预设写空间中;也就是说,预设写空间可认为是一个包含多个USB请求结构体的结构列表。例如,预设写空间可表示为“write_pool”。
USB请求结构体可理解为用于缓存数据的最小数据单元;例如一个USB请求结构体中可包含1K缓冲区(即1K Buffer),也可以包含2K Buffer,此处对此不作限定,可根据实际需求进行灵活设定。例如,USB请求结构体可表示为“usb_request”。
具体的,可以通过USB串口逻辑文件的第一写文件函数,从预设写空间内获取一个USB请求结构体,以用于后续将用户空间传输的待处理数据拷贝至该USB请求结构体中。
S260、将用户空间传输的待处理数据拷贝至USB请求结构体中。
本实施例中,在从预设写空间中获取一个USB请求结构体之后,可以将用户空间传输的待处理数据拷贝至该USB请求结构体中。如可以通过相应的拷贝函数将用户空间传输的待处理数据拷贝至USB请求结构体中。
可选的,将用户空间传输的待处理数据拷贝至USB请求结构体中,包括:通过拷贝函数,将用户空间传输的待处理数据拷贝至USB请求结构体的数据缓冲区中。
其中,拷贝函数可理解为用于拷贝用户空间传输的待处理数据的函数。例如拷贝函数可以是“copy_from_user”函数。USB请求结构体的数据缓冲区可理解为USB请求结构体的中用于缓冲输入或输出的数据的存储空间,如1K Buffer。USB请求结构体可表示为“usb_request”。
可以通过调用拷贝函数,将用户空间传输的待处理数据拷贝至USB请求结构体的数据缓冲区中。
S270、将包含待处理数据的USB请求结构体从预设写空间中移至写入队列中。
本实施例中,在将待处理数据拷贝至USB请求结构体中之后,可将该包含待处理数据的USB请求结构体从预设写空间中移至写入队列中存储,以便于后续UDC从写入队列中读取包含待处理数据的USB请求结构体并发送出去。
S280、判断用户空间的待处理数据是否传输完毕,若是,则执行S290;否则返回执行S250。
本实施例中,判断用户空间的待处理数据是否传输完毕或预设写空间是否为空,若用户空间的待处理数据传输完毕,则结束将用户空间传输的待处理数据移至写入队列中这个过程,继续执行S290。
若用户空间的待处理数据未传输完毕,则继续返回执行S250从预设写空间内获取一个USB请求结构体的操作,直至用户空间的待处理数据传输完毕。
可理解的是,若预设写空间为空,表明此时预设写空间内的USB请求结构体已被获取完,则无论用户空间的待处理数据是否传输完毕,均结束将用户空间传输的待处理数据移至写入队列中这个过程,并继续执行S290。
S290、通过USB串口逻辑文件的数据发送函数,依次将写入队列中的USB请求结构体传输至UDC,直至写入队列中的USB请求结构体传输完毕。
本实施例中,在将包含待处理数据的USB请求结构体全部从预设写空间中移至写入队列中之后,可以通过USB串口逻辑文件的数据发送函数,依次将写入队列中的各个USB请求结构体传输至UDC,直至写入队列中的USB请求结构体传输完毕。
S2100、将写入队列中的USB请求结构体移回至预设写空间中。
本实施例中,在将写入队列中的USB请求结构体传输完毕之后,可以将写入队列中的USB请求结构体移回至预设写空间中,以待下次待处理数据的传输使用。
需要说明的是,虽然是将写入队列中的USB请求结构体传输至UDC,但是在传输完毕之后,写入队列中还包括这些包含待处理数据的USB请求结构体。将写入队列中包含待处理数据的USB请求结构体移回至预设写空间中等待下一次备用,当下一次包含待处理数据的USB请求结构体被获取和使用的时候,新的待处理数据会覆盖掉该USB请求结构体中原有包含的待处理数据。
本发明实施例二提供了一种数据传输方法,具体化了对第一拷贝信息的删除、第二内存拷贝信息的跳过、将用户空间传输的待处理数据移至所述写入队列中的过程。该方法通过跳过第二内存拷贝信息和删除第一内存拷贝信息,以将用户空间传输的待处理数据直接传输至写入队列中,能够去掉第一内存拷贝信息和第二内存拷贝信息这两次多余的内存拷贝,还能够避免第一内存拷贝信息和第二内存拷贝信息占用额外的内存,减少了Linux内核对内存的占用,提高了数据传输的效率。
以下对本发明进行示例性说明。
图4为本发明实施例二提供的一种数据传输方法的实现示意图。如图4所示,跳过tty从用户空间拷贝内存这一次内存拷贝(即第二内存拷贝信息),删除u_serial从tty拷贝内存这一次内存拷贝(即第一内存拷贝信息),直接通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至写入队列(即1K Buffer Queue)中,通过USB串口逻辑文件的数据发送函数,依次将写入队列中的待处理数据拷贝至UDC,实现数据的传输。
本发明实施例提出的数据传输方法,主要是更改Linux内核里tty架构下的USB驱动,对于应用层来说,调用接口不变。
以USB设备接入Windows系统的计算机设备为例,假设Linux系统上的应用程序需要输出大量的日志(即Log)数据至Windows系统上的应用程序,以便于用户查看、分析或处理这些Log数据。
图5为本发明实施例二提供的另一种数据传输方法的实现示意图。如图5所示,在Linux系统上的想要传输日志的应用程序(即日志App)将日志数据传输至Windows系统上的应用程序,以用于日志查看。在Linux系统上,跳过第二内存拷贝信息和删除第一内存拷贝信息,通过写入队列(即1K Buffer Queue)将用户空间传输的日志数据拷贝至UDC。UDC通过USB设备将日志数据传输至Windows系统上的USB主机控制器(即USB Host Controller),再传输至用户空间,以用于用户查看、分析或处理这些日志数据。
假设“ttyGS0”端口(即USB虚拟串口设备)为应用A的Log数据通道,那么Linux系统上的应用A就可以采用如下方式实现数据传输:
步骤1、分配相应的数据空间;
步骤2、打开USB虚拟串口设备;
步骤3、执行相应的原始执行逻辑,此处不作赘述;
步骤4、格式化或准备Log数据;
步骤5、将Log数据写入USB虚拟串口设备;
步骤6、返回执行步骤4,直至Log数据写入完毕;
步骤7、关闭USB虚拟串口设备。
实施例三
图6为本发明实施例三提供的一种数据传输装置的结构示意图。如图6所示,该装置包括:
队列添加模块310,用于在USB串口逻辑文件下的端口结构体中添加写入队列,所述写入队列用于作为存储用户空间传输的待处理数据的内存空间;
第一传输模块320,用于通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至所述写入队列中;
第二传输模块330,用于通过所述USB串口逻辑文件的数据发送函数,依次将所述写入队列中的待处理数据传输至UDC,直至所述写入队列中的待处理数据传输完毕。
本发明实施例三提供了一种数据传输装置,首先通过队列添加模块310,在USB串口逻辑文件下的端口结构体中添加写入队列,写入队列用于作为存储用户空间传输的待处理数据的内存空间;然后通过第一传输模块320,通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至写入队列中;最后通过第二传输模块330,通过USB串口逻辑文件的数据发送函数,依次将写入队列中的待处理数据传输至UDC,直至写入队列中的待处理数据传输完毕。该装置通过在USB串口逻辑文件下的端口结构体中添加写入队列,更改部分数据结构和发送时的数据处理流程,实现用户数据先暂存写入队列,然后再传至UDC的发送队列,并实现去掉两次多余的内存拷贝和较大的一块内存缓冲区,减少了Linux内核对内存的占用,提高了数据传输的效率。
可选的,所述装置还包括:
删除模块,用于删除USB串口逻辑文件下的第一内存拷贝信息,以使所述用户空间传输的待处理数据传输至所述写入队列。
可选的,所述装置还包括:
标识添加模块,用于在通用串行总线USB串口逻辑文件下的端口结构体中添加写入队列之前,在USB串口逻辑文件的串口调用函数里添加预设标识,所述预设标识用于指示USB虚拟串口。
可选的,所述装置还包括:
更改模块,用于在输入输出功能实现文件下,根据所述预设标识更改第二写文件函数,更改后的第二写文件函数用于指示在通过所述USB虚拟串口传输所述待处理数据时,所述输入输出功能实现文件下的第二内存拷贝信息被跳过。
可选的,第一传输模块320,具体包括:
结构体获取单元,用于从预设写空间内获取一个USB请求结构体,所述USB请求结构体为缓存数据的最小数据单元;
拷贝单元,用于将所述用户空间传输的待处理数据拷贝至所述USB请求结构体中;
移动单元,用于将包含所述待处理数据的USB请求结构体从所述预设写空间中移至所述写入队列中;
执行单元,用于返回执行从预设写空间内获取一个USB请求结构体的操作,直至所述用户空间的待处理数据传输完毕,其中每次获取的USB请求结构体不同。
可选的,拷贝单元,具体用于:
通过拷贝函数,将所述用户空间传输的待处理数据拷贝至所述USB请求结构体的数据缓冲区中。
可选的,所述装置还包括:
移动模块,用于在所述写入队列中的USB请求结构体传输完毕之后,将所述写入队列中的USB请求结构体移回至所述预设写空间中。
本发明实施例所提供的数据传输装置可执行本发明任意实施例所提供的数据传输方法,具备执行方法相应的功能模块和有益效果。
实施例四
图7为本发明实施例四提供的一种电子设备的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图7所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如数据传输方法。
在一些实施例中,数据传输方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的数据传输方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据传输方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种数据传输方法,其特征在于,所述方法包括:
在通用串行总线USB串口逻辑文件下的端口结构体中添加写入队列,所述写入队列用于作为存储用户空间传输的待处理数据的内存空间;
通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至所述写入队列中;
通过所述USB串口逻辑文件的数据发送函数,依次将所述写入队列中的待处理数据传输至USB设备控制器UDC,直至所述写入队列中的待处理数据传输完毕。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
删除USB串口逻辑文件下的第一内存拷贝信息,以使所述用户空间传输的待处理数据传输至所述写入队列。
3.根据权利要求1所述的方法,其特征在于,在通用串行总线USB串口逻辑文件下的端口结构体中添加写入队列之前,还包括:
在USB串口逻辑文件的串口调用函数里添加预设标识,所述预设标识用于指示USB虚拟串口。
4.根据权利要求3所述的方法,其特征在于,还包括:
在输入输出功能实现文件下,根据所述预设标识更改第二写文件函数,更改后的第二写文件函数用于指示在通过所述USB虚拟串口传输所述待处理数据时,所述输入输出功能实现文件下的第二内存拷贝信息被跳过。
5.根据权利要求1所述的方法,其特征在于,所述将用户空间传输的待处理数据移至所述写入队列中,包括:
从预设写空间内获取一个USB请求结构体,所述USB请求结构体为缓存数据的最小数据单元;
将所述用户空间传输的待处理数据拷贝至所述USB请求结构体中;
将包含所述待处理数据的USB请求结构体从所述预设写空间中移至所述写入队列中;
返回执行从预设写空间内获取一个USB请求结构体的操作,直至所述用户空间的待处理数据传输完毕,其中每次获取的USB请求结构体不同。
6.根据权利要求5所述的方法,其特征在于,所述将所述用户空间传输的待处理数据拷贝至所述USB请求结构体中,包括:
通过拷贝函数,将所述用户空间传输的待处理数据拷贝至所述USB请求结构体的数据缓冲区中。
7.根据权利要求5所述的方法,其特征在于,还包括:
在所述写入队列中的USB请求结构体传输完毕之后,将所述写入队列中的USB请求结构体移回至所述预设写空间中。
8.一种数据传输装置,其特征在于,所述装置包括:
队列添加模块,用于在通用串行总线USB串口逻辑文件下的端口结构体中添加写入队列,所述写入队列用于作为存储用户空间传输的待处理数据的内存空间;
第一传输模块,用于通过USB串口逻辑文件的第一写文件函数,将用户空间传输的待处理数据移至所述写入队列中;
第二传输模块,用于通过所述USB串口逻辑文件的数据发送函数,依次将所述写入队列中的待处理数据传输至USB设备控制器UDC,直至所述写入队列中的待处理数据传输完毕。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的数据传输方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的数据传输方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210691741.3A CN114968535A (zh) | 2022-06-17 | 2022-06-17 | 一种数据传输方法、装置、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210691741.3A CN114968535A (zh) | 2022-06-17 | 2022-06-17 | 一种数据传输方法、装置、电子设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114968535A true CN114968535A (zh) | 2022-08-30 |
Family
ID=82964010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210691741.3A Pending CN114968535A (zh) | 2022-06-17 | 2022-06-17 | 一种数据传输方法、装置、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114968535A (zh) |
-
2022
- 2022-06-17 CN CN202210691741.3A patent/CN114968535A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10380048B2 (en) | Suspend and resume in a time shared coprocessor | |
US10983833B2 (en) | Virtualized and synchronous access to hardware accelerators | |
US8918795B2 (en) | Handling and reporting of object state transitions on a multiprocess architecture | |
CN106095604A (zh) | 一种多核处理器的核间通信方法及装置 | |
WO2023201987A1 (zh) | 请求处理方法、装置、设备及介质 | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
WO2023179388A1 (zh) | 一种虚拟机实例的热迁移方法 | |
CN115934625B (zh) | 一种用于远程直接内存访问的敲门铃方法、设备及介质 | |
EP4052126A1 (en) | Management of multiple physical function non-volatile memory devices | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
JP2021022379A (ja) | ハードウェアアクセラレータの自律ジョブキューイングシステム | |
WO2024119930A1 (zh) | 调度方法、装置、计算机设备和存储介质 | |
WO2024103927A1 (zh) | 混合部署场景下的作业调度方法、装置及电子设备 | |
CN113535341B (zh) | Linux下CPU核间中断通信的实现方法及装置 | |
WO2024109068A1 (zh) | 程序监控方法、装置、电子设备和存储介质 | |
CN116243983A (zh) | 处理器、集成电路芯片、指令处理方法、电子设备和介质 | |
US9405470B2 (en) | Data processing system and data processing method | |
CN114968535A (zh) | 一种数据传输方法、装置、电子设备及介质 | |
CN116107774A (zh) | Io请求处理方法、装置、电子设备和存储介质 | |
CN114911525A (zh) | 二进制指令翻译执行方法及装置 | |
US9176910B2 (en) | Sending a next request to a resource before a completion interrupt for a previous request | |
CN113778910A (zh) | 一种数据缓存的处理方法及装置 | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
CN116431561B (zh) | 基于异构众核加速卡的数据同步方法、装置、设备及介质 | |
CN116166605B (zh) | 数据混合传输方法、装置、dma控制器、介质及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |