1.字符设备模块和卸载函数
在Linux字符驱动模块加载函数中应该实现设备号的申请和cdev注册,在卸载函数中应该实现设备号的释放和cdev的注销.
工程师效习惯将一个设备定义为一个设备相关的结构体。
字符设备驱动模块加载和卸载函数模板框架
/*设备结构体 */
struct xxx_dev_t
{
struct cdev *cdev;
...............
}xxx_dev;
/* 设备驱动模块加载函数 */
static int __init xxx_init(void)
{
..........................
cdev_init(&xxx_dev.cdev,&xxx_fops);
xxx_dev.cdev.owner = THIS_MODULE;
//获取字符设备号
if (xxx_major)
{
register_chrdev_region(xxx_dev_no,1,DEV_NAME);
}
else
{
alloc_chrdev_region(&xxx_dev_no,0,1,DEV_NAME);
}
ret = cdec_add(&xxx_dev.cdev,xxx_dev_no,1);
.............
}
//设备驱动模块卸载函数
static void __exit xxx_exit(void)
{
/*释放设备号*/
unregister_chrdev_region(xxx_dev_no,1);
/*注销设备*/
cdev_del(&xxx_dev.cdev);
}
2.字符设备驱动文件操作结构体
struct file_operations xx_fops =
{
.owner = THIS_MODULE,
.read = xxx_read,
.write = xxx_write,
.ioctl = xxx_ioctl,
..........
}
阅读(1065) | 评论(1) | 转发(0) |