技术领域
本发明涉及设备通信技术领域,特别涉及一种Linux下抽象硬件IO符号操作的方法与终端。
背景技术
现有技术中,在操作GPIO引脚时,都是在/sys/class/gpio/目录下对对应IO编号的IO引脚进行操作。每次操作时,都要在业务层根据IO编号操作导出,然后才能对其进行操作,例如:
导出
echo 44>/sys/class/gpio/export
设置方向
echo out>/sys/class/gpio/gpio44/direction
设置值
echo 1>/sys/class/gpio/gpio44/value
其中,数字44为硬件IO引脚的对应IO编号。且在更换不同CPU后,由于各个模块对应IO引脚的IO编号可能发生变化,导致业务层进行逻辑控制时要对应去修改代码中的GPIO,且由于IO引脚的IO编号不同,需要对应重复进行导出的操作,可移植性差,无法很好的兼容不同CPU平台。
发明内容
本发明所要解决的技术问题是:提供一种Linux下抽象硬件IO符号操作的方法与终端,能够更好地兼容不同的CPU平台。
为了解决上述技术问题,本发明采用的技术方案为:
一种Linux下抽象硬件IO符号操作的方法,包括步骤:
S1、根据用户输入的符号名称,在设备树中对CPU的每一个IO引脚进行对应命名;
S2、启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,并在预设目录下生成文件名称为所述符号名称且与所述IO引脚映射关联的字符文件;
S3、接收GPIO操作请求,根据所述GPIO操作请求向对应的所述字符文件写入操作数据;
S4、所述驱动程序监测到所述字符文件的数据写入,获取所述操作数据并向与所述字符文件映射关联的所述IO引脚写入所述操作数据。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种Linux下抽象硬件IO符号操作的终端,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、根据用户输入的符号名称,在设备树中对CPU的每一个IO引脚进行对应命名;
S2、启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,并在预设目录下生成文件名称为所述符号名称且与所述IO引脚映射关联的字符文件;
S3、接收GPIO操作请求,根据所述GPIO操作请求向对应的所述字符文件写入操作数据;
S4、所述驱动程序监测到所述字符文件的数据写入,获取所述操作数据并向与所述字符文件映射关联的所述IO引脚写入所述操作数据。
本发明的有益效果在于:本发明通过对IO引脚进行符号名称命名,即进行了符号抽象,直接从底层驱动层进行屏蔽,不论如何更换CPU平台,只要修改下DTS中IO引脚的名称,不再需要修改到驱动代码,且通过字符文件进行操作,不需要对GPIO进行重复进行导出的操作,具有更好的可移植性,能够更好地兼容不同CPU平台。
附图说明
图1为本发明实施例的一种Linux下抽象硬件IO符号操作的方法的流程图;
图2为本发明实施例的一种Linux下抽象硬件IO符号操作的终端的结构图;
标号说明:
1、一种Linux下抽象硬件IO符号操作的终端;2、处理器;3、存储器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1,一种Linux下抽象硬件IO符号操作的方法,包括步骤:
S1、根据用户输入的符号名称,在设备树中对CPU的每一个IO引脚进行对应命名;
S2、启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,并在预设目录下生成文件名称为所述符号名称且与所述IO引脚映射关联的字符文件;
S3、接收GPIO操作请求,根据所述GPIO操作请求向对应的所述字符文件写入操作数据;
S4、所述驱动程序监测到所述字符文件的数据写入,获取所述操作数据并向与所述字符文件映射关联的所述IO引脚写入所述操作数据。
从上述描述可知,本发明的有益效果在于:本发明通过对IO引脚进行符号名称命名,即进行了符号抽象,直接从底层驱动层进行屏蔽,不论如何更换CPU平台,只要修改下DTS中IO引脚的名称,不再需要修改到驱动代码,且通过字符文件进行操作,不需要对GPIO进行重复进行导出的操作,具有更好的可移植性,能够更好地兼容不同CPU平台。
进一步地,所述步骤S2具体为:
启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,生成索引文件,并在预设目录下生成名称与所述IO引脚的符号名称相同的字符文件,通过所述索引文件对所述字符文件和所述IO引脚进行映射关联。
由上述描述可知,通过字符文件的名称与IO引脚的符号名称相同,并建立索引文件,从而将字符文件与IO引脚进行映射关联,使后续在需要对IO引脚进行操作时,不需要在进行导出,仅直接对字符文件进行操作数据写入即可,驱动监测到对字符文件进行操作数据写入后,即向对应的IO引脚进行相应操作。
进一步地,所述步骤S4具体为:
所述驱动程序在监测到所述字符文件的数据写入后触发处理函数,由所述处理函数获取所述操作数据,并根据所述字符文件的符号名称在所述索引表中进行查找,得到对应的所述IO引脚,而后向所述IO引脚写入操作数据。
由上述描述可知,处理函数在获取到操作数据后,根据字符文件的符号名称在索引表中进行查找,通过所述索引表找到对应的IO引脚,从而进行操作数据的写入。
进一步地,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称具体为:
所述驱动程序调用所述设备树的OF函数接口获取所述设备树中已命名的各个是IO引脚的符号名称。
由上述描述可知,驱动程序通过Linux系统中设备树的OF函数接口来解析得到与IO引脚对应的字符名称。
进一步地,所述符号名称的格式为模块外设的名称加上引脚功能名称。
由上述描述可知,所有符号名称均以模块外设的名称加上引脚功能名称命名,能够直观地反映各个字符文件对应操作的模块外设和功能,更易于使用。
请参照图2,一种Linux下抽象硬件IO符号操作的终端,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、根据用户输入的符号名称,在设备树中对CPU的每一个IO引脚进行对应命名;
S2、启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,并在预设目录下生成文件名称为所述符号名称且与所述IO引脚映射关联的字符文件;
S3、接收GPIO操作请求,根据所述GPIO操作请求向对应的所述字符文件写入操作数据;
S4、所述驱动程序监测到所述字符文件的数据写入,获取所述操作数据并向与所述字符文件映射关联的所述IO引脚写入所述操作数据。
从上述描述可知,本发明的有益效果在于:本发明通过对IO引脚进行符号名称命名,即进行了符号抽象,直接从底层驱动层进行屏蔽,不论如何更换CPU平台,只要修改下DTS中IO引脚的名称,不再需要修改到驱动代码,且通过字符文件进行操作,不需要对GPIO进行重复进行导出的操作,具有更好的可移植性,能够更好地兼容不同CPU平台。
进一步地,所述步骤S2具体为:
启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,生成索引文件,并在预设目录下生成名称与所述IO引脚的符号名称相同的字符文件,通过所述索引文件对所述字符文件和所述IO引脚进行映射关联。
由上述描述可知,通过字符文件的名称与IO引脚的符号名称相同,并建立索引文件,从而将字符文件与IO引脚进行映射关联,使后续在需要对IO引脚进行操作时,不需要在进行导出,仅直接对字符文件进行操作数据写入即可,驱动监测到对字符文件进行操作数据写入后,即向对应的IO引脚进行相应操作。
进一步地,所述步骤S4具体为:
所述驱动程序在监测到所述字符文件的数据写入后触发处理函数,由所述处理函数获取所述操作数据,并根据所述字符文件的符号名称在所述索引表中进行查找,得到对应的所述IO引脚,而后向所述IO引脚写入操作数据。
由上述描述可知,处理函数在获取到操作数据后,根据字符文件的符号名称在索引表中进行查找,通过所述索引表找到对应的IO引脚,从而进行操作数据的写入。
进一步地,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称具体为:
所述驱动程序调用所述设备树的OF函数接口获取所述设备树中已命名的各个是IO引脚的符号名称。
由上述描述可知,驱动程序通过Linux系统中设备树的OF函数接口来解析得到与IO引脚对应的字符名称。
进一步地,所述符号名称的格式为模块外设的名称加上引脚功能名称。
由上述描述可知,所有符号名称均以模块外设的名称加上引脚功能名称命名,能够直观地反映各个字符文件对应操作的模块外设和功能,更易于使用。
请参照图1,本发明的实施例一为:
一种Linux下抽象硬件IO符号操作的方法,包括步骤:
S1、根据用户输入的符号名称,在设备树中对CPU的每一个IO引脚进行对应命名;
所述符号名称的格式为模块外设的名称加上引脚功能名称。
本实施例中,我们将硬件所有需控制的IO引脚以对应模块的符号名称命名,此符号名称由人工根据所属行业的了解,根据设备的接口外设及功能进行配置,统一命名位于/sys/class/ioCenter/目录下,命名规则为模块外设的名称+引脚功能的名称,例如/sys/class/ioCenter/4g_power。在设备树中体现为:
符号名称=实际功能的IO引脚,例如:
uart_led=<&gpio0 PK_PC4 GPIO_ACTIVE_HIGH>;
不论如何更换何种CPU平台,仅需对DTS(Device Tree Source,设备树)中的IO引脚及符号名称进行对应的调整修改即可,无需修改驱动代码。
S2、启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,并在预设目录下生成文件名称为所述符号名称且与所述IO引脚映射关联的字符文件;
所述步骤S2具体为:
启动驱动程序,所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称,生成索引文件,并在预设目录下生成名称与所述IO引脚的符号名称相同的字符文件,通过所述索引文件对所述字符文件和所述IO引脚进行映射关联;
所述驱动程序读取所述设备树中已命名的各个所述IO引脚的符号名称具体为:
所述驱动程序调用所述设备树的OF函数接口获取所述设备树中已命名的各个是IO引脚的符号名称。
本实施例中,系统启动后,驱动程序加载运行,使用Linux中设备树的OF函数接口解析DTS设备树中已配置的GPIO(General-purpose input/output,通用输入/输出口)匹配字符名称(即IO引脚的字符名称),并根据此字符名称创建同名的可读写操作的字符文件,如:/sys/class/ioCenter/uart_led、/sys/class/ioCenter/touch_led。同时驱动程序创建索引表,示例如下:
字符文件与实际功能的IO引脚进行映射关联。
S3、接收GPIO操作请求,根据所述GPIO操作请求向对应的所述字符文件写入操作数据。
本实施例中,在需要进行GPIO的操作时,向字符文件进行操作数据的写入,本实施例中以往/sys/class/ioCenter/uart_led文件写入数值1为例。
S4、所述驱动程序监测到所述字符文件的数据写入,获取所述操作数据并向与所述字符文件映射关联的所述IO引脚写入所述操作数据;
所述步骤S4具体为:
所述驱动程序在监测到所述字符文件的数据写入后触发处理函数,由所述处理函数获取所述操作数据,并根据所述字符文件的符号名称在所述索引表中进行查找,得到对应的所述IO引脚,而后向所述IO引脚写入操作数据。
本实施例中,在往/sys/class/ioCenter/uart_led文件写入数值1后,在驱动程序中会对应触发处理函数,处理函数获取到字符文件的符号名称和写入的操作数据,根据符号名称和索引表得到对应实际功能的IO引脚,并将所述操作数据向所述IO引脚进行写入。
请参照图2,本发明的实施例二为:
一种Linux下抽象硬件IO符号操作的终端1,包括处理器2、存储器3以及存储在所述存储器3中并可在所述处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现以上实施例一中的步骤。
综上所述,本发明提供的一种Linux下抽象硬件IO符号操作的方法与终端,通过对IO引脚进行符号名称命名,即进行了符号抽象,直接从底层驱动层进行屏蔽,不论如何更换CPU平台,只要修改下DTS中IO引脚的名称,不再需要修改到驱动代码,在驱动中通过索引表对字符文件和实际功能的IO引脚进行映射,直接通过字符文件进行GPIO操作,不需要再对GPIO进行重复进行导出的操作,具有更好的可移植性,能够更好地兼容不同CPU平台。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
机译: WIBRO终端无关的操作系统和硬件,包括WIBRO网络和主机之间使用相同的方法和通讯方法的系统,尤其是用于立即使用而无需开发附加驱动程序或应用程序的情况,即使在操作系统和软件都需要维护的情况下
机译: 使用Windows操作系统(WINDOWS登录)的计算机上的用户登录,对软件和数字文件等的终端或长期访问。在不使用任何其他硬件的情况下进行交易,在不进行任何在线连接和完全离线的情况下,使用该应用程序访问一次使用密码。和方法
机译: 一种用于在具有不同符号的第一和随后的第二输入采样值的情况下以数字方式类似于电路装置的壁位置的射频的数字操作方法以及以某种方式使电路装置的数字位置的方法类似于-wall