/**linux
1)iTOP4412开发板ios
2)U盘或者TF卡数组
3)PC机ide
4)串口函数
1)虚拟机Vmware工具
2)Ubuntu12.04.2post
3)超级终端(串口助手)测试
4)源码文件夹“gpios”3d
操做步骤调试
由于前面关于GPIO的使用都已经介绍的差很少了,如今直接给你们介绍操做过程。
以下图所示,针对32提供的32个GPIO在驱动代码中进行代码注释,简要说明。
先须要去掉调用了这些GPIO的相关驱动。
1)去掉摄像头驱动VIDEO_OV5640
Device Drivers --->
Multimedia support(MEDIA_SUPPORT [=y]) --->
Video capture adapters(VIDEO_CAPTURE_DRIVERS [=y])(去掉) --->
2)去掉WIFI驱动MTK_COMBO_CHIP_MT662
Device Drivers --->
MediaTek Connectivity Combo Chip Config --->
MediaTek Connectivity Combo Chip Support (MTK_COMBO [=y])(去掉) --->
Select Chip (<choice> [=y]) --->
3)去掉leds的驱动
Device Drivers --->
Character devices --->
Enable LEDS config --->
4)去掉Buzzer的驱动
Device Drivers --->
Character devices --->
Enable BUZZER config --->
修改完以后从新编译内核,将新生成的内核二进制文件zImage烧写到开发板。
由于我这里使用的是以模块的形式编译驱动程序,因此能够在这里直接编译内核zImage文件,烧写到板子中
接着将前一个实验的leds.c改成gpios.c。
修改一下Makefile文件,以下图所示。
将这些GPIO打包为一个数组,数组以下图所示,而后定义一下数组长度LED_NUM。
将设备节点的名称修改成hello_gpio,以下图所示。
以下图所示,先在probe函数中初始化。
以下图所示,而后是ioctl函数中写一个简单的switch语句,提供给上层调用测试。
以下图所示,最后是在remove函数中添加gpio_free释放GPIO。
简单的修改一下前面的应用程序。
在Ubuntu系统下新建gpios文件夹,将写好的gpios、编译脚本以及应用拷贝到gpios文件夹下,以下图所示。
使用Makefile命令编译驱动,而后使用
“arm-none-linux-gnueabi-gcc -o invoke_gpios invoke_gpios.c -static”命令编译应用,以下图所示。
将上图中的文件invoke_gpios和gpios.ko拷贝到U盘。
启动开发板,将U盘插入开发板,使用命令“mount /dev/sda1 /mnt/udisk/”加载U盘符。
使用命令“insmod /mnt/udisk/gpios.ko”加载驱动gpios.ko,
使用命令“./mnt/udisk/invoke_gpios 0”或者“./mnt/udisk/invoke_gpios 1”运行小应用invoke_gpios,以下图所示。
如上图所示,使用命令“./mnt/udisk/invoke_gpios 0”以后灯会灭,而后其它的GPIO也会都成为低电平。
使用命令“./mnt/udisk/invoke_gpios 0”以后灯会亮,而后其它的GPIO也会都成为高电平。
也能够检查一下运行应用以后有没有错误,若是有错误,多半是由于没有将调用对应GPIO的驱动去除,致使GPIO被占用了。
本人文字水平有限,因此就一步一步的写和截图,但愿这种形式对你们有所帮助!
若是有觉得能够先参考本人博客另外的文章:
调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二