/********************************************
* 字符设备驱动框架 *
*********************************************
// 设计思路、步骤:
// 1、包含基本的头文件
// 2、定义主设备号、次设备号变量并初始化值为0
// 3、定义设备结构体(把相关资源封装在一个结构体里面,方便操作管理)
// 4、定义结构体变量
// 5、定义并实现open函数接口
// 6、定义并实现release函数接口
// 7、定义并实现ioctl函数接口
// 8、定义并实现read函数接口
// 9、定义并实现write函数接口
// 10、设置设备文件操作接口
// 11、定义并实现设备安装封装函数
// 12、定义并实现设备加载函数
// 13、定义并实现设备卸载函数
// 14、宏定义设备加载、卸载函数
//基本头文件
#include
#include
#include
#include
#include
#include
static int ledMajor = 0; //主设备号初始值
static int ledMinor = 0; //次设备号初始值
//led驱动结构
struct led_dev{
struct cdev cdev ;
char data[1] ;
};
static struct led_dev *myled ; //定义设备驱动变量
//打开设备
int s3c2410_led_open(struct inode *inode, struct file *filp)
{
return 0;
}
//设备io操作
int s3c2410_led_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
int ret=0 ;
return 0 ;
}
//读
ssize_t s3c2410_led_read(struct file *filp,char __user *buf,size_t count,
loff_t *f_pos)
{
ssize_t retval = 0 ;
return retval ;
}
//写
ssize_t s3c2410_led_write(struct file *filp,const char __user *buf,size_t count,
loff_t *f_pos)
{
ssize_t retval = 0 ;
return retval ;
}
//释放设备
int s3c2410_led_release(struct inode *inode, struct file *filp)
{
return 0;
}
//设备文件操作接口
struct file_operations s3c2410_fops = {
owner: THIS_MODULE,
open: s3c2410_led_open,
ioctl: s3c2410_led_ioctl,
release: s3c2410_led_release,
read: s3c2410_led_read ,
write: s3c2410_led_write,
};
//安装字符设备
int led_setup_cdev(struct led_dev *dev,int index)
{
int err,devno=MKDEV(ledMajor,ledMinor) ;
return err ;
}
//设备模块装载
int __init led_driver_init(void)
{
int ret;
return ret ;
}
//设备模块卸载
void __exit led_driver_exit(void)
{
}
//模块加载
module_init(led_driver_init);
//模块卸载
module_exit(led_driver_exit);
阅读(672) | 评论(0) | 转发(0) |