我的LED驱动
来源:互联网 发布:年享财富网络借贷 编辑:程序博客网 时间:2024/04/29 13:55
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <mach/regs-gpio.h>
#include <mach/hardware.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/unistd.h>
#define DEV_NAME "myled"
#define ledd_major 0
//定义LED控制引脚配置
static unsigned long ledd_table[]={
S3C2410_GPB5,
S3C2410_GPB6,
S3C2410_GPB7,
S3C2410_GPB8,
};
static unsigned int ledd_cfg_table[]={
S3C2410_GPB5_OUTP,
S3C2410_GPB6_OUTP,
S3C2410_GPB7_OUTP,
S3C2410_GPB8_OUTP,
};
struct ledd_dev_t
{
struct cdev cdev;
//unsigned int mem;
}ledd_dev;
int ledd_open(struct inode *inode, struct file *filp)
{
int i,ret;
for(i=0;i<4;i++)
{
printk("setting pin%d configuration now/n",i);
s3c2410_gpio_cfgpin(ledd_table[i],ledd_cfg_table[i]);
}
ret=nonseekable_open(inode,filp);
printk("the open function in driver return %d/n",ret);
return ret;
}
int ledd_release(struct inode *inode, struct file *filp)
{
return 0;
}
static ssize_t ledd_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_ops)
{
int ret;
int number;
int power;
unsigned char mem;
printk("run the function copy_from_user()/n");
printk("buf value is %d/n",*buf);
if(copy_from_user(&mem,buf,1))
ret= -EFAULT;
else
{
number=(((mem)&0x0f0)>>4);//取传入实参的二进制的4到7位作为LED序号
power=((mem)&0x01);//取传入实参的二进制的0到3位作为LED开关位,0:亮,1:灭
printk("number is %d/n",number);
printk("power is %d/n",power);
s3c2410_gpio_setpin(ledd_table[number],power);
}
return 0;
}
static const struct file_operations ledd_fops=
{
.owner=THIS_MODULE,
.open= ledd_open,
.release=ledd_release,
.write=ledd_write,
};
static int __init ledd_init(void)
{
int ret;
int ma,mi;
cdev_init(&ledd_dev.cdev, &ledd_fops);
ledd_dev.cdev.owner=THIS_MODULE;
ledd_dev.cdev.dev=MKDEV(ledd_major, 0);
if (ledd_major)
{
register_chrdev_region(ledd_dev.cdev.dev,1,DEV_NAME);
}
else
{
alloc_chrdev_region(&ledd_dev.cdev.dev,0,1,DEV_NAME);
}
ma=MAJOR(ledd_dev.cdev.dev);
mi=MINOR(ledd_dev.cdev.dev);
printk("%d/n",ma);
printk("%d/n",mi);
printk("this is my led driver/n");
ret=cdev_add(&ledd_dev.cdev,ledd_dev.cdev.dev,1);
return ret;
}
static void __exit ledd_exit(void)
{
printk("bye");
unregister_chrdev_region(ledd_dev.cdev.dev,1);
cdev_del(&ledd_dev.cdev);
}
module_init(ledd_init);
module_exit(ledd_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("YH Inc.");
- 我的LED驱动
- 我写的第一个LED驱动的心得
- 我的led驱动OK6410 飞凌开发板
- LED 驱动的整合
- 简单的LED驱动
- OK6410的LED驱动
- LED,我的归宿!
- 我的驱动开始之路-----LED驱动(作为字符设备)
- 我的第一个嵌入式linux驱动(基于韦东山led驱动)
- 我的第一个嵌入式linux驱动(基于韦东山led驱动)2_完善1
- 我的第一个嵌入式linux驱动(基于韦东山led驱动)3_完善2
- LED驱动相关的东西
- 基于tx2440的led驱动
- 一个简单的LED驱动
- linux下的led驱动
- 基于tiny6410 的led驱动
- 浅谈linux的LED驱动
- LED灯驱动的编写
- ASP.NET HTTP运行时组成详解
- 防止别人ping通你的linux主机
- Unix Core 文件
- 年终总结纲条
- ActiveX学习笔记一 添加属性中的问题
- 我的LED驱动
- abap 调用外部web service 使用小结
- 项目总结
- 为单选框添加事件 JRadioButton
- (Struts)ActionForm类及表单数据验证
- JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();出现空指针异常的问题
- 10
- 注册博客
- 使用 RUNDLL32 调试控制面板 Applet