/**

******************************************************************************
* @author    暴走的小哥哥
* @version   V1.0.0
* @date       2016-02-23
******************************************************************************
* <  Beijing university of posts and telecommunications >
*******************************************************************************
******************************************************************************
* platform exynos4412 iTOP-4412
*******************************************************************************

目标:实现对多个GPIO或者复用GPIO的控制

1工具

1.1硬件工具

1)iTOP4412开发板

2)U盘或者TF卡

3)PC机

4)串口

1.2软件工具

1)虚拟机Vmware

2)Ubuntu12.04.2

3)超级终端(串口助手)

4)源码文件夹“gpios”

操作步骤

2.1简要说明

因为前面关于GPIO的使用都已经介绍的差不多了,现在直接给大家介绍操作过程。

如下图所示,针对32提供的32个GPIO在驱动代码中进行代码注释,简要说明。

2.2menuconfig中去掉其它驱动对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文件,烧写到板子中

2.3Makefile文件的修改

接着将前一个实验的leds.c改为gpios.c。

修改一下Makefile文件,如下图所示。

2.4将GPIO定义为数组统一进行初始化,操作

将这些GPIO打包为一个数组,数组如下图所示,然后定义一下数组长度LED_NUM。

将设备节点的名称修改为hello_gpio,如下图所示。

如下图所示,先在probe函数中初始化。

如下图所示,然后是ioctl函数中写一个简单的switch语句,提供给上层调用测试。

如下图所示,最后是在remove函数中添加gpio_free释放GPIO。

2.5编写简单应用进行操作

简单的修改一下前面的应用程序。

3 编译测试

在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驱动之二

调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三的更多相关文章

  1. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二

    /** ****************************************************************************** * @author    暴走的小 ...

  2. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一

    /** ****************************************************************************** * @author    暴走的小 ...

  3. Holer实现外网访问ARM嵌入式Linux系统

    公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...

  4. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  5. Linux下GPIO驱动(一) ----一个简单的LED驱动

    /******************************* * *杂项设备驱动:miscdevice *majior=10; * * *****************************/ ...

  6. Linux下GPIO驱动(三) ----gpio_desc()的分析

    上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...

  7. 很好的linux下GPIO驱动详解文章

    原文地址  http://blog.csdn.net/llxmedici/article/details/6282372 打算跟着友善之臂的<mini2440 linux移植开发指南>来做 ...

  8. 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】

    转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至 ...

  9. Linux下GPIO驱动

    编写驱动程序,首先要了解是什么类型的设备.linux下的设备分为三类,分别为:字符设备,块设备和网络设备.字符设备类型是根据是否以字符流为数据的交换方式,大部分设备都是字符设备,如键盘,串口等,块设备 ...

随机推荐

  1. mysql数据类型——字符串char(m)和varchar(m)

    char(m) 定长字符串类型  非 Unicode 字符 varchar(m) 变长字符串类型  非 Unicode 数据 说明:M为最大可存储字节数 汉子占两个字节,通过指定m,来限制存储的最大字 ...

  2. winform窗体——布局方式

    一.默认布局 ★可以加panel,也可以不加: ★通过鼠标拖动控件的方式,根据自己的想法布局.拖动控件的过程中,会有对齐的线,方便操作: ★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整 ...

  3. libcurl的封装,支持同步异步请求,支持多线程下载,支持https

    最近在做一个项目,需要用到http get post等 需求分析需要做到同步和异步,异步请求的返回以可选的回调通知的方式进行. 本人以Linux为例,一步一步的来实现. 配置并且编译libcurl我以 ...

  4. PHP调试工具Xdebug安装配置教程

    说道PHP代码调试,对于有经验的PHPer,通过echo.print_r.var_dump函数,或PHP开发工具zend studio.editplus可解决大部分问题,但是对于PHP入门学习的童鞋来 ...

  5. 理解Javascript 的闭包(closure)

    要理解闭包的概念先从变量的作用域说去 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之 ...

  6. 搭建一个 简易的php版 todolist

    我记得以前使用 wunderlist 但是国外..后来用了半年. 挺方便的.但是.后来慢慢忘了这工具存在 缺少了todolist.效率折半.. so.我搭建了个简单的todolist.  :mytin ...

  7. ArrayList的toArray

    ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: 1.list.toArray(); 2.list.toArray(T[]  a); ...

  8. .net ref关键字在引用类型上的使用

    只接上干货. namespace ConsoleApplication1 { class Person { public string UserName { get; set; } } class P ...

  9. 【转】Java 枚举7常见种用法

    原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu  原创地址:http://blog.li ...

  10. 数据结构(块状链表):COGS 1689. [HNOI2010]Bounce 弹飞绵羊

    时间限制:1 s   内存限制:259 MB [题目描述] 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地 ...