关于应用程序打开驱动的read直接返回0的问题
最近学习友善的minis3c2440,写了一个串口的字符设备驱动,串口0已经被用于与PC交互了,我写的驱动是串口1的,
1、在驱动函数的read里,我是这样处理的,直接进入睡眠,只有在串口收到数据的时候我才会去唤醒
static serial_read()
{
wait_event_interruptible(read_waitq,read_wakeup);
...
do something
...
}
2、在应用程序中,我先open 获得句柄,属性是 O_RDWR 可读可写 ,接下来我使用read(f_handle,buf,count)
while(run_read)
{
ret = read(f_handle,buf,count);
...
do something
}
但有时候read会直接返回0,但这时候串口的 RX 是为高电平的,而且我在驱动程序的read里使用printk打印信息,发现应用程序的read 根本就没有调用驱动程序里的read
这样的情况不是一直出现的,有时候串口就是好的,各方面通信都很正常,但一旦出现应用程序里的read返回0的情况,就会一直返回0
一直想不明白,求解啊!!
没有走到你的read接口,应该是应用打开的设备句柄已经不可用了,即设备句柄与设备对应出错了。此时close都不起作用了。试试能否在kernel强制close 该设备,然后再open试试。