Smart210---LED驱动
经过几天的学习,终于linux驱动的基本框架弄清楚了。。。真的很艰辛,,,不过终于还是熬过来了,虽然还是最基础的,,,
今晚也完成了我第一个linux驱动,,,心里还是有点小兴奋的,哈哈O(∩_∩)O
直接上驱动源程序吧:::
我的开发板是Smart210,根据原理图,IO口输出0 led亮,输出1 led灭
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/delay.h> #include <mach/gpio.h>
#include <mach/regs-gpio.h>
#include <plat/gpio-cfg.h> #define DEVICE_NAME "leds"
/* 应用程序执行ioctl(fd, cmd, arg)时的第2个参数 */
/*the second parameter that application program execute*/
#define IOCTL_GPIO_ON 1
#define IOCTL_GPIO_OFF 0
/* 用来指定LED所用的GPIO引脚 */
/*appoint the pin the LED will use*/
static unsigned long leds_table [] =
{
S5PV210_GPJ2(),
S5PV210_GPJ2(),
S5PV210_GPJ2(),
S5PV210_GPJ2(),
//arch\arm\mach-s5pv210\include\mach\gpio.h
};
static char leds_name[][]={{"LED1"},{"LED2"},{"LED2"},{"LED3"}};
#define LED_NUM ARRAY_SIZE(leds_table)
/**
*函数功能:打开/dev/led设备
*fuction:open /dev/leds device
*设备名是:/dev/leds
*devce name: /dev/leds
**/
static int my_led_open(struct inode *inode, struct file *file)
{
int i;
int err; for (i = ; i < LED_NUM; i++)
{
err = gpio_request(leds_table[i], leds_name[i]);
//drivers/gpio/gpiolib.c
if(err)
{
printk(KERN_ERR "failed to request S5PV210_GPH2(%d) for LED%d \n",i-,i);
return err;
}
} for (i = ; i < LED_NUM; i++)
{
s3c_gpio_cfgpin(leds_table[i], S3C_GPIO_OUTPUT);//Configuration pin function:input output multiplex
gpio_set_value(leds_table[i], );//Set the pin level
//arch\arm\plat-samsung\gpio-config.c
// gpio_direction_output(leds_table[i], 0);//write a value to GPIO port ,also set the port to output mode
// gpio_set_value(leds_table[i], 0);
//drivers/gpio/gpiolib.c }
printk(KERN_INFO "LEDs driver successfully close\n");
return ;
} static long my_led_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
{
arg -= ;
if(arg > LED_NUM) {
return -EINVAL;
} switch(cmd) {
case IOCTL_GPIO_ON:
printk("led light\n");
gpio_set_value(leds_table[arg], );
break; case IOCTL_GPIO_OFF:
printk("led no light\n");
gpio_set_value(leds_table[arg], );
break; default:
printk("led failed\n");
return -EINVAL;
}
return ;
} static int my_led_close(struct inode * inode,struct file * file)
{
int i;
for(i= ; i < LED_NUM; i++)
gpio_free(leds_table[i]);
printk(KERN_EMERG"close success\n");
return ;
} struct file_operations my_led_ops = {
.owner = THIS_MODULE,
.open = my_led_open,
.unlocked_ioctl = my_led_ioctl,
.release = my_led_close,
}; static struct miscdevice led_misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &my_led_ops,
}; static int __init my_led_init(void)
{
int ret; ret = misc_register(&led_misc);
if(ret) {
printk(KERN_INFO"misc_register failed\n");
} printk(KERN_INFO"misc_register sucessed\n"); return ;
} static void __exit my_led_exit(void) {
int i;
misc_deregister(&led_misc);
for(i= ; i < LED_NUM; i++)
gpio_free(leds_table[i]);
printk(KERN_INFO "LEDs driver successfully exit\n");
} module_init(my_led_init);
module_exit(my_led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("qigaohua");
应用程序:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/time.h> #define IOCTL_GPIO_ON 1
#define IOCTL_GPIO_OFF 0 int main(int argc, char **argv)
{
int fd; fd = open("/dev/leds",);
if(fd < ) {
printf("/dev/leds open failed\n");
exit();
} do {
printf("/dev/leds open sucessed\n");
ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_OFF, );
ioctl(fd, IOCTL_GPIO_OFF, );
ioctl(fd, IOCTL_GPIO_OFF, );
sleep(); ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_OFF, );
ioctl(fd, IOCTL_GPIO_OFF, );
sleep(); ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_OFF, );
sleep(); ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_ON, );
ioctl(fd, IOCTL_GPIO_ON, );
sleep(); ioctl(fd, IOCTL_GPIO_OFF, );
ioctl(fd, IOCTL_GPIO_OFF, );
ioctl(fd, IOCTL_GPIO_OFF, );
ioctl(fd, IOCTL_GPIO_OFF, );
}while(); close(fd);
return ; }
Smart210---LED驱动的更多相关文章
- 兼容可控硅调光的一款LED驱动电路记录
1.该款电路为兼容可控硅调光的LED驱动电路,采用OB3332为开关控制IC,拓扑方案为Buck: 2.FB1:磁珠的单位是欧姆,而不是亨利,这一点要特别注意.因为磁珠的单位是按照它在某一频率 产生的 ...
- FL2440驱动添加(4)LED 驱动添加
硬件信息:FL2440板子,s3c2440CPU带四个LED,分别在链接GPB5,GPB6,GPB8,GPB10 内核版本:linux-3.8.0 led驱动代码如下: 值得注意地方地方: 1,定时器 ...
- linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-84693.html linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxx ...
- uTenux——LED驱动讲解
LED驱动讲解,对于一个嵌入式的工程师还是一个刚开是学习相关电子设计的朋友,对于LED的驱动问题应该不甚陌生.我所说的LED驱动并不是类似大功率LED照明的那个驱动,而是简单的控制器对LED的控制驱动 ...
- Android系统移植与驱动开发——第七章——LED驱动
LED驱动的实现原理 编写LED驱动: 测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接 如果有多个设备文 ...
- 全志A33 linux led驱动编程(附实测参考代码)
开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 开发平台 * 芯灵思Sinl ...
- Linux驱动之LED驱动编写
从上到下,一个软件系统可以分为:应用程序.操作系统(内核).驱动程序.结构图如下:我们需要做的就是写出open.read.write等驱动层的函数.一个LED驱动的步骤如下: 1.查看原理图,确定需要 ...
- (笔记)linux设备驱动--LED驱动
linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友 ...
- JZ2440 启动NFS网络文件系统_初试led驱动
http://blog.csdn.net/emdfans/article/details/12260969 u-boot ---> q 修改bootargs变量 默认: bootargs=noi ...
- 基于sys文件系统的LED驱动的移植【原创】
基于RK3188平台LED驱动程序的移植的移植.如有不正确之处,欢迎大家指点. 本文的LED驱动程序不是通过打开设备节点来访问和控制LED的,是通过sys文件系统来控制LED. 板子上有四盏灯以及对应 ...
随机推荐
- Chrome开发,debug的使用方法。(转)
怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: 或者在Chrome的工具中找到: 或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shif ...
- struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)
课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...
- 319. Bulb Switcher——本质:迭代观察,然后找规律
There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...
- MVC1-5直接访问静态页面
MVC模式下默认是无法访问站点内静态页面,昨日百度找了半天试了半天才试成功. 默认在Views文件外的静态页面可以访问,若要访问Views里的静态页面则需要修改View文件夹中的web.config: ...
- 最原始的COM组件调用过程(不使用注册表信息)
最原始的COM组件调用过程(不使用注册表信息) 最近因为项目的关系开始研究COM组件了,以前都认为COM过时了,所以也没怎么接触. 现在好好补补课了. 一般调用COM都是通过注册表找到它的位置, 然后 ...
- PHP FTP操作类( 上传、拷贝、移动、删除文件/创建目录 )
/** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...
- Scala 入门——Eclipse开发环境搭建
Come From: http://lidrema.blog.163.com/blog/static/209702148201461145859142/ Scala: 一种类似java的编程.集成了面 ...
- java 面向对象编程 --第十二章 JDK常用类
1. 系统类 java.lang包 System类 sys.out;sys.exit;sys.gc; sys.currentTimeMillis();----得到从1970-01-01到当前时间 ...
- 常用的JavaScript验证正则表达式1
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 评注:网 ...
- bzoj 1877: [SDOI2009]晨跑
#include<cstdio> #include<iostream> #include<cstring> #define M 6009 #define inf 2 ...