zoukankan      html  css  js  c++  java
  • 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三

     /**

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

    当一个人一心前行,整个世界为之让路! 我要从小白,一年时间之内掌握ARM,多核技术,linux应用,驱动,了解linux内核,会写Android代码 每周至少发布一篇博文!
  • 相关阅读:
    [WinJS] Promise 用法
    Python 统计代码行
    mac下Apache + MySql + PHP网站开发
    android中,获取网速的方法实现
    如何屏蔽掉两个activity切换时的动画效果
    dp与px的相互转化
    毫秒的格式化
    关于android中事件传递和分发的一些小理解
    汉字转拼音
    关于实现无限循环的做法
  • 原文地址:https://www.cnblogs.com/-4412/p/5209967.html
Copyright © 2011-2022 走看看