頻譜儀多種內(nèi)核通信機(jī)制的方案設(shè)計(jì)
其中,“.owner=THIS_MODULE”表示結(jié)構(gòu)屬于本模塊,然后是open、read等各函數(shù)的對應(yīng)關(guān)系。由于初始化在hpi_init函數(shù)中實(shí)現(xiàn),所以open函數(shù)并沒有特別的操作,主要是在終端輸出信息。函數(shù)release主要是申請中斷資源的釋放,使用free_irq函數(shù)。下面主要講解read函數(shù),write函數(shù)與之類似,不再詳述。
ssize_t hpi_read(struct file*file,char*buf,size_t count,loff_t*offp)
其中,參數(shù)file是打開文件的標(biāo)識(shí)符;參數(shù)buf和count就是要向buf指向的地址存放count字節(jié)的數(shù)據(jù);參數(shù)offp是文件讀取的位置,默認(rèn)為文件頭,不用設(shè)置。
在read函數(shù)的最開始有如下代碼:
wait_event interruptible(hpi_wait,ev_start);
down(sem);
……
up(sem);
其中wait_event_interruptible函數(shù)會(huì)阻塞進(jìn)程,使其進(jìn)入等待隊(duì)列。直到DSP的數(shù)據(jù)準(zhǔn)備好后,發(fā)來中斷。HPI設(shè)備注冊的中斷處理函數(shù)handler會(huì)將變量ev_start置1,同時(shí)喚醒hpi_wait等待隊(duì)列。read函數(shù)繼續(xù)執(zhí)行之后的代碼,即開始從DSP的HPID寄存器讀取數(shù)據(jù)到參數(shù)buf指向的地址。讀取完成后向DSP指定地址寫入0xffffffff,表示讀取完成。
評論