GPIO使用指南
操作GPIO
Linux环境中操作GPIO为文件读写方式,即open并read/write相应的文件节点即可。参考资料:《Linux操作GPIO(文件IO方式)》
Android APP控制GPIO
与Linux下操作GPIO的区别:
1. Android下读写GPIO节点需将APP打包为系统应用,或在已Root的系统上临时获取Root权限;
2. 通过File对象读写相应的文件节点,或调用JNI代码实现读写相应的文件节点;
3. 需要SELinux权限设置(修改system_app.te等相关文件,若打包为系统应用后仍报EACCES错误可尝试此步骤);
参考资料:《Android系统APK操作GPIO读写及添加权限》
sunxi GPIO驱动
对于A33/A40i平台,原厂并实现标准的GPIO子系统界面,所以须按下列步骤进行操作:
1. 在FEX文件中添加要生成的GPIO节点:
[gpio_para]
gpio_used = 6
gpio_pin_1 = port:PL02<0><default><default><default>
gpio_pin_2 = port:PL03<0><default><default><default>
gpio_pin_3 = port:PL06<0><default><default><default>
gpio_pin_4 = port:PL07<1><default><default><0>
gpio_pin_5 = port:PL09<1><default><default><0>
gpio_pin_6 = port:PL10<1><default><default><0>
gpio_used为要导出的GPIO数量,若不使用GPIO则写0;后面按顺序填写gpio_pin_x的引脚定义,后面的<>定义分别是复用功能/上下拉/驱动能力/默认状态,具体可参考FEX文件头部的注释。
2. 内核中开启CONFIG_GPIO_SUNXI=m,编译生成gpio_sunxi.ko驱动模块;
3. 在init.rc(Android)或rcS(Linux)中insmod加载gpio_sunxi.ko驱动模块;
4. 驱动加载后会在/sys/class/gpio_sw下生成对应的引脚目录,在下级目录中的data节点为GPIO状态,例如/sys/class/gpio_sw/PL02/data,使用read/write方法读取(输入状态)或写值(输出状态)即可。