linux设备驱动IO---阻塞

1、定义等待队列头部

wait_queue_head_t read_queue;      //定义读等待队列头部

bool have_data ; /*表明设备有足够数据可供读*/  

2、在设备初始化过程,初始化等待队列头部

    a)为等待队列申请内存空间

    b)init_waitqueue_head(&ts_usb_info->read_queue);//初始化等待队列

3、在open函数设置have_data的初始值

    have_data = false

4、在read函数编写睡眠等待代码

    while (!ts_usb_info->have_data) 
{
if(filp->f_flags & O_NONBLOCK)   //判断该文件时以阻塞方式还是非阻塞方式打开
return -EAGAIN; 
wait_event_interruptible(ts_usb_info->read_queue,ts_usb_info->have_data);//have_data=true时,才会被完全唤醒

}

    .........

    have_data = false; 

5、在数据产生后唤醒等待队列

    wake_up(&ts_usb_info->read_queue);//唤醒读队列
    have_data = true;//表示写入数据


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值