Android APP控制GPIO(操作节点方式)
注意:核心是APP层通过脚本操作节点方式控制 GPIO
资料下载:https://download.csdn.net/download/qq_33544860/81172366
概要
通过该文章可以收获:
1.Android selinux知识
2.APP非root环境下调用脚本
3.通过节点控制gpio
4.把脚本/命令编译内置到系统
5.调用系统属性运行脚本
6.Android init.rc知识
7.等等
该模式不需要再写繁琐的代码接口。(局限性:只能控制单一的gpio口)
流程如下:
文章目录
具体实现方式
接下来会对每个步骤进行详细的介绍,以及拓展相关知识点。
实现流程从gpio到app进行讲解。
⚠️注意:由于该文章会涉及其他的内容,如需快速集成只需关注 > 功能步骤1-6
环境
-
硬件环境:
把相关的外设连接到对应的gpio口 -
软件环境:
Android源码(基本在源码基础上进行修改)(Autochip平台)
ADB调试工具(测试)
AndroidStudio(编写APP层代码)
GPIO
GPIO的英文全称为General-Purpose IO ports,即通用IO接口。
GPIO的概念自行查阅相关资料。
可参考:https://blog.csdn.net/weixin_31849265/article/details/112213882
在这里需要通过GPIO功能配置引脚映射表获取需要GPIO口对应的PIN脚。(一般硬件工程师会提供原理图,或者告知具体GPIO口)
⚠️一个 PIN 脚同一时间只能被配成其中一种功能
⚠️每个 GPIO 功能同一时间只能被配置到一个 PIN 脚上
软件上:Kernel 中的实现是基于 Pinctrl 及 Gpiolib 架构。内核模块在 Kernel 中使用
GPIO 功能,需要通过 Pinctrl 及 Gpiolib 的 API 。
确定GPIO口对应的PIN脚
例如:该原理图中显示CPU风扇控制的GPIO口
[9] CPU_FAN >>------------<<GPIO_0_17 [2,12]
通过映射表的这GPIO_0_17对应的PIN为80
节点操作指令
查看或配置 GPIO 状态的调试节点位置
(平台不一样,位置可能不一样,可在/sys/目录下查找)
/sys/devices/platform/soc/11090000.pinctrl/gpio_debug
通过USB线连接设备和电脑,在电脑中打开终端,通过adb shell指令进入Android设备。
adb root
adb remount
adb shell
在shell中查看单前所有GPIO配置信息
⚠️显示-1值表示不支持。
cat /sys/devices/platform/soc/11090000.pinctrl/gpio_debug
结果如下
gpio base: 0x0, pins: 171
PIN: (MODE)(DIR)(DIN)(DRV)(SMT)(PULLEN)(PULLSEL)
000: 0-1-10010
001: 0-1-10010
002: 0-1-10010
003: 0-1-10010
内容解析如下
MODE:引脚模式
DIR:引脚方向(0:输入 /1: 输出)
DIN:引脚电平值(只读)
DRV:引脚驱动能力(0~3)
SMT:施密特触发器使能
PULLEN:上拉使能
PULLSEL:上拉选择(0:下拉 / 1:上拉)
配置GPIO引脚状态
⚠️格式: echo 属性 引脚编号 值 > gpio_debug
echo mode 80 1 > gpio_debug // 配置模式
echo dir 80 0 > gpio_debug // 配置方向为输入
echo dir 80 1 > gpio_debug // 配置方向为输出
echo out 80 1 > gpio_debug // 配置输出为高电平
echo out 80 0 > gpio_debug // 配置输出为低电平
echo pullen 80 1 > gpio_debug //配置上拉使能
echo pullsel 80 1 > gpio_debug //配置上拉
echo pullsel 80 0 > gpio_debug //配置下拉
echo drv 80 3 > gpio_debug /