王 軍,韓 力,杜博軍,王 磊,何 昕
(1.蘇州科技學(xué)院,江蘇 蘇州 215009; 2.中國(guó)白城兵器實(shí)驗(yàn)中心,吉林 白城 137001;3.中國(guó)科學(xué)院 長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,長(zhǎng)春 130033)
?
基于PCI-E總線的北斗導(dǎo)航授時(shí)卡Linux驅(qū)動(dòng)設(shè)計(jì)
王軍1,3,韓力1,杜博軍2,王磊1,何昕3
(1.蘇州科技學(xué)院,江蘇 蘇州215009; 2.中國(guó)白城兵器實(shí)驗(yàn)中心,吉林 白城137001;3.中國(guó)科學(xué)院 長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,長(zhǎng)春130033)
為提高Linux系統(tǒng)時(shí)間的精確度,設(shè)計(jì)了PCI-Express接口的北斗授時(shí)卡以及驅(qū)動(dòng)程序;授時(shí)卡通過(guò)北斗衛(wèi)星導(dǎo)航信息接收模塊接收時(shí)間定位信息并輸出至FPGA(Field-Programmable Gate Array,現(xiàn)場(chǎng)可編程門(mén)陣列),F(xiàn)PGA利用狀態(tài)機(jī)檢測(cè)出時(shí)間位置信息,并存入IP核創(chuàng)建的虛擬雙口RAM中;當(dāng)PCI-E驅(qū)動(dòng)芯片接收到讀取當(dāng)前時(shí)間命令時(shí),將虛擬雙口RAM中時(shí)間數(shù)據(jù)傳輸至PCI-E總線供上位機(jī)讀?。粚?shí)驗(yàn)編寫(xiě)了Linux系統(tǒng)設(shè)備驅(qū)動(dòng)程序,包括驅(qū)動(dòng)的編譯、加載,利用圖形界面開(kāi)發(fā)工具GTK+編寫(xiě)授時(shí)測(cè)試軟件;打開(kāi)授時(shí)測(cè)試軟件,通過(guò)指令使能授時(shí)卡PCI-E驅(qū)動(dòng)芯片硬件中斷,檢測(cè)到FPGA輸出的中斷信號(hào),測(cè)試軟件進(jìn)去中斷服務(wù)程序讀取PCI-E總線上的時(shí)間信息,并在目標(biāo)欄中顯示;試驗(yàn)結(jié)果證明:在Ubuntu Kylin系統(tǒng)平臺(tái)下授時(shí)測(cè)試軟件運(yùn)行穩(wěn)定、界面簡(jiǎn)潔,且授時(shí)精度達(dá)到100納秒。
Linux;PCI-Express;授時(shí);FPGA
計(jì)算機(jī)時(shí)間基本由網(wǎng)絡(luò)時(shí)間或主板時(shí)鐘芯片提供,導(dǎo)致時(shí)間誤差大,在工業(yè)控制、數(shù)據(jù)測(cè)量等領(lǐng)域無(wú)法完成特定任務(wù)。為解決計(jì)算機(jī)時(shí)間誤差較大問(wèn)題,部分學(xué)者提出Windows系統(tǒng)下PCI總線接口的GPS授時(shí)卡[1-2]。這種方法的不足在于:數(shù)據(jù)吞吐量、帶寬的限制使得PCI 總線逐漸被PCI-E總線所取代,且GPS授時(shí)方式以及美國(guó)微軟windows系統(tǒng)無(wú)法在國(guó)家安全敏感部門(mén)使用。針對(duì)上述不足,基于國(guó)產(chǎn)Linux系統(tǒng)平臺(tái),設(shè)計(jì)了PCI-E總線接口的北斗授時(shí)卡、驅(qū)動(dòng)程序以及基本應(yīng)用軟件。
1.1授時(shí)卡總體設(shè)計(jì)
授時(shí)卡總體設(shè)計(jì)了3個(gè)模塊:北斗衛(wèi)星解碼、可編程邏輯器件以及PCI-E驅(qū)動(dòng),總體設(shè)計(jì)如圖1所示。北斗衛(wèi)星解碼模塊通過(guò)天線接收北斗衛(wèi)星授時(shí)信號(hào),可編程邏輯器件通過(guò)串行通訊模塊接收GPRMC格式碼流,并解出GPRMC碼中的時(shí)間定位信息。PCI-E驅(qū)動(dòng)模塊在接收到計(jì)算機(jī)的命令后讀取雙口RAM中時(shí)間信息,并傳輸?shù)絇CI-E總線上供計(jì)算機(jī)應(yīng)用層軟件獲取[3-5]。
圖1 授時(shí)卡總體設(shè)計(jì)
1.2授時(shí)卡硬件設(shè)計(jì)
可編程邏輯器件FPGA采用Altera公司Cyclone IV系列中的EP4CE22E22C8N,該芯片具有144個(gè)IO端口、36個(gè)RAM塊、2個(gè)PLL鎖相環(huán)、18個(gè)嵌入式乘法器、4種配置方式和AS、JTAG下載調(diào)試接口。北斗衛(wèi)星解碼模塊采用和芯星通 UM220-III 為主芯片,授時(shí)精度可高達(dá)15納秒,與FPGA采用串口通信且有多種波特率可供選擇,只要保證有一顆衛(wèi)星連接正常,芯片就能輸出準(zhǔn)確的時(shí)間信息。PCI-E驅(qū)動(dòng)芯片采用PLX股份有限公司研發(fā)的PEX8114,支持輸入輸出端口地址映射和ROM的擴(kuò)展,支持硬件和軟件中斷,簡(jiǎn)化了授時(shí)卡硬件程序開(kāi)發(fā)過(guò)程。授時(shí)卡部分硬件連接圖如圖2所示。
圖2 授時(shí)卡部分硬件連接圖
2.1授時(shí)卡初始化設(shè)計(jì)
首先通過(guò)模塊初始化函數(shù)對(duì)PCI-E授時(shí)卡進(jìn)行初始化,在系統(tǒng)內(nèi)核中注冊(cè)pcie_driver數(shù)據(jù)結(jié)構(gòu)體,結(jié)構(gòu)體包括PCI-E驅(qū)動(dòng)模塊名稱、授時(shí)卡驅(qū)動(dòng)號(hào)等信息,然后通過(guò)probe( )函數(shù)使能PCI-E授時(shí)卡,調(diào)用系統(tǒng)函數(shù)對(duì)配置寄存器設(shè)置。然后讀取PCI-E配置信息獲取授時(shí)卡的內(nèi)存基址,調(diào)用ioremap完成配置信息的映射。接著通過(guò)request_region()完成I/O資源的申請(qǐng),request_irq()完成中斷的申請(qǐng)。最后注冊(cè)字符設(shè)備,通過(guò)file_operations實(shí)現(xiàn)應(yīng)用程序?qū)CI-E授時(shí)卡的控制[5]。授時(shí)卡驅(qū)動(dòng)初始化流程如圖3所示。
圖3 授時(shí)卡驅(qū)動(dòng)初始化流程圖
2.2釋放授時(shí)卡模塊
通過(guò)module_exit()函數(shù)釋放授時(shí)卡模塊,主要包括端口釋放、關(guān)閉授時(shí)卡設(shè)備、消除設(shè)備號(hào)和字符設(shè)備的注銷。授時(shí)卡模塊釋放流程如圖4所示。
應(yīng)用層測(cè)試軟件采用C語(yǔ)言編寫(xiě),利用GTK+函數(shù)庫(kù)編寫(xiě)圖形交互界面[7-8]。 首先初始化GTK+函數(shù),創(chuàng)建引導(dǎo)窗口,此窗口列出所有PCI-E的設(shè)備編號(hào)。輸入北斗授時(shí)卡設(shè)備號(hào)進(jìn)入主窗口,此窗口顯示授時(shí)卡的基本信息,同時(shí)檢測(cè)窗口“中斷打開(kāi)”按鈕事件。當(dāng)事件發(fā)生,使能外部硬件中斷,進(jìn)入中斷服務(wù)程序進(jìn)行時(shí)間信息的讀取并顯示。授時(shí)卡測(cè)試軟件總體流程如圖5所示。
圖4 釋放授時(shí)卡流程圖 圖5 授時(shí)卡測(cè)試軟件總體流程圖
3.1窗口模塊軟件設(shè)計(jì)
窗口作為用戶直接操作對(duì)象,首先通過(guò)gtk_window_new()函數(shù)新建PCI-E設(shè)備列表窗口,利用窗口設(shè)置函數(shù)對(duì)窗口大小、位置等參數(shù)進(jìn)行設(shè)置。完成后窗口建立后,通過(guò)PCI-E驅(qū)動(dòng)函數(shù)打開(kāi)PCI-E設(shè)備獲取授時(shí)卡設(shè)備號(hào),并在窗口文本框中顯示。通過(guò)gtk_button_new_with_label函數(shù)新建進(jìn)入時(shí)間顯示界面按鈕控件,當(dāng)檢測(cè)到按鍵的點(diǎn)擊事件,則會(huì)通過(guò)g_signal_connect()函數(shù)調(diào)用回調(diào)函數(shù)進(jìn)入授時(shí)卡時(shí)間顯示界面,否則一直在gtk_main()函數(shù)循環(huán)等待控件觸發(fā)事件,流程如圖6所示。
3.2中斷模塊軟件設(shè)計(jì)
進(jìn)入時(shí)間顯示界面后,通過(guò)“中斷打開(kāi)”按鈕調(diào)用中斷打開(kāi)程序,將授時(shí)卡PCI-E驅(qū)動(dòng)芯片設(shè)置為外部硬件中斷,當(dāng)檢測(cè)到FPGA的中斷后,進(jìn)入中斷子程序。中斷子程序包括對(duì)存放時(shí)間存儲(chǔ)器的讀取,將讀取的時(shí)間信息轉(zhuǎn)化為可顯示字符串在時(shí)間文本欄顯示,流程如圖7所示。
圖6 窗口模塊軟件設(shè)計(jì)流程圖 圖7 中斷模塊軟件設(shè)計(jì)流程圖
實(shí)驗(yàn)計(jì)算機(jī)采用華碩主板,操作系統(tǒng)為Ubuntu Kylin 15.04,內(nèi)核版本Linux 3.19.0。打開(kāi)終端,使用su -命令獲取超級(jí)用戶權(quán)限,然后使用cd命令進(jìn)入授時(shí)卡驅(qū)動(dòng)文件夾下使用make命令編譯,驅(qū)動(dòng)編譯命令如圖8所示。
圖8 驅(qū)動(dòng)編譯命令圖
在沒(méi)有錯(cuò)誤的情況下,文件夾下會(huì)產(chǎn)生多個(gè)文件,使用insmod命令將驅(qū)動(dòng)模塊動(dòng)態(tài)加載到內(nèi)核中,驅(qū)動(dòng)加載命令如圖9所示,并且通過(guò)lsmod檢測(cè)授時(shí)卡驅(qū)動(dòng)是否加載到系統(tǒng)內(nèi)核中,驅(qū)動(dòng)模塊顯示命令如圖10所示。
圖9 驅(qū)動(dòng)加載命令圖
圖10 驅(qū)動(dòng)模塊顯示命令圖
當(dāng)看到PCIE授時(shí)卡的驅(qū)動(dòng)在列表中,進(jìn)入應(yīng)用軟件文件夾下對(duì)軟件程序進(jìn)行編譯,編譯命令如圖11所示。
圖11 應(yīng)用軟件編譯命令圖
編譯沒(méi)有錯(cuò)誤后,可以使用./DEMO_GUI_GTK運(yùn)行可執(zhí)行文件,也可以直接雙擊可執(zhí)行性文件打開(kāi),此時(shí)顯示圖12應(yīng)用測(cè)試軟件的主界面。從主界面中能夠查詢硬件商和設(shè)備編碼,以及I/O和寄存器基址。點(diǎn)擊“打開(kāi)”按鈕打開(kāi)授時(shí)卡中斷,狀態(tài)欄顯示on狀態(tài)表示設(shè)備中斷打開(kāi),點(diǎn)擊“顯示”按鈕就能顯示標(biāo)準(zhǔn)北京時(shí)間。
圖12 授時(shí)卡應(yīng)用軟件主界面
使用Tektronix公司的TDS-2014C示波器檢測(cè)北斗衛(wèi)星標(biāo)準(zhǔn)秒頭與授時(shí)卡授時(shí)秒頭誤差50納秒,波形如圖13所示。
圖13 授時(shí)秒頭與標(biāo)準(zhǔn)秒頭波形圖
Linux系統(tǒng)下設(shè)計(jì)的北斗PCI-E授時(shí)卡克服了GPS授時(shí)安全問(wèn)題,擁有授時(shí)精度高、兼容性好等優(yōu)點(diǎn)。采用C語(yǔ)言和GTK+函數(shù)庫(kù)編寫(xiě)授時(shí)卡的驅(qū)動(dòng)和應(yīng)用軟件,通過(guò)了GCC編譯,運(yùn)行穩(wěn)定,代碼在Linux系統(tǒng)下有很高的移植性,也為其他PCIE設(shè)備在國(guó)家安全部門(mén)Linux系統(tǒng)下運(yùn)行提供了一種方法。
[1] 劉軍良,胡永輝,候雷.基于PCI總線的GPS授時(shí)卡設(shè)計(jì) [J].電子測(cè)量與儀器學(xué)報(bào),2008(s2):122-127.
[2] 趙志雄,李孝輝,劉婭,等.PCI總線的高精度大量程時(shí)間間隔計(jì)數(shù)器研制[J].電子測(cè)量與儀器學(xué)報(bào),2014,28(12):1317-1323.
[3] 楊會(huì)玲,唐彬.基于PCI-E的北斗/GPS雙模授時(shí)系統(tǒng)設(shè)計(jì)[J].蘇州科技學(xué)院學(xué)報(bào)(工程技術(shù)版),2014,27(1):68-69.
[4] 鞠康.基于FPGA的PCI-E數(shù)據(jù)采集電路設(shè)計(jì)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
[5] 劉娟,田澤,黎小玉.PCI-E接口驅(qū)動(dòng)軟件設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(8):53-55,59.
[6] 李鵬飛. Linux內(nèi)核編譯機(jī)制分析以及優(yōu)化研究[D].西安:西安電子科技大學(xué),2014.
[7] 顏廷芝,袁東風(fēng),江銘炎,等.基于嵌入式Linux終端的在線流媒體服務(wù)系統(tǒng)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):171-173,197.
[8] 劉立才,康維新,王海生,等.基于GTK+/GNOME的視頻監(jiān)控系統(tǒng)客戶端軟件設(shè)計(jì)[J].電視技術(shù),2012,36(23):146-150.
Design and Implementation of Driver of Beidou Navigation Timing Card under Linux PCI-E
Wang Jun1,3,Han Li1,Du Bojun2,Wang Lei1,He Xin3
(1.Suzhou University of Science and Technology,Suzhou215009,China;2.Bai Cheng Ordnance Test Center of China,Baicheng137001,China; 3.Changchun Institute of Optics,Fine Mechanics and Physics,Chinese Academy of Sciences,Changchun130033,China)
To improve the time accuracy of Linux system,a Beidou timing card driver under PCI-Express interface is designed. Timing card transmits time and location information to the FPGA (Field-Programmable Gate Array) by Beidou satellite navigation receiver module. FPGA decodes time and location information by using state machine,and creates a virtual double port RAM to store data by using IP core. When the PCI-E driver chip receives a command to read the current time,time data will be read from virtual dual-port RAM and transmit to PCI-E bus for the host computer. It programs timing card drivers for Linux including the driver compilation and loading,uses GTK+ graphical interface development tools to programming test software. Opening software and sending command to enable PCI-E driver chip hardware interrupt,when an interrupt signal output from the FPGA is found,the software runs interrupt service process will be tested and the time information on the PCI-E bus will be read and displayed in the column. Test results show that: software is stable and the interface is simple,and the timing error is 100 ns under Ubuntu Kylin system platform.
Linux; PCI-Express; timing; FPGA
1671-4598(2016)04-0115-03DOI:10.16526/j.cnki.11-4762/tp.2016.04.034
TP31
A
2015-10-12;
2015-11-14。
王軍(1979-),男,江蘇徐州人,副教授,碩士研究生導(dǎo)師,主要從事光電測(cè)控技術(shù)與儀器方向研究。