文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190618
中文引用格式: 張海峰,劉俊,種挺,等. 基于芯片仿真器的程序訪問權(quán)限配置方案[J].電子技術(shù)應(yīng)用,2019,45(10):80-82,87.
英文引用格式: Zhang Haifeng,Liu Jun,Chong Ting,et al. Solution of program access rights configuration based on chip simulator[J]. Application of Electronic Technique,2019,45(10):80-82,87.
0 引言
隨著科技的進(jìn)步,芯片作為信息化、智能化建設(shè)的核心部件之一, 大量應(yīng)用在人工智能、物聯(lián)網(wǎng)、大數(shù)據(jù)等領(lǐng)域[1],并在安全、通信、運算方面起著重要作用。由于芯片應(yīng)用場景的多樣化、復(fù)雜化,芯片上的嵌入式軟件程序的規(guī)模及復(fù)雜度也越來越高,如何提高嵌入式軟件程序的開發(fā)效率和質(zhì)量成為熱點問題[2]。
芯片仿真器,本文特指通過使用FPGA仿真芯片硬件邏輯[3]的硬件仿真器,作為一種嵌入式程序調(diào)試工具,與集成開發(fā)環(huán)境配合使用,通過對程序進(jìn)行單步調(diào)試、斷點調(diào)試、變量查看、寄存器查看等調(diào)試手段,實現(xiàn)對問題的追蹤、定位。從一定程度上說,調(diào)試操作直接影響到程序的質(zhì)量和開發(fā)周期[4-5]。
嵌入式程序的規(guī)模及復(fù)雜度的提高導(dǎo)致程序開發(fā)的難度越來越大。為解決這一問題,嵌入式程序開發(fā)一般采用分層程序設(shè)計方法,一般依據(jù)功能自底向上分為驅(qū)動層、系統(tǒng)層和應(yīng)用層。分層設(shè)計在降低設(shè)計開發(fā)難度的同時,便于廠商之間實現(xiàn)協(xié)作開發(fā),專注于各自擅長的領(lǐng)域。一般由不同的廠商負(fù)責(zé)不同層次的軟件開發(fā),低層程序通過提供函數(shù)接口供上層程序調(diào)用,為統(tǒng)一描述,將提供函數(shù)接口的程序統(tǒng)稱為應(yīng)用編程接口(Application Programming Interface,API)程序,使用API的程序稱為用戶程序。這種開發(fā)模式使得程序?qū)哟吻逦?,設(shè)計明確,維護(hù)方便,加快了產(chǎn)品的開發(fā)周期。
然而,在使用芯片仿真器進(jìn)行調(diào)試時也面臨著一些問題。在調(diào)試用戶程序時,需要將API程序一并下載到仿真器,而API程序提供者出于知識產(chǎn)權(quán)的保護(hù),一般不會直接提供程序源碼。如果以Intel 十六進(jìn)制編碼(Hexadecimal,HEX)文件形式提供[6],仍存在查看匯編代碼及反匯編的風(fēng)險。目前有一種方法是提供相應(yīng)的調(diào)試版本的HEX文件,調(diào)試版本程序的接口與實際版本相同,而把算法、認(rèn)證等關(guān)鍵操作進(jìn)行修改,導(dǎo)致用戶程序雖然可以完成接口的正常調(diào)用,但程序調(diào)試時的執(zhí)行結(jié)果與實際預(yù)期不符,調(diào)試的真實性受到了很大的影響,存在程序問題不能及時被發(fā)現(xiàn)或誤報的風(fēng)險。還有一種常用的方法,在實際芯片投片生產(chǎn)時,API程序預(yù)先掩模到芯片中,用戶程序通過特定的下載通道下載到芯片,然后通過直接操作芯片接口進(jìn)行程序測試,此種方法雖然與芯片的應(yīng)用場景一致,可以發(fā)現(xiàn)問題,但不容易進(jìn)行問題定位,一般用于項目后期程序功能相對穩(wěn)定的階段,不適用于程序開發(fā)初期階段。
為兼顧調(diào)試的真實性及知識產(chǎn)權(quán)的保護(hù),本文提出一種程序訪問權(quán)限可配置的方法,此方法基于芯片仿真器提供的程序訪問權(quán)限配置(簡稱為“權(quán)限配置”)機(jī)制及程序下載保護(hù)機(jī)制,實現(xiàn)API程序在仿真器中進(jìn)行安全下載、調(diào)試。此方案能夠較好地對敏感程序進(jìn)行保護(hù),且可靈活配置,對軟件協(xié)同開發(fā)、調(diào)試提供了一種安全方案。
1 系統(tǒng)結(jié)構(gòu)模型
普通的芯片仿真器系統(tǒng)是由硬件和軟件兩部分構(gòu)成的。硬件部分主要由芯片仿真電路、調(diào)試協(xié)議轉(zhuǎn)換電路及其他接口電路組成[7],其中芯片仿真電路通過FPGA實現(xiàn)芯片邏輯;調(diào)試協(xié)議基于聯(lián)合測試工作組(Joint Test Action Group,JTAG)實現(xiàn);軟件部分主要由軟件集成開發(fā)環(huán)境(Integrated Development Environment,IDE)及調(diào)試驅(qū)動接口組成,其中IDE主要包括程序編譯、鏈接、調(diào)試等功能,調(diào)試驅(qū)動接口以動態(tài)鏈接庫(Dynamic Link Library,DLL)形式存在,主要包括軟件與硬件進(jìn)行交互的接口函數(shù)。
為實現(xiàn)在芯片仿真器上程序訪問權(quán)限可配置的功能,除了具有普通仿真器的功能外,仿真器硬件包括一個訪問權(quán)限控制模塊,仿真器軟件包括程序加密模塊、程序加密下載模塊、權(quán)限配置生成模塊、權(quán)限配置下載模塊。
程序加密模塊主要實現(xiàn)對HEX格式的API程序文件進(jìn)行加密,并生成密文格式的文件。權(quán)限配置生成模塊主要實現(xiàn)對程序的訪問權(quán)限以配置文件的形式進(jìn)行靈活配置,并生成密文格式的文件。程序加密下載模塊和權(quán)限配置下載模塊位于調(diào)試驅(qū)動接口DLL中,分別完成密文格式的API程序及權(quán)限配置文件的下載操作。
系統(tǒng)框圖如圖1所示。
使用IDE進(jìn)行用戶程序調(diào)試時,IDE首先調(diào)用DLL接口,將訪問權(quán)限配置文件及密文程序文件進(jìn)行解析,然后通過通用串行總線(Universal Serial Bus,USB)接口[8]發(fā)送到調(diào)試協(xié)議轉(zhuǎn)換模塊,調(diào)試協(xié)議轉(zhuǎn)換模塊通過JTAG[9]通道將程序數(shù)據(jù)及訪問權(quán)限配置信息寫入芯片仿真模塊。
完成API程序的寫入及訪問權(quán)限配置后,將用戶程序下載到芯片仿真模塊,即可啟動正常的調(diào)試流程。出于安全考慮,程序加密、程序訪問權(quán)限配置實現(xiàn)原理及工具對用戶程序開發(fā)者嚴(yán)格保密。API程序開發(fā)者將生成好的密文文件傳遞給用戶程序開發(fā)者。
2 設(shè)計及實現(xiàn)
本節(jié)主要對程序加密、訪問權(quán)限配置生成、程序及權(quán)限配置下載的設(shè)計及實現(xiàn)方法進(jìn)行說明。
2.1 程序加密
程序加密模塊采用可視化工具的方式實現(xiàn),通過對API程序進(jìn)行加密處理,輸入的原始數(shù)據(jù)為HEX格式的程序文件,輸出的目標(biāo)數(shù)據(jù)為加密后的數(shù)據(jù),并支持程序地址范圍檢查和空白區(qū)域的填充功能。
程序加密模塊的處理流程如圖2所示。
設(shè)定的地址范圍通過界面輸入,如果程序數(shù)據(jù)實際地址范圍小于設(shè)定的地址范圍,可以選擇是否進(jìn)行空白區(qū)域填充:如果不選擇填充,空白區(qū)域?qū)⒉粫畛鋽?shù)據(jù);如果選擇填充,將以一字節(jié)為單位重復(fù)進(jìn)行填充,填充值可以通過界面指定,如圖3所示。
2.2 訪問權(quán)限配置信息生成
程序訪問權(quán)限配置信息以配置記錄的形式存在于配置文件中,每條配置記錄通過索引對應(yīng)于芯片硬件中程序訪問控制模塊中的配置區(qū)。配置文件通過將明文配置記錄按索引號從小到大順序進(jìn)行組合,加密處理后生成密文配置文件。訪問權(quán)限配置信息生成流程如圖4所示。
每條配置記錄以界面的形式進(jìn)行輸入,如圖5所示。
權(quán)限配置內(nèi)容包括程序地址范圍配置、讀寫權(quán)限配置、調(diào)試權(quán)限配置,其中讀寫權(quán)限是指調(diào)試過程中是否允許讀、寫操作,調(diào)試權(quán)限是指調(diào)試過程中是否允許單步和斷點調(diào)試。
通過配置文件生成訪問權(quán)限配置信息,可以對配置信息進(jìn)行靈活的修改,并支持多條記錄同時配置,滿足不同的配置需求。其中配置文件以密文形式存儲,隱藏了配置細(xì)節(jié)。
2.3 程序及權(quán)限配置下載
芯片仿真模塊提供程序訪問權(quán)限控制的配置接口及硬件實現(xiàn),配置接口主要以寄存器的形式提供,DLL通過寫寄存器完成配置操作。密文API程序數(shù)據(jù)由DLL進(jìn)行解析后下載仿真器硬件中的芯片仿真模塊。如果有多段API程序數(shù)據(jù)需要保護(hù),可以生成多個加密后的程序數(shù)據(jù),DLL分別進(jìn)行解析、下載。下載順序為先進(jìn)行訪問權(quán)限配置下載,然后再執(zhí)行程序下載。具體操作流程如圖6所示。
在獲取每條配置記錄信息時,對配置記錄信息的合法性進(jìn)行檢查,主要包括不同的配置記錄的地址范圍不能重疊;在進(jìn)行API程序下載時,對程序數(shù)據(jù)的合法性進(jìn)行檢查,包括不同程序的地址范圍不能重疊、單個程序的地址必須位于一條配置記錄的地址范圍內(nèi)。如果合法性檢查階段出錯,則進(jìn)行報錯提示并終止流程。
2.4 應(yīng)用舉例
API程序及權(quán)限配置信息下載操作完成后,芯片仿真模塊重新上電,權(quán)限配置信息生效,然后執(zhí)行正常的用戶程序調(diào)試即可。
本例中程序地址范圍為0x10000~0x100FF,訪問權(quán)限配置為不可讀、不可寫、不可調(diào)試,在調(diào)試用戶程序時,如果執(zhí)行到調(diào)用該API程序的用戶代碼時,則無法進(jìn)入API程序內(nèi)部執(zhí)行,并且無法通過IDE存儲器窗口查看實際內(nèi)容,讀出來的數(shù)據(jù)將以全0顯示,如圖7所示。
3 結(jié)束語
本文提供芯片仿真器上API程序保護(hù)的一種實現(xiàn)方案,通過對程序加密及權(quán)限配置控制,實現(xiàn)在下載及調(diào)試階段對程序進(jìn)行保護(hù),在一定程度上達(dá)到了對API程序安全調(diào)試的目的。
參考文獻(xiàn)
[1] 劉青龍,董家山.物聯(lián)網(wǎng)無人機(jī)應(yīng)用關(guān)鍵技術(shù)研究[J].電子技術(shù)應(yīng)用,2017,43(11):22-26.
[2] 姚遠(yuǎn).基于仿真開發(fā)環(huán)境的嵌入式調(diào)試的研究與實現(xiàn)[D].成都:電子科技大學(xué),2008.
[3] 謝長生,徐睿.FPGA在ASIC設(shè)計流程中的應(yīng)用[J].微電子技術(shù),2001,29(6):50-52.
[4] 張欣.基于ARM芯片的嵌入式調(diào)試系統(tǒng)的研究與實現(xiàn)[D].青島:中國海洋大學(xué),2007.
[5] 陳崢.基于動態(tài)連續(xù)數(shù)據(jù)的GPU調(diào)試系統(tǒng)設(shè)計和實現(xiàn)[J].電子技術(shù)應(yīng)用,2018,44(6):8-10,14.
[6] 魏忠,蔡勇,雷紅衛(wèi).嵌入式開發(fā)詳解[M].北京.電子工業(yè)出版社,2003.
[7] 王永生,葉以正,肖立伊,等.采用JTAG結(jié)構(gòu)實現(xiàn)SoC芯片的片上仿真器及接口[J].計算機(jī)工程與應(yīng)用,2002,38(16):240-243.
[8] 陳云飛.基于USB2.0的邊界掃描控制器的研制[D].武漢:武漢理工大學(xué),2007.
[9] IEEE.1149.1-2013-IEEE standard for test access port and boundary-scan architecture[S/OL].(2013-05-13)[2019-05-28].https://standards.ieee.org/standard/1149_1-2013.html.
作者信息:
張海峰1,2,劉 俊1,2,種 挺1,2,原義棟1,2
(1.北京智芯微電子科技有限公司 國家電網(wǎng)公司重點實驗室電力芯片設(shè)計分析實驗室,北京100192;
2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計工程技術(shù)研究中心,北京100192)