主题 : 通用GPIO驱动和apk(含jni),支持所有GPIO,支持LED控制,支持友善6410/210开发板,支持安卓2.3/4.0,内核2.6/3.0 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
楼主  发表于: 2012-12-19 09:54

 通用GPIO驱动和apk(含jni),支持所有GPIO,支持LED控制,支持友善6410/210开发板,支持安卓2.3/4.0,内核2.6/3.0

管理提醒: 本帖被 xoom 执行置顶操作(2012-12-19)
GPIO Driver and apk(include jni) support All GPIO Port,Support Android2.3/kernel2.6 & android4.0/kernel3.0.8 for Tiny/mini6410 and Tiny/mini210

通用GPIO驱动和应用程序(包含jni),支持所有GPIO端口,支持LED控制,支持友善6410和210系列开发板,支持安卓2.3/内核2.6、安卓4.0/内核3.08

1、介绍
一时兴起编写的小程序,配合bjwGPIOdriver,可以实现几个小功能,详细请看介绍。
界面没怎么花心思,做得比较丑-_-;但android 2.3和4.0通用;

1.1、主界面
主界面6个按钮,其中5个可以再进入具体的功能界面,最后一个按钮是退出;
Pin Control用于单独端口的控制,可以配置的项目是最全的;
LED Control专门用来展示LED控制,只是控制端口的高低电平而已,然后通过线程控制变一些花样;
GPIO List可以列出所有端口的信息,也可以把这些信息导出到存储卡;
Oscilloscope是端口高低电平示波器,因为读取是轮询的,所以只作为娱乐功能;
Performance Test测试读取4个GPIO端口需要多少时间,作为轮询时间的参考;



1.2、单独GPIO端口控制
注意:如果您不清楚此功能的作用,请不要乱改GPIO引脚的配置,若因任何操作导致开发板损坏,本人概不负责!!!
第一行用来设置或读取具体端口的高低电平,引脚号默认值为用户LED1,6410板为GPK(4),210板为GPJ2(0);
接下来3行是配置或读取IO的cfgpin,端口号仍然取第一行“GPIO引脚”,具体请查CPU手册,0~15对应二进制0000~1111;
然后是上拉状态的配置或读取,端口号仍然取第一行“GPIO引脚”;
最后是串口调试信息的控制,可以打开或关闭,还可获取当前的状态,注意这里说的是内核的调试信息,不是adb的调试信息。



6410CPU手册,一般只用到0~7,即0000~0111



210CPU手册,比较多0~15都可能用到,即0000~1111




1.3、LED控制
Read Leds可以刷新4个用户LED的状态;
也可以通过开关按钮单独控制;
最后几个选项是通过线程实现4个LED灯的循环亮灭控制;
注意:虽然GPIO引脚号可以改,但如果您不清楚,请勿乱改;若因任何操作导致开发板损坏,本人概不负责!!!




1.4、所有GPIO端口信息列表
如果端口为高电平(1),那么此行为蓝色;
如果端口为低电平(0),那么此行为绿色;
如果端口读取错误(-1),那么此行为红色。
需要说明的是,6410开发板支持所有端口的读取,而210开发板2.6内核支持全端口的读取,但3.0内核只支持到MP03,MP03之后的端口读取时内核会崩溃,所以210板子就统一只读取到MP03为止。



可以把取得的信息以CSV格式导出到存储卡



导出后可以用记事本或excel打开,如下图所示的样子,包含4列:端口名称,电平值(高:1,低:0,错误:-1),cfgpin配置,上拉配置



1.5、IO口电平示波器
这个只是娱乐功能,做得不怎么完善
4个开关按钮控制4个端口的高低电平,默认是控制4个用户LED,6410开发板为GPK(4~7),210开发板为GPJ2(0~3),采用最简单的打点法,一次读取4个IO电平,高电平就把点画在中心线上方,低电平就把点画在中心线下方。
暂停的时候,竖线会断掉……,但运行的时候不会。而且在210上比较流畅,在6410上会闪烁,surfaceview还是掌握不到家啊-_-



按menu键可以设置要查看的GPIO口,比如210板子用于LCD控制的GPF0(4~7)



LCD的4个GPIO端口电平变化如下图



1.6、Performance Test
运行一次耗时比较久,请耐心等待,6410板子可能要花好几分钟。
210板子的结果大概是0.274ms/4port。



2、安装说明
2.1、内核补丁
之所以需要打补丁,是因为本人写的GPIO驱动需要调用某些内核函数,而友善提供的内核正好这些函数不全,如果不打补丁的话,可能编译过不了或者使用时会导致内核崩溃。
只要这些内核函数是完整的,那么GPIO驱动一定可以支持此内核,不管是什么版本的内核。所以如果你的内核这些函数是完整的,那就不需要这些补丁,那么请跳过此小节。
不同的内核,需要的补丁不同,请不要用错。
另外还要注意内核的版本以及友善提供的支持光盘的日期,因为不知道友善后续会不会补全这些函数,所以下面的说明,是本人所用内核的光盘日期,当然更早以前日期的内核文件,肯定是需要打补丁的。
2.1.1、提供如下3个版本的Patch:
①、6410系列开发板:我使用的是Tiny6410,内核2.6.36,光盘日期2012-08-28,Patch文件名:s3c6410gpio.patch
②、210系列开发板(android2.3):我使用的是Mini210s,内核2.6.35,光盘日期2012-11-16,Patch文件名:s5pv210_2.6gpio.patch
③、210系列开发板(android4.0):我使用的是Mini210s,内核3.0.8,光盘日期2012-11-16,Patch文件名:s5pv210_3.0gpio.patch

2.1.2、另外也提供已经patch好的文件,自己可以根据这些文件判断需不需要打patch
同样对应不同版本的内核,3种内核3个文件夹;如果不想打补丁,也可以直接把文件夹里的内容覆盖到内核文件夹根目录替换同名文件。

2.2、GPIO驱动
驱动本身没啥好说的,采用platform driver写法,属于练手之作,简单易懂吧。
2.2.1、驱动文件名bjwgpio.c,放到内核的drivers/gpio文件夹,所有内核都使用这个驱动文件。
2.2.2、然后修改drivers/gpio文件夹里的Kconfig,在endif前增加(如果你patch或覆盖了如上补丁,那么此步就自动做好了,请跳过)。
config GPIO_BJW
         tristate"GPIO support for Tiny6410/Mini6410/Tiny210/Mini210"
         dependson CPU_S5PV210 || CPU_S3C6410
         defaulty
         help
           This option enables support for All GPIOread/write/cfg/pull on Tiny6410/Mini6410/Tiny210/Mini210.
2.2.3、最后修改drivers/gpio文件夹里的Makefile,在最后增加一行(如果你patch或覆盖了如上补丁,那么此步就自动做好了,请跳过)
obj-$(CONFIG_GPIO_BJW)      += bjwgpio.o

2.3、重新编译内核
先make menuconfig
然后确认如下选项是否已经选中
Device Drivers  --->
-*- GPIO Support  --->
<*>  GPIO support for Tiny6410/Mini6410/Tiny210/Mini210
最后保存,并编译。

2.4、修改设备打开读写权限
不修改设备打开权限的话,应用程序操作时会出错无法打开设备。
驱动设备只有一个,为/dev/bjw-gpio。
需要改rootfs里的init.rc,在“on init”节里找到友善自己修改权限的地方,并加上我们的语句,如下:
#{{ added by FriendlyARM
chmod 0666 /dev/bjw-gpio
然后重新制作ROM,连同上面编译好的内核,重新烧写。

2.5、JNI
Jni的源代码和apk的源代码一起,在jni文件夹里。
如果需要重新编译jni,请自行下载ndk。
本人使用的是android-ndk-r8b-windows编译的。

2.6、简便测试方法
不想用apk软件测试的话,可以在adb shell中使用如下命令控制,可能会有出错提示但不影响。
6410点灯:
LED1:echo GPK 4 0 > /dev/bjw-gpio
LED2:echo GPK 5 0 > /dev/bjw-gpio
LED3:echo GPK 6 0 > /dev/bjw-gpio
LED4:echo GPK 7 0 > /dev/bjw-gpio

6410灭灯:
LED1:echo GPK 4 1 > /dev/bjw-gpio
LED2:echo GPK 5 1 > /dev/bjw-gpio
LED3:echo GPK 6 1 > /dev/bjw-gpio
LED4:echo GPK 7 1 > /dev/bjw-gpio

210点灯:
LED1:echo GPJ2 0 0 > /dev/bjw-gpio
LED2:echo GPJ2 1 0 > /dev/bjw-gpio
LED3:echo GPJ2 2 0 > /dev/bjw-gpio
LED4:echo GPJ2 3 0 > /dev/bjw-gpio

210灭灯:
LED1:echo GPJ2 0 1 > /dev/bjw-gpio
LED2:echo GPJ2 1 1 > /dev/bjw-gpio
LED3:echo GPJ2 2 1 > /dev/bjw-gpio
LED4:echo GPJ2 3 1 > /dev/bjw-gpio


3、下载地址
3.1、Patch下载地址
本部分内容设定了隐藏,需要回复后才能看到


3.2、GPIO驱动下载地址
本部分内容设定了隐藏,需要回复后才能看到


3.3、apk和jni源代码下载地址
本部分内容设定了隐藏,需要回复后才能看到


3.4、apk下载
bjwGPIOapk.rar (175 K) 下载次数:682






级别: 新手上路
UID: 84768
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2012-12-26
最后登录: 2012-12-27
1楼  发表于: 2012-12-27 09:17

 Re:通用GPIO驱动和apk(含jni)

是驱动新手,下载下来好好学习,以求Day day up.
级别: 新手上路
UID: 84768
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2012-12-26
最后登录: 2012-12-27
2楼  发表于: 2012-12-27 09:21

 Re:通用GPIO驱动和apk(含jni),

回复了,希望能看到下载地址啊