Linux下控制GPIO的方法有N种,详细请参考《RPi GPIO Code Samples》,文中用十多种语言演示了如何控制GPIO,非常全面详尽。因此,这里不再多做赘述,仅把调试过程中整理的脚本贴上并做简单的分析。特别说明,Linux必须有root权限!!!否则会出现/system/bin/sh: can't create /sys/class/gpio/export: Permission denied等错误。

@echo off
echo adb root
adb root >%temp%\_tmp
@findstr "already" %temp%\_tmp
@if NOT errorlevel goto config
timeout /T :config
@echo on
adb shell chmod /sys/class/gpio/export
adb shell chmod /sys/class/gpio/unexport adb shell echo ">" /sys/class/gpio/export
adb shell echo ">" /sys/class/gpio/export adb shell chmod /sys/class/gpio/gpio62/direction
adb shell chmod /sys/class/gpio/gpio63/direction
adb shell chmod /sys/class/gpio/gpio62/value
adb shell chmod /sys/class/gpio/gpio63/value adb shell echo out ">" /sys/class/gpio/gpio62/direction
adb shell echo out ">" /sys/class/gpio/gpio63/direction
adb shell echo ">" /sys/class/gpio/gpio62/value
adb shell echo ">" /sys/class/gpio/gpio63/value @echo off
:top
adb shell echo ">" /sys/class/gpio/gpio62/value
adb shell echo ">" /sys/class/gpio/gpio63/value
rem @timeout /T
for /l %%i in (,,) do echo %%i>nul
rem ping 0.0.0.1 -n -w >nul
adb shell echo ">" /sys/class/gpio/gpio62/value
adb shell echo ">" /sys/class/gpio/gpio63/value
rem @timeout /T
for /l %%i in (,,) do echo %%i>nul
rem ping 0.0.0.1 -n -w >nul
goto top pause.

  该批处理文件运行在PC上,通过adb发送shell命令操作/sys/class/gpio以控制GPIO。

  在MSM8996的开发板上测试,运行结果如下图所示。

  

  从图中可以看出,两个GPIO的控制时间间隔相差约40ms,说明GPIO控制延时较为严重。  

#!/system/bin/sh
chmod /sys/class/gpio/export
chmod /sys/class/gpio/unexport echo > /sys/class/gpio/export
echo > /sys/class/gpio/export chmod /sys/class/gpio/gpio62/direction
chmod /sys/class/gpio/gpio63/direction
chmod /sys/class/gpio/gpio62/value
chmod /sys/class/gpio/gpio63/value echo out > /sys/class/gpio/gpio62/direction
echo out > /sys/class/gpio/gpio63/direction
echo > /sys/class/gpio/gpio62/value
echo > /sys/class/gpio/gpio63/value while :
do
echo > /sys/class/gpio/gpio62/value
echo > /sys/class/gpio/gpio63/value
usleep
echo > /sys/class/gpio/gpio62/value
echo > /sys/class/gpio/gpio63/value
usleep
done

  该脚本运行在MSM8996开发板上,通过操作/sys/class/gpio以控制GPIO,执行结果如下图所示。

  从图中可以看出,两个GPIO的控制时间间隔相差约0.6ms,说明GPIO控制延时较小。

   Android脚本文件可通过如下命令发送到开发板上,并修改其属性。

pushd %~dp0
adb push .\gpio.sh /data/local/
adb shell chmod 777 /data/local/gpio.sh

  参考:

  How to use GPIO signals(Linux应用程序控制GPIO) PNG
       https://developer.ridgerun.com/wiki/index.php/How_to_use_GPIO_signals

树莓派上使用多种语言(C、Python、shell)控制GPIO
       http://elinux.org/RPi_GPIO_Code_Samples

安卓应用程序通过JNI控制GPIO
       http://android.serverbox.ch/?p=972

  Device Tree Usage

  http://elinux.org/Device_Tree_Usage

  BeagleBone Black (BBB) Pin Muxes

  http://www.valvers.com/embedded-linux/beaglebone-black/step04-gpio

  Beaglebone Pin Muxes

  http://www.valvers.com/embedded-linux/beaglebone/step04-gpio1

  Using Device Trees To Configure PRU IO Pins

  http://www.ofitselfso.com/BeagleNotes/UsingDeviceTreesToConfigurePRUIOPins.php

  BeagleBone Black GPIOs

  http://kilobaser.com/blog/2014-07-15-beaglebone-black-gpios

  gpio-header

  https://github.com/nomel/beaglebone/tree/master/gpio-header

  beaglebone-universal-io

  https://github.com/cdsteinkuehler/beaglebone-universal-io

Android(Linux)控制GPIO的方法及实时性分析的更多相关文章

  1. Android(Linux)控制GPIO方法二

    前文<Android(Linux)控制GPIO的方法及实时性分析>主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPIO是否受 ...

  2. Android(Java)控制GPIO的方法及耗时分析

    前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO.实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Android权限.本文重点介绍 ...

  3. Linux操作系统实时性分析

    1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素:  第一是应用.如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux ...

  4. Linux 2.6 内核实时性分析 (完善中...)

      经过一个月的学习,目前对linux 下驱动程序的编写有了入门的认识,现在需要着手实践,编写相关的驱动程序. 因为飞控系统对实时性有一定的要求,所以先打算学习linux 2.6 内核的实时性与任务调 ...

  5. CNC系统实时性分析

    该系统有哪些强实时功能需求?需要对哪些实时事件进行实时响应,对允许的实时延迟的数量级进行估计. 答:数控系统中控制装置与现场设备通信的实时性要求,数控系统要快速而有效的对复杂而庞大的操作任务进行处理. ...

  6. android jni控制gpio (rk3288)

    1.添加驱动程序 2.编写jni c程序编译为库给java调用 3.app调用jni静态链接库操作底层驱动 1.添加驱动程序 修改/work/rk3288/firefly-rk3288_android ...

  7. android linux 休眠 深度睡眠 查看 方法 调试【转】

    本文转载自:https://blog.csdn.net/u011006622/article/details/72900552 在Android移动设备中,有时按下Power键(未接电源,USB)时, ...

  8. RaspberryPi2B使用bcm2835c库控制GPIO

    RaspberryPi2B使用bcm2835c库控制GPIO 网上有很多RaspberryPi控制GPIO的方法,有Python.WiringPi.bcm2835 C library 使用bcm283 ...

  9. 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]

    树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...

随机推荐

  1. EF架构~EF异步改造之路~让DbContextRepository去实现异步接口

    回到目录 返回异步与并行目录 上一讲中,我们定义了三个异步操作接口,这回我们将对它进行实现,而有一个基础知识需要大家清楚,那就是实现接口的方式,一般我们使用默认的方式(隐式实现),这种方法实现的接口方 ...

  2. mysql数据库权限及编码

    CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 在tigase中,发送消息 ...

  3. [工具] Firemonkey Style 调色工具(可另存 Style 文件)

    版本:2016.12.21 (新增可取代颜色) 下载:[工具]OneStylePalette_调色工具_20161221.zip 版本:2016.12.09 (新增可导出全平台的 Style) 下载: ...

  4. python基础之文件处理

    读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  5. nhibernate 中 lazy="no-proxy" 时的问题

    在 nhibernate,如果将实体的一个关联属性配置为 lazy="no-proxy",那么,从其他属性计算出来的属性不能正确更新.例如,将以下代码中 Foo.Bar 配置为 l ...

  6. 有问题得就分享(此实现不是 Windows 平台 FIPS 验证的加密算法的一部分)

    今天呢,我写完了MD5加密算法的代码,可是我正高兴的想运行时,按了F5.突然了个这样的窗体 我当时就纳闷了,怎么回事? 代码又没有错,这是乍回事! 于是呢上网查了看看:可以这样解决的 在window中 ...

  7. [deviceone开发]-利用do_ListView模拟单选功能

    一.简介 这个是利用do_ListView组件实现多个选项里选择一项的功能,示例很简单,但是有助于理解复用机制,也可以直接参考使用.初学者推荐.二.效果图 三.相关下载 https://github. ...

  8. 编写可维护的CSS

    在参与规模庞大.历时漫长且参与人数众多的项目时,所有开发者遵守如下规则极为重要: 保持 CSS 便于维护 保持代码清晰易懂 保持代码的可拓展性 为了实现这一目标,我们要采用诸多方法. 本文档第一部分将 ...

  9. 学习笔记 MYSQL盲注

    猜解当前数据库名 输入 ' # ,显示不存在: 输入 ' # ,显示不存在: 输入 ' # ,显示不存在: 输入 ' # ,显示存在: 采用二分法猜解数据库名 输入 ' ,)) # ,显示存在,说明数 ...

  10. 如何正确响应ArcGIS JavaScript API中图形的鼠标事件

    在使用ArcGIS JavaScript API编写程序的时候,程序员往往需要完成这样一个功能:点击地图上的图形,自动进行专题GIS数据查询,当在地图非图形区域上点击时,自动进行底图兴趣点查询. 由于 ...