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