頻譜儀多種內(nèi)核通信機(jī)制的方案設(shè)計(jì)
在驅(qū)動(dòng)文件的最后加上如下代碼,設(shè)置模塊加載與釋放對(duì)應(yīng)的函數(shù):
module_init(hpi_init);
module_exit(hpi_exit);
完成了驅(qū)動(dòng)程序的編寫(xiě),將源程序文件在Linux開(kāi)發(fā)環(huán)境下編譯成.ko的模塊文件,使用insmod和rmmod指令來(lái)加載和卸載模塊。
4.2 SPI設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)
在SPI的驅(qū)動(dòng)設(shè)計(jì)中,大體的框架跟HPI是相同的。包括頭文件宏定義的完善、SPI設(shè)備的初始化、file_operations結(jié)構(gòu)中函數(shù)的實(shí)現(xiàn)、資源釋放,最后編譯、加載。需要說(shuō)明的是AT91RM9200自帶了SPI接口,所以初始化時(shí)要根據(jù)芯片手冊(cè)對(duì)SPI接口的I/O線(xiàn)、時(shí)鐘、工作模式
等進(jìn)行配置,才能保證硬件的正常工作。在SPI驅(qū)動(dòng)的write函數(shù)中,使用了如下代碼:
copy_from_user(Ytos,buf,count);
在Linux的驅(qū)動(dòng)設(shè)計(jì)中,經(jīng)常涉及到用戶(hù)空間和內(nèi)核空間的通信問(wèn)題,即數(shù)據(jù)的交換。copy_from_user與copy_to_user函數(shù)就是為了實(shí)現(xiàn)這一功能。上述代碼實(shí)現(xiàn)的功能就是將用戶(hù)空間buf的count字節(jié)的內(nèi)容復(fù)制到內(nèi)核中定義的數(shù)組Ytos中,從而完成用戶(hù)空間和內(nèi)核的數(shù)據(jù)交換。驅(qū)動(dòng)的其余實(shí)現(xiàn)類(lèi)似HPI,不再詳述。
評(píng)論