/*pipe.c*/
/*=========================================*/
/*驱动功能分析*/
本驱动使用环形缓冲作为scull设备的的具体实现,类似于pipe.
其中实现了阻塞的I/O读写和非同步通知.
/*=========================================*/
/*主函数流程分析*/
1.定义scull_pipe设备机构体(){/*由于其实现阻塞I/O,所以主要其与scull_dev的区别*/
用于阻塞I/O读写休眠的等待队列:wait_queue_head_t
环形缓冲相关
记录打开阻塞I/O的设备进程的数量
阻塞I/O的非同步通知:fasync_struct
锁机制和字符设备
}
2.初始化模块module_init(scull_p_init){
(1).根据主次设备号生成dev_t,并调用register_chrdev_region向内核注册设备
(2).给scull_pipe设备结构体在内核空间分配,初始化内存:kmalloc,memset
(3).初始化每个设备空间
初始化等待队列头:init_waitqueue_head
初始化互斥锁:init_MUTEX
初始化字符设备:scull_p_setup_cdev
定义设备的fpos,并于设备关联,定点设备所以着,然后添加字符设备./*基本同scull_dev*/
(4).建立proc的debug机制
(5).返回值是成功初始化的设备个数
}
3.退出并注销模块module_exit(scull_p_cleanup){
(1).注销proc调试机制
(2).删除注册的字符设备,并清空字符设备已经分配的空间:cdev_del&kfree
(3).清空设备结构体空间注,并销注册的scull_pipe设备:kfree&unregister_chrdev_region
/*注意对释放后的指针依然赋值为NULL*/
}
4.设备相关文件操作函数(fpos)的定义(){
(1)open(scul
/*=========================================*/
/*驱动功能分析*/
本驱动使用环形缓冲作为scull设备的的具体实现,类似于pipe.
其中实现了阻塞的I/O读写和非同步通知.
/*=========================================*/
/*主函数流程分析*/
1.定义scull_pipe设备机构体(){/*由于其实现阻塞I/O,所以主要其与scull_dev的区别*/
用于阻塞I/O读写休眠的等待队列:wait_queue_head_t
环形缓冲相关
记录打开阻塞I/O的设备进程的数量
阻塞I/O的非同步通知:fasync_struct
锁机制和字符设备
}
2.初始化模块module_init(scull_p_init){
(1).根据主次设备号生成dev_t,并调用register_chrdev_region向内核注册设备
(2).给scull_pipe设备结构体在内核空间分配,初始化内存:kmalloc,memset
(3).初始化每个设备空间
初始化等待队列头:init_waitqueue_head
初始化互斥锁:init_MUTEX
初始化字符设备:scull_p_setup_cdev
定义设备的fpos,并于设备关联,定点设备所以着,然后添加字符设备./*基本同scull_dev*/
(4).建立proc的debug机制
(5).返回值是成功初始化的设备个数
}
3.退出并注销模块module_exit(scull_p_cleanup){
(1).注销proc调试机制
(2).删除注册的字符设备,并清空字符设备已经分配的空间:cdev_del&kfree
(3).清空设备结构体空间注,并销注册的scull_pipe设备:kfree&unregister_chrdev_region
/*注意对释放后的指针依然赋值为NULL*/
}
4.设备相关文件操作函数(fpos)的定义(){
(1)open(scul