LDD3源码学习笔记之scull_pipe转

本文详细介绍了Linux设备驱动中scull_pipe如何使用环形缓冲实现阻塞I/O,包括读写操作、等待队列、非同步通知等功能。通过对open、release、read、write、poll和fasync等函数的分析,展示了设备文件操作的过程和内核空间与用户空间的交互机制。
摘要由CSDN通过智能技术生成
/*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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值