调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/**
目标:实现对多个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驱动之三的更多相关文章
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/** ****************************************************************************** * @author 暴走的小 ...
- Holer实现外网访问ARM嵌入式Linux系统
公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...
- 外网访问ARM嵌入式Linux系统
外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...
- Linux下GPIO驱动(一) ----一个简单的LED驱动
/******************************* * *杂项设备驱动:miscdevice *majior=10; * * *****************************/ ...
- Linux下GPIO驱动(三) ----gpio_desc()的分析
上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...
- 很好的linux下GPIO驱动详解文章
原文地址 http://blog.csdn.net/llxmedici/article/details/6282372 打算跟着友善之臂的<mini2440 linux移植开发指南>来做 ...
- 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至 ...
- Linux下GPIO驱动
编写驱动程序,首先要了解是什么类型的设备.linux下的设备分为三类,分别为:字符设备,块设备和网络设备.字符设备类型是根据是否以字符流为数据的交换方式,大部分设备都是字符设备,如键盘,串口等,块设备 ...
随机推荐
- html5 DeviceOrientation来实现手机网站上的摇一摇功能
原文地址:http://www.cootm.com/?p=706 从网上转载看到的,感觉不错,就转过来了,特此感谢 cnblogs 的 幸福2胖纸的码农生活,直接转载了,不要介意!呵呵 以下是转载内容 ...
- linux 和 ubuntu 修改主机名
原始主机名:jeepend-VirtualBox linux 修改方法: 1.使用secure CRT或其他方式 用root用户 登入系统.2.在终端输入: #hostname [修改后的主机名]3. ...
- 利用Python读取Matlab的Mat文件内容
手头有别人写的Matlab程序,其中用到了Mat文件.现在不想安装Matlab,却又想读取Mat文件内容,该怎么办呢? 感谢scipy!!! import scipy.io data = scipy. ...
- python模块之paramiko
46.python模块之paramiko SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- G - A+B for Input-Output Practice (VI)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description You ...
- SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件
在该文章中,我将介绍如何使用TaxonomyWebTaggingControl控件, 首先我相信您已经在SharePoint Managed Metadata Service里定义Term Sets, ...
- GC的前世与今生
GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- crf 分词(待)
http://blog.csdn.net/marising/article/details/5769653
- 使用单调队列优化的 O(nm) 多重背包算法
我搜索了一下,找到了一篇很好的博客,讲的挺详细:链接. 解析 多重背包的最原始的状态转移方程: 令 c[i] = min(num[i], j / v[i]) f[i][j] = max(f[i-1][ ...
- Comparing randomized search and grid search for hyperparameter estimation
Comparing randomized search and grid search for hyperparameter estimation Compare randomized search ...