板子用的是全志A33开发,其它板子也是通用的,有一点要说一下,比如在写一个驱动之后,在Android上无法打开节点,很可能是因为SELinux权限导致的,所以可以通过关闭SELinux的方式解决问题,网上有很多关闭的文章可以看,这里说一个临时关闭的方法:
在串口终端或者adb终端输入:setenforce 0,即可临时关闭,重启恢复,接下来介绍一下驱动开发:
根据全志的用户手册可以看到,GPIO的基地址是0X01C20800,然后需要驱动哪个口,就在基地址上增加偏移地址即可,本板子用到是PF2口:
如上图,PF口的Configure寄存器的偏移地址是0XB4,这个在驱动开发的时候会用到,下面的驱动程序中可以看到,然后找到PF2口,如下图:
如上图红线框起来的,本例选择输出,
然后,有了configure寄存器的信息之后,还需要上图的data寄存器信息,这个信息全志给的太随便了,需要有一定经验才能猜到,5:0,一看就知道有6个IO口喽,然后0代表0口,以此类推,也就是PF口有6个IO喽,带着疑惑看了老师写的驱动,还真是!然后data寄存器的偏移量是0XC4,嘿嘿,就是基地址+0XC4,也就是0x01C208C4,
那么有了以上资料之后,我们就可以写驱动了,当然这个驱动是老师写的,我拿来给大家分享,首先定义一个头文件:
#ifndef __S5PC100_LED_H
#define __S5PC100_LED_H
#define LED_ON _IO('k', 0)
#define LED_OFF _IO('k', 1)
#endif
定义头文件主要是接下来的驱动中用到了i