基于ok6410:

led驱动程序:

vim led.c

#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
#include<linux/io.h>
#include<linux/fs.h>
#include<linux/cdev.h>
#include"led.h"
#include<mach/gpio-bank-k.h>

#define GPMCON 0x7f008820
#define GPMDAT 0x7f008824

unsigned int *led_config;
unsigned int *led_data;

struct cdev cdev;
dev_t devno;

long led_loctl(struct file *filp, unsigned int cmd, unsigned long arg) //实现对硬件的控制
{
switch(cmd)
{
case LED_ON:
writel(0x00,led_data);
return 0;

case LED_OFF:
writel(0xf,led_data);想寄存器写入数据,驱动专用函数
return 0;

default:
return -EINVAL;

}

}
int led_open(struct inode *node, struct file *filp)  //open中实现硬件初始化
{
led_config = ioremap(GPMCON,4);
writel(0x1111,led_config);
led_data = ioremap(GPMDAT,4);//将寄存器映射为虚拟内存。
return 0;
}

const struct file_operations led_fops =
{
.open = led_open,
.unlocked_ioctl = led_loctl,
};

static int led_init() //模块入口函数
{
cdev_init(&cdev, &led_fops);
alloc_chrdev_region(&devno, 0, 1, "myled");
cdev_add(&cdev, devno, 1);
return 0;
}
static void led_exit() //模块注销
{
cdev_del(&cdev);
unregister_chrdev_region(devno, 1);

}

module_init(led_init);
module_exit(led_exit);

头文件的包含必要的命令:

vim led.h

#define LED_MAGIC 'l' //定义幻数
#define LED_ON _IO(LED_MAGIC,0)
#define LED_OFF _IO(LED_MAGIC,1)

应用程序编写:

vim led_app.c

#include"led.h"
#include<stdio.h>
#include<sys/fcntl.h>
#include<sys/ioctl.h>
#include<sys/stat.h>
#include<sys/types.h>

int main(int argc,char *argv[])
{
int cmd;
int fd;
if(argc<2){
printf("please enter the second para!\n");
return 0;}
cmd = atoi(argv[1]);
fd = open("/dev/myled",O_RDWR);
if(cmd == 1)
ioctl(fd,LED_ON);//设备驱动程序中对设备的I/O通道进行管理的函数。
else
ioctl(fd,LED_OFF);
return 0;}

安装模块,安装设备文件,执行编译好的应用程序。

简单的led驱动程序设计的更多相关文章

  1. linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-84693.html linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxx ...

  2. 【Linux开发】linux设备驱动归纳总结(五):4.写个简单的LED驱动

    linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  3. led驱动程序设计

    LED的驱动程序很简单,按照张字符型设备驱动设计方法顺下来即可实现,这里主要讲几个注意事项. 一.在linux系统中,操作硬件不能够使用物理地址,一定要用虚拟地址.将物理地址转化为虚拟地址的函数如下: ...

  4. [国嵌攻略][117][LED驱动程序设计]

    LED程序设计 1.编写内核模块 2.搭建字符驱动框架 3.实现设备方法 头文件 <linux/io.h> writel() 1.编译/安装驱动 make cp leddev.ko ... ...

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

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

  6. Mini2440 LED驱动程序设计

    1 LED初始化: 2 LED闪烁设计 位或操作:| 取反操作:~ 位与操作:& http://www.tuicool.com/articles/eQzEJv

  7. ARM学习笔记13——LED驱动程序设计

    首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行: 第一步是配制S5PV210的GPC1_ ...

  8. s3c6410开发板LED驱动程序设计详细…

    2 下面来看看tiny6410关于LED的原理图如图(1)所示: 图1    LED原理图 3 LED实例,代码如下所示:(代码摘自\光盘4\实验代码\3-3-1\src\main.c) main.c ...

  9. 【转】linux设备驱动程序之简单字符设备驱动

    原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...

随机推荐

  1. 《图解http》知识点笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  2. 【干货】平安打卡神器E行销刷脸考勤破解,是怎么做到的?

    很多人好奇平安E行销打卡到底是怎么破解的,为什么明明需要连接公司职场WiFi才可以参会,才可以刷脸打卡.为什么不用去公司,在家里,或者外面只要有4G或WiFi的地方都可以.今天我就来给大家解密.把原理 ...

  3. 阿里云邮件服务器怎么设置才能在QQ邮箱访问,互发邮件?

    必须要在阿里云邮上打开IMAP和SMTP IMAP能够代发代收.在线更改.垃圾拦截,比POP3好: 记住打开的协议号: IMAP:143 带SSL:993 SMTP: 25 带SSL:465 前提是能 ...

  4. s​q​l​i​t​e​3​-​入​门​教​程

    *** 非常好 http://wenku.baidu.com/link?url=xDoS4prJaGRac0QS0nxdNr6056N-qJIfZ7OhiTharj1ntuIsNy9sWXWvBXLh ...

  5. fhs文件系统层级结构

    文件系统:操作系统用于明确存储设备或分区上的文件的方法和数据结构:层次化管理文件的结构就是文件系统: linux层次化文件结构,倒树状结构文件结构        FHS  filesystem hie ...

  6. C# 处理Word自动生成报告 四、程序处理

    C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 现在说一下程序处理 ...

  7. vue初学者

    先分享一波福利 vue学习视频    链接:https://pan.baidu.com/s/1ggSfE75 密码:7h2a        1.先安装 webpack vue-cli          ...

  8. 如何通过命令或脚本方式在Windows上访问linux系统

    很多情况下,我们需要在Windows上写脚本,创建计划任务程序,这个过程中可能需要访问linux系统,执行脚本或者上传下载文件.并且我们也不想在Windows上安装什么东西.那最好的办法就是使用put ...

  9. lambda高级进阶--延迟执行

    前面的整理我们也已经说到了,使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点.在使用lambda表达式的时候务必记住一点就是说lambda表达式都是延迟执行的. 延迟执行代码的原 ...

  10. linkin大话数据结构--List

    List:Collection子接口 List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元 ...