字符设备驱动模板

自己整理的一个常用的字符设备驱动模板,原创,转载请注明出处。

 

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

#include <linux/fs.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/of_device.h>   

int device_driver_major_number;  /* 设备的主设备号 */
static struct class *user_drv_class; /* 创建类,系统自动生成设备节点 */
static struct class_device *user_drv_class_dev; /* 类下创建设备 */

static int user_drv_open(struct inode *inode, struct file *file)
{
}
static ssize_t user_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{
}
static ssize_t user_drv_read(struct file *file, char __user *user, size_t size,loff_t*o)
{
}

loff_t user_drv_llseek(struct file *file, loff_t offset, int origin)
{
}

static unsigned user_drv_poll(struct file *file, poll_table *wait)
{
}

/* 创建设备结构 file_operations*/
static struct file_operations user_drv_fops = {
 .owner  = THIS_MODULE,  
 .open  = user_drv_open,    
 .write  = user_drv_write,   
 .read  = user_drv_read,
 .ioctl  = user_drv_ioctl,
 .release = user_drv_release,
 .llseek  = user_drv_llseek, 
 .poll  = user_drv_poll,
};

/* 注册模块 */
static int user_drv_init(void)
{
 /* 注册设备 */
 device_driver_major_number = register_chrdev(0, "user_drv_name", &user_drv_fops);

 /* 注册类class_drv_name */
 user_drv_class = class_create(THIS_MODULE, "class_drv_name"); 

 /* 注册类下设备device_inode_name,/dev/device_inode_name */
 user_drv_class_dev = device_create(user_drv_class, NULL, MKDEV(device_driver_major_number, 0), NULL, "device_inode_name");

 return 0;
}

/* 卸载模块*/
static void user_drv_exit(void)
{
 /* 注销设备 */
 unregister_chrdev(major, "first_drv");

 /* 注销类下的设备device_inode_name */
 device_destroy(user_drv_class_dev, MKDEV(major, 0));

 /* 注销类class_drv_name */
 class_destroy(user_drv_class);
}

module_init(user_drv_init);
module_exit(user_drv_exit);
MODULE_LICENSE("GPL");

 

拿来往里面填充就可以用了,挺方便的,希望可以对大家有帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值