/**

******************************************************************************
* @author    暴走的小哥哥
* @version   V1.0.0
* @date       2016-02-19
******************************************************************************
* <  Beijing university of posts and telecommunications >
*******************************************************************************
******************************************************************************
* platform exynos4412
*******************************************************************************
**/
1工具

1.1硬件工具

1)iTOP4412开发板

2)U盘或者TF卡

3)PC机

4)串口

1.2软件工具

1)虚拟机Vmware

2)Ubuntu12.04.2

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

2驱动MakeFile文件的编写

我们在前面的devicenode_linux_module.c文件上添加代码,首先将文件名devicenode_linux_module.c改为leds.c。

先处理一下编译文件Makefile,如下图所示,将devicenode_linux_module改为leds。

3编写驱动调用LED管脚

接着修改leds.c文件。

首先添加需要的头文件,如下图所示,分别是申请GPIO、配置函数、配置参数、GPIO宏定义等的头文件。然后将设备节点名称由hello_ctl123修改为hello_ctl

然后需要修改的就是probe函数,一般说来GPIO的初始化都是在probe中。如下图所示,调用配置函数以及配置函数。

然后就是修改一下ioctl函数,在Linux中对GPIO的控制一般是使用ioctl,虽然write函数也可以实现类似的功能,但是ioctl函数的效率高一些。如下图所示,根据应用传入的参数给GPIO赋值。

如上图所示,先对于参数做一个简单的判断,然后给led赋值。

34编写应用调用LED管脚

接着再来看一下应用,如下图所示,应用比较简单,调用延时函数,首先将Led点亮三秒,然后再灭掉三秒,再点亮。

在Ubuntu系统下新建leds文件夹,将写好的leds和编译脚本拷贝到leds文件夹下,使用Makefile命令编译驱动,使用

“arm-none-linux-gnueabi-gcc -o invoke_leds invoke_leds.c -static”命令编译应用。如下图所示。

将上图中的文件invoke_leds和leds.ko拷贝到U盘。

启动开发板,将U盘插入开发板,使用命令“ mount /dev/sda1 /mnt/udisk/”加载U盘符,

使用命令“ insmod /mnt/udisk/leds.ko ”加载驱动leds.ko,

使用命令“./mnt/udisk/invoke_leds”运行小应用invoke_leds,如下图所示。

经过上面的操作可观察到led小灯会一亮一灭一亮,中间大概间隔三秒钟。

本人文字水平有限,所以就一步一步的写和截图,希望这种形式对大家有所帮助!

本文只对系统默认的led进行控制,如果想要调用复用的leds,例如和wifi,camera复用

请参考本人博客:调试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. Linux下GPIO驱动(二) ----s3c_gpio_cfgpin();gpio_set_value();

    首先来看s3c_gpio_cfgpin(); int s3c_gpio_cfgpin(unsigned int pin, unsigned int config) { struct s3c_gpio_ ...

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

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

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

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

  6. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(二)

    我们在 浅谈Linux PCI设备驱动(一)中(以下简称 浅谈(一) )介绍了PCI的配置寄存器组,而Linux PCI初始化就是使用了这些寄存器来进行的.后面我们会举个例子来说明Linux PCI设 ...

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

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

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

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

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

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

随机推荐

  1. wndows 7 Wifi热点

    2016年09月13日 14時52分 wanglinqiang整理 Step1 cmd.exe(管理员身份运行) Step2 命令行输入[netsh wlan set hostednetwork mo ...

  2. 玩转C++运算符重载

    运算符重载语法:返回值类型  operator运算符(参数列表) {  代码逻辑... } C++中的运算符重载是通过函数来实现的,可以将重载的运算符看作是类成的一个成员函数,向普通函数一样调用.如重 ...

  3. win7+ubuntu双系统安装方法

    转自win7+ubuntu双系统安装方法 前段时间又安装一下win7+ubuntu双系统,过段时间就会忘记,这次自己写下来,以便以后查看. 1.      先准备一个分区来安装ubuntu.在win7 ...

  4. 用UIKIT的模态对话框要注意的地方

    XXX,晚上又搞了三个小时左右,才摸清楚. 多个ID要注意唯一性. 而在DJANGO里,每一个循环的唯一性,也有技巧性. 父循环的编号 {{ forloop.parentloop.counter }} ...

  5. 在keil中使用Astyle格式化你的代码的方法

    一个好的程序,不仅要有好的算法,同时也需要有良好的书写风格.写出好的算法不容易,但是好的代码风格却并不困难.提到格式化代码,Astyle是一个不能错过的工具,它可以方便的将程序代码格式化成自己想要的样 ...

  6. 14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构

    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构 一个InnoDB 表的物理行结构取决于在创建表指定的行格式 默认, Inno ...

  7. eclipse 中使用等宽字体 inconsolata

    一直以来,就感觉使用 eclipse 时的那几种字体很难看,而且非等宽,空格宽度很小,排版很乱. 搜索并试用了一下,发现了字体inconsolata. 这是一个很适合编程的字体,效果如下: 非常漂亮. ...

  8. 深入浅出Node.js (9) - 玩转进程

    9.1 服务模型的变迁 9.1.1 石器时代:同步 9.1.2 青铜时代:复制进程 9.1.3 白银时代:多线程 9.1.4 黄金时代:事件驱动 9.2 多进程架构 9.2.1 创建子进程 9.2.2 ...

  9. Linux Shell编程(25)——I/O 重定向

    默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上). 这3个文件和其他打开的文件都可以被重 ...

  10. 贪心(哈夫曼树):HDU 5884 sort

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2QAAAKACAIAAAB8KCy/AAAgAElEQVR4nOy9a5Adx3UmWL+kHxuekU ...