Linux系统下应用访问外部设备的实现方法及装置与流程
本发明涉及信息安全领域,尤其涉及一种linux系统下应用访问外部设备的实现方法及装置。
背景技术:
1、linux系统设备中有内核态服务(包括内核态驱动程序或内核线程,为运行在内核层的程序)和用户态应用程序(即日常使用的所有普通软件)。内核态服务拥有最高权限,可以执行任何操作,用户态应用程序权限受限,不能直接访问硬件或敏感内存。现有技术中,linux系统下的内核态服务一般是通过内核态驱动提供的内核态api来访问外部设备,用户态应用程序通过系统调用和vfs(虚拟文件系统)访问内核态驱动,内核态驱动通过内核态api访问外部设备,即用户态应用程序通过用户态操作接口调用系统接口即文件读写接口(write接口和read接口)分别发送指令和接收数据;若内核态服务和用户态应用程序相继发送指令或不同的用户态应用程序相继发送指令,如前一调用还未读取结果后一调用就下发指令,会出现指令乱序、交叉发送的混乱情况,从而导致外部设备无法正确识别指令,使得操作失败。故亟需提供一种linux系统下应用可安全有序地访问外部设备的技术方案。
技术实现思路
1、本发明的目的是为了克服现有技术的不足,提供一种linux系统下应用访问外部设备的实现方法及装置。
2、第一方面,本发明实施例提供了一种linux系统下应用访问外部设备的实现方法,包括:
3、步骤s1:当动态库中的用户态操作接口被用户态应用程序调用时,所述用户态操作接口根据传入的会话句柄获取对应的文件描述符,将所述用户态操作接口对应的命令用途和传入的命令参数保存到用户态缓存区中,将所述文件描述符、所述用户态缓存区的地址和所述用户态缓存区中的有效数据的长度作为参数调用write接口;
4、步骤s2:当所述write接口被调用时,触发linux系统将所述用户态缓存区的地址和所述用户态缓存区中的有效数据的长度作为参数,通过sys_write接口调用与所述文件描述符对应的内核态驱动相匹配的设备数据写入处理接口;
5、步骤s3:当所述设备数据写入处理接口被调用时,根据传入的所述用户态缓存区的地址将对应的用户态缓存区中的有效数据拷贝到内核态缓存区中,根据所述用户态缓存区中的有效数据的长度从所述内核态缓存区中提取命令用途和命令参数,根据提取的所述命令参数调用所述内核态驱动中的与所述命令用途对应的内核态api;
6、步骤s4:当所述内核态api被调用时,获取内核互斥锁,当获取到所述内核互斥锁时根据传入的所述命令参数组织对应的操作指令并发送给外部设备;
7、步骤s5:当所述内核态api接收到所述外部设备返回的操作结果时,将所述操作结果返回给所述设备数据写入处理接口,释放所述内核互斥锁;
8、步骤s6:当所述设备数据写入处理接口接收到所述操作结果时,将所述操作结果覆盖存储到所述内核态缓存区中,根据所述用户态缓存区的地址将所述内核态缓存区中的操作结果拷贝到对应的用户态缓存区中,通过所述sys_write接口给所述write接口返回成功信息;
9、步骤s7:当所述write接口接收到成功信息时,读取所述用户态缓存区中的操作结果并返回给所述用户态操作接口;
10、步骤s8:所述用户态操作接口接收所述操作结果并通过参数返回给所述用户态应用程序。
11、第二方面,本发明实施例又提供了一种linux系统下应用访问外部设备的实现装置,包括:
12、用户态操作接口模块,用于被用户态应用程序调用时,根据传入的会话句柄获取对应的文件描述符,将对应的命令用途和传入的命令参数保存到用户态缓存区中,将文件描述符、所述用户态缓存区的地址和所述用户态缓存区中的有效数据的长度作为参数调用写入读取接口模块;
13、所述写入读取接口模块,用于被调用时触发linux系统将所述用户态缓存区的地址和所述用户态缓存区中的有效数据的长度作为参数通过sys_write接口调用与所述文件描述符对应的内核态驱动相匹配的设备数据写入处理接口模块;
14、所述设备数据写入处理接口模块,用于被调用时根据传入的所述用户态缓存区的地址将对应的用户态缓存区中的有效数据拷贝到内核态缓存区中,根据所述用户态缓存区中的有效数据的长度从所述内核态缓存区中提取命令用途和命令参数,根据提取的所述命令参数调用所述内核态驱动中的与所述命令用途对应的内核态操作接口模块;
15、所述内核态操作接口模块,用于被调用时获取内核互斥锁,当获取到所述内核互斥锁时根据传入的所述命令参数组织对应的操作指令并发送给外部设备;
16、所述内核态操作接口模块,还用于接收所述外部设备返回的操作结果,将所述操作结果返回给所述设备数据写入处理接口模块,释放所述内核互斥锁;
17、所述设备数据写入处理接口模块,还用于接收操作结果,将所述操作结果覆盖存储到所述内核态缓存区中,根据所述用户态缓存区的地址将所述内核态缓存区中的操作结果拷贝到对应的用户态缓存区中,通过所述sys_write接口给所述写入读取接口模块返回成功信息;
18、所述写入读取接口模块,还用于在接收成功信息时读取所述用户态缓存区中的操作结果,将所述操作结果返回给所述用户态操作接口模块;
19、所述用户态操作接口模块,还用于接收所述操作结果并通过参数返回给所述用户态应用程序。
20、第三方面,本发明实施例又提供一种电子设备,所述电子设备包括至少一个处理器、存储器及存储在所述存储器上并可被所述至少一个处理器执行的指令,所述至少一个处理器执行所述指令以实现上述方法。
21、第四方面,本发明实施例又提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行上述方法。
22、第五方面,本发明实施例又提供一种芯片系统,包括芯片,所述芯片与存储器耦合,用于执行所述存储器中存储的计算机程序,以执行上述方法。
23、本发明与现有技术相比,具有以下优点:
24、本发明技术方案实现了用户态与内核态对外部设备的安全互斥访问,用户态应用程序访问外部设备和内核态服务访问外部设备使用统一的互斥锁,避免了两类访问请求同时发送导致的指令乱序和操作失败的问题,提升了访问外部设备的稳定性;通过write接口实现下发操作指令和接收操作结果的一体化交互,替代现有技术中的write接口下发指令、read接口读取结果的两步操作,简化了用户态应用程序访问外部设备的流程,降低了驱动开发复杂度;且本方案中同一时刻内核态api接口被用户态应用程序或内核态服务调用调用,只有获取到互斥锁的内核态api接口能与外部设备进行通讯,外部设备不会同时接收多条访问请求,且能正确识别指令,避免了指令的交叉混乱,顺利完成用户操作。本发明技术方案能适配linux系统下多种通信方式的安全访问需求,使用简单、方便、安全。
1.一种linux系统下应用访问外部设备的实现方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,还包括:
3.如权利要求1所述的方法,其特征在于,所述步骤s1之前还包括:
4.如权利要求1所述的方法,其特征在于,所述步骤s1包括:
5.如权利要求1所述的方法,其特征在于,所述步骤s2包括:
6.如权利要求1所述的方法,其特征在于,所述步骤s3包括:
7.如权利要求1所述的方法,其特征在于,所述步骤s4包括:
8.一种linux系统下应用访问外部设备的实现装置,其特征在于,包括:
9.一种电子设备,其特征在于,所述电子设备包括至少一个处理器、存储器及存储在所述存储器上并可被所述至少一个处理器执行的指令,所述至少一个处理器执行所述指令以实现权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1至7任一项所述的方法。
11.一种芯片系统,其特征在于,包括芯片,所述芯片与存储器耦合,用于执行所述存储器中存储的计算机程序,以执行权利要求1至7任一项所述的方法。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com