本申请提供一种Linux用户态下DMA连续物理内存的申请方法,所述方法包括如下步骤:S1、创建字符设备文件节点;所述字符设备文件节点用于作为系统资源访问的媒介;S2、基于所述字符设备文件节点,向系统申请一段连续内存空间,并将该段连续内存空间转换为连续物理内存地址;S3、定义访问步骤S2中连续物理内存地址的接口。本申请在系统为Linux的应用场景下,使用者在用户态下编程,针对系统平台特点,根据内存申请要求,结合内核底层操作库和内存映射技术,设计实现了一种Linux用户态下的DMA连续物理内存申请方法;本发明专利技术解决了Linux用户态下编程时无法直接申请DMA连续物理内存的问题。题。题。
【技术实现步骤摘要】
Linux用户态下DMA连续物理内存的申请方法、装置及存储介质
[0001]本申请涉及DMA连续物理内存申请
,尤其涉及一种Linux用户态下DMA连续物理内存的申请方法、装置及存储介质。
技术介绍
[0002]Linux操作系统是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,用户生态丰富。中国出现的多个国产化操作系统,如中标麒麟(NeoKylin)操作系统、银河麒麟(Kylin)操作系统、优麒麟(UbuntuKylin)操作系统均属于类Linux操作系统。本文应用的系统平台采用Linux操作系统,可实施在中标麒麟、银河麒麟和优麒麟国产化操作系统上。
[0003]编程人员在Linux操作系统上进行程序开发,常使用Qt、PyCharm等编程工具进行C/C++/Python语音程序开发,属于用户态编程。这种编程方式借助编程工具的代码校验功能、调试功能,能十分方便地进行程序的代码编写、编译、调试、运行,对程序员十分友好。但是由于Linux对用户态编程的限制,使得用户态下程序人员无法直接操作系统资源,一个典型问题场景是:访问PCIE外设时,常需要进行DMA相关操作,如DMA连续物理内存申请,这些系统资源的操作均无法进行,限制了用户态编程的程序开发。
[0004]为了解决Linux用户态下编程时无法直接申请DMA连续物理内存的问题,本文基于内核底层操作库和内存映射技术,提出了一种Linux用户态下DMA连续物理内存的申请方法、装置及存储介质。
技术实现思路
[0005]本申请的目的是针对以上问题,提供一种Linux用户态下DMA连续物理内存的申请方法、装置及存储介质。具体技术方案如下:
[0006]第一方面,本申请提供一种Linux用户态下DMA连续物理内存的申请方法,所述方法包括如下步骤:
[0007]S1、创建字符设备文件节点;所述字符设备文件节点用于作为系统资源访问的媒介;
[0008]S2、基于所述字符设备文件节点,向系统申请一段连续内存空间,并将该段连续内存空间转换为连续物理内存地址;
[0009]S3、定义访问步骤S2中连续物理内存地址的接口。
[0010]根据本申请某些实施例提供的技术方案,步骤S1中,创建字符设备文件节点具体包括:
[0011]S11、动态分配主设备号;
[0012]S12、初始化主设备,获得主设备号;
[0013]S13、将主设备号注册为字符设备;
[0014]S14、创建字符设备关联类;
[0015]S15、动态创建字符设备文件节点。
[0016]根据本申请某些实施例提供的技术方案,步骤S2中,基于所述字符设备文件节点,向系统申请一段连续内存空间,并将该段连续内存空间转换为连续物理内存地址,具体包括:
[0017]S21、申请连续物理内存接口;
[0018]S22、向系统申请一段连续内存空间;
[0019]S23、将步骤S22中的一段连续内存空间转换为连续物理内存地址;
[0020]S24、释放所述连续物理内存接口。
[0021]根据本申请某些实施例提供的技术方案,步骤S3中,基于内存映射机制定义访问步骤S2中连续物理内存地址的接口。
[0022]根据本申请某些实施例提供的技术方案,在ioctl接口中实现申请和释放所述连续物理内存接口。
[0023]第二方面,本申请还提供一种Linux用户态下DMA连续物理内存的申请装置,所述申请装置包括:
[0024]存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;
[0025]所述计算机程序被所述处理器执行时实现如上任意一种所述的Linux用户态下DMA连续物理内存的申请方法的步骤。
[0026]第三方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有Linux用户态下DMA连续物理内存的申请程序,所述Linux用户态下DMA连续物理内存的申请程序被处理器执行时实现如上述任意一种所述的Linux用户态下DMA连续物理内存的申请方法的步骤。
[0027]与现有技术相比,本申请的有益效果:本申请提供的DMA连续物理内存的申请方法,首先创建字符设备文件节点作为系统资源访问的媒介,动态分配设备号并动态创建字符设备文件节点,完成在Linux文件系统中创建字符设备,然后在此基础上,实现基于内存页分配的连续物理内存申请和释放方法,完成用户程序调用字符设备的DMA连续物理内存的申请和释放接口;最后实现基于内存映射的字符设备文件节点的内存访问方法,完成设备文件节点的连续物理内存空间到用户程序内存空间的映射;本申请在系统为Linux的应用场景下,使用者在用户态下编程,针对系统平台特点,根据内存申请要求,结合内核底层操作库和内存映射技术,设计实现了一种Linux用户态下的DMA连续物理内存申请方法;本专利技术解决了Linux用户态下编程时无法直接申请DMA连续物理内存的问题。
附图说明
[0028]图1为本申请实施例一提供的Linux用户态下DMA连续物理内存的申请方法的流程图;
[0029]图2为图1中步骤S1的具体流程图;
[0030]图3为图1中步骤S2的具体流程图;
[0031]图4为本申请实施例四提供的服务端的结构示意图。
[0032]图中所述文字标注表示为:
[0033]400、服务端;401、中央处理单元(CPU);402、只读存储器(ROM);403、随机访问存储器(RAM);404、总线;405、输入/输出(I/O)接口;406、输入部分;407、输出部分;408、存储部分;409、通信部分;410、驱动器;411、可拆卸介质。
具体实施方式
[0034]为了使本领域技术人员更好地理解本申请的技术方案,下面结合附图对本申请进行详细描述,本部分的描述仅是示范性和解释性,不应对本申请的保护范围有任何的限制作用。
[0035]应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0036]实施例一
[0037]本实施例提供一种Linux用户态下DMA连续物理内存的申请方法,所述方法的流程图如图1所示,所述方法包括如下步骤:
[0038]S1、创建字符设备文件节点;所述字符设备文件节点用于作为系统资源访问的媒介。
[0039]Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。字符设备文件节点在Linux中是一类系统资源相关的文件节点,本申请将利用字符设备文件节点作为系统资源申请和访问的媒介,实现在用户态下DMA连续物理内存的申请和访问。
[00本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种Linux用户态下DMA连续物理内存的申请方法,其特征在于,所述方法包括如下步骤:S1、创建字符设备文件节点;所述字符设备文件节点用于作为系统资源访问的媒介;S2、基于所述字符设备文件节点,向系统申请一段连续内存空间,并将该段连续内存空间转换为连续物理内存地址;S3、定义访问步骤S2中连续物理内存地址的接口。2.根据权利要求1所述的Linux用户态下DMA连续物理内存的申请方法,其特征在于,步骤S1中,创建字符设备文件节点具体包括:S11、动态分配主设备号;S12、初始化主设备,获得主设备号;S13、将主设备号注册为字符设备;S14、创建字符设备关联类;S15、动态创建字符设备文件节点。3.根据权利要求1所述的Linux用户态下DMA连续物理内存的申请方法,其特征在于,步骤S2中,基于所述字符设备文件节点,向系统申请一段连续内存空间,并将该段连续内存空间转换为连续物理内存地址,具体包括:S21、申请连续物理内存接口;S22、向系统申请一段连续内存空间;S23、将步骤S22中的一段连续内存空...
【专利技术属性】
技术研发人员:牛德森,范润泊,王克文,姚伟,马强,
申请(专利权)人:天津津航计算技术研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。