频谱仪多种内核通信机制的方案设计
其中,“.owner=THIS_MODULE”表示结构属于本模块,然后是open、read等各函数的对应关系。由于初始化在hpi_init函数中实现,所以open函数并没有特别的操作,主要是在终端输出信息。函数release主要是申请中断资源的释放,使用free_irq函数。下面主要讲解read函数,write函数与之类似,不再详述。
ssize_t hpi_read(struct file*file,char*buf,size_t count,loff_t*offp)
其中,参数file是打开文件的标识符;参数buf和count就是要向buf指向的地址存放count字节的数据;参数offp是文件读取的位置,默认为文件头,不用设置。
在read函数的最开始有如下代码:
wait_event interruptible(hpi_wait,ev_start);
down(sem);
……
up(sem);
其中wait_event_interruptible函数会阻塞进程,使其进入等待队列。直到DSP的数据准备好后,发来中断。HPI设备注册的中断处理函数handler会将变量ev_start置1,同时唤醒hpi_wait等待队列。read函数继续执行之后的代码,即开始从DSP的HPID寄存器读取数据到参数buf指向的地址。读取完成后向DSP指定地址写入0xffffffff,表示读取完成。
评论