简单的led驱动程序设计
基于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驱动程序设计的更多相关文章
- linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-84693.html linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxx ...
- 【Linux开发】linux设备驱动归纳总结(五):4.写个简单的LED驱动
linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- led驱动程序设计
LED的驱动程序很简单,按照张字符型设备驱动设计方法顺下来即可实现,这里主要讲几个注意事项. 一.在linux系统中,操作硬件不能够使用物理地址,一定要用虚拟地址.将物理地址转化为虚拟地址的函数如下: ...
- [国嵌攻略][117][LED驱动程序设计]
LED程序设计 1.编写内核模块 2.搭建字符驱动框架 3.实现设备方法 头文件 <linux/io.h> writel() 1.编译/安装驱动 make cp leddev.ko ... ...
- Linux下GPIO驱动(一) ----一个简单的LED驱动
/******************************* * *杂项设备驱动:miscdevice *majior=10; * * *****************************/ ...
- Mini2440 LED驱动程序设计
1 LED初始化: 2 LED闪烁设计 位或操作:| 取反操作:~ 位与操作:& http://www.tuicool.com/articles/eQzEJv
- ARM学习笔记13——LED驱动程序设计
首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行: 第一步是配制S5PV210的GPC1_ ...
- s3c6410开发板LED驱动程序设计详细…
2 下面来看看tiny6410关于LED的原理图如图(1)所示: 图1 LED原理图 3 LED实例,代码如下所示:(代码摘自\光盘4\实验代码\3-3-1\src\main.c) main.c ...
- 【转】linux设备驱动程序之简单字符设备驱动
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...
随机推荐
- 从零开始学习前端开发 — 16、CSS3圆角与阴影
一.css3圆角: border-radius:数值+单位; 1.设置一个值:border-radius:20px; 四个方向圆角都为20px(水平半径和垂直半径相等) 2.设置两个值 border- ...
- tomcat实现热部署的配置
p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; text-align: justi ...
- thinkphp 中concat(连接)使用方法
1.concat将title和id连接作为truename新的字段,left从url字段左侧开始截取25个字符,同理right也可. 2.getLastql用法:
- yourphp常用标签
方法/步骤 1 引入页面: 首页链接:{$site_url} 英文首页{$site_url}/en 面包屑导航: {:L(catpos)} {:L(home_font)} > 幻灯 ...
- 用户使用VPS的12个常见问题
1.VPS主机用户能否进行备份? VPS主机允许用户进行自主的备份,这个操作非常简单,是需要在用户控制面板点击备份按钮即可.同时还允许用户恢复到任何备份状态. 2.当某个VPS主机用户被攻击时,会不会 ...
- Android之MaterialDesign应用技术
PS:纵观现在大大小小软件的界面都变的比较漂亮,还有一些系统了,比如小米的MIUI,华为的EMUI等,虽然底层都是安卓,但他们的界面多多少少都会不同,谷歌对这个UI也是非常重视的,MaterialDe ...
- flask_route错误:AttributeError: 'function' object has no attribute 'route'
问题: 路由完全正确,当只有一个名为home的函数处理这个路由时候,下一个路由处理函数,总是提示没有这个rotue属性 Traceback (most recent call last): File ...
- Django_上传图片和模版获取图片
需求: 在Django中,上传图片,存入数据库中的文件的路径,而不是图片本身,也就是说,图片等数据静态文件都可以放到第三方服务器上,我想在把图片保存到Django本地项目中,并可以通过Django自带 ...
- python_如何创建可管理的对象属性
案例: 在面向对象编程中,我们把方法作为对象的接口,自己访问对象的属性可能是不安全的,或设计上不灵活,但是使用调用方法在形式上不如访问属性简洁 繁: circle.getRadius() circle ...
- JAVA 锁之 Synchronied
■ Java 锁 1. 锁的内存语义 锁可以让临界区互斥执行,还可以让释放锁的线程向同一个锁的线程发送消息 锁的释放要遵循 Happens-before 原则(锁规则:解锁必然发生在随后的加锁之前) ...