999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于CK?Core的安全芯片Bootloader開發與應用

2013-04-12 00:00:00張鋒劉光耀王劍非
現代電子技術 2013年22期

摘 要: 隨著嵌入式技術的快速發展,多接口和多功能的Bootloader得到越來越多的應用,但其設計開發過程卻非常復雜。為了實現定制安全芯片的軟硬件初始化,并成功下載其片內操作系統(COS),設計并實現了一種支持多接口和多功能的Bootloader。該Bootloader根據安全芯片及其CK?Core CPU的結構特點開發,程序結構簡潔高效,對Bootloader的設計和開發提供了有力參考。

關鍵詞: 嵌入式系統; Bootloader;COS; 安全芯片; CK?Core

中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2013)22?0137?06

0 引 言

隨著IT技術的迅猛發展,人們對信息安全的要求越來越高。如何有效保障信息在交互過程中的安全性,成為一個日益重要的問題。安全芯片作為信息安全嵌入式產品的核心部分,能夠獨立進行密鑰生成、加解密。其內部擁有獨立的處理器和存儲單元,可存儲密鑰和特征數據,為實際應用提供加密和安全認證服務。在國家開展的“新一代寬帶無線移動通信網”科技重大專項中,如何保證寬帶多媒體集群系統的安全性是項目的重要研究部分,而由我國自主研發的新一代安全加密芯片便是該重大專項中安全加密子系統的核心。該定制芯片采用具有自主知識產權的32位RISC安全CPU核——CK?Core,對于我國信息安全事業,尤其是警用信息安全技術的發展具有重要的意義。

在嵌入式系統軟件開發中,引導加載程序(Bootloader)的開發是第一個環節,它對整個系統的正常運行起著關鍵作用。Bootloader的實現取決于對應硬件環境及整個嵌入式系統的功能需求,例如ARM通過U?Boot來引導,而DSP可以直接從EPROM或其他的處理器加載操作系統到DSP運行。本文的安全芯片Bootloader根據安全芯片及其CK?Core CPU的結構特點設計開發,具有多接口、多功能、程序結構簡潔高效的特點。本文即從設計方案、軟件實現、軟件功能測試及應用等角度詳細論述了該引導加載程序(Bootloder)的開發過程,從而為Bootloader的設計開發人員提供了一定的參考。

1 開發系統總述

本文提出的引導/裝載程序(Bootloader)是基于定制安全芯片進行設計開發的。本芯片屬于我國自主設計研發的新一代安全芯片,是國家十二五科技重大專項“新一代寬帶無線移動通信網”相關課題的研究成果,適用于集群終端設備、基站設備等多用途高速安全加密領域。該芯片為項目中安全加密子系統的建立奠定了基礎,安全加密子系統的示意圖如圖1所示。其中安全密碼芯片是終端、基站、安全服務器實現信息安全要求的基本設備,能夠提供身份信息、密鑰信息等敏感信息的安全存儲;并能夠完成通信信息加解密,以實現鑒權、空口加密和端到端加密功能。

本安全芯片采用CK?Core作為CPU核。CK?Core是面向嵌入式系統和SoC應用領域的32位高性能低功耗嵌入式CPU核,采用了具有自身安全保護邏輯的16/32位混合編碼RISC指令集[1]。其采用自主設計的體系結構和微體系結構并具有可擴展指令、可配置硬件資源、可重新綜合、易于集成等優點。本芯片采用國內先進的0.18 μm工藝生產,硬件實現了所有主流的密碼算法,包括國產密碼算法SM1,SM2,SM3等,與同類安全芯片相比,加解密功能更加強大,性能更加優越;芯片支持USB 2.0,UART,SPI、高速SPI(SSPI)等多種I/O接口,極大拓展了芯片的應用領域及生命周期;為使芯片的應用更為靈活,芯片內置了多種類型存儲器(SRAM,FLASH,ROM)。其中Bootloader存放在芯片16 KB的ROM里,代碼密度高,在保證空間資源充足的前提下充分縮減了芯片成本,并且具有保存穩定、讀取方便的特點。

在結構上,本定制安全芯片采用更加高效的多總線結構,芯片的架構圖如圖2所示。傳統的基于共享總線結構的單層AHB總線已經不能滿足多處理器系統高帶寬和低延時的要求。本安全芯片采用的多層AHB總線結構代表了一種更先進的片上總線互連策略,既可以減少多Master系統的訪問延時,也可以增加總線帶寬。

在安全性方面,首先,本芯片所有數字邏輯全部采用離散電路,即使攻擊者重構版圖也無法得到芯片結構與IP信息,從而有效抑制破壞性攻擊及反向工程;另外,本安全芯片含有多種保護機制,如過流及頻率保護、環境失效保護(Environmental Failure Protection,EFP)等,有效抑制了非破壞性攻擊。

本文所述Bootloader的開發即基于上文所述的硬件環境。軟件開發方面,Bootloader通過C語言及匯編指令實現,開發環境為專門適用于CK?Core的集成開發環境C?Sky Development Suit(CDS)。CDS是一個基于Eclipse,用于C?SKY CPU架構交叉開發的可視化集成軟件開發環境。在CDS環境下,軟件開發用戶可以方便地進行項目工程管理、編寫代碼、設置編譯鏈接參數、編譯鏈接目標程序等操作,并能夠通過ICE在目標板上進行C/C++語言級調試。

2 Bootloader技術

2.1 Bootloader簡介

嵌入式系統是以應用為中心,以計算機技術為基礎,且軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統[2]。

引導加載程序(Bootloader)則是嵌入式系統加電后運行的第一段代碼。通過運行Bootloader,系統可以初始化硬件設備、建立內存空間映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境[3]。因此,Bootloader是整個嵌入式系統的首要環節。在PC中,引導加載程序由BIOS和位于硬盤MBR中的OS Bootloader(比如LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤MBR中的Bootloader讀到RAM中,接下來由OS Bootloader將內核映像從硬盤上讀到RAM中,并跳轉到內核入口點,即開始啟動操作系統。但在嵌入式系統中,通常沒有像BIOS那樣的固件程序,所以就由芯片中的Bootloader來完成系統的加載啟動。在本安全芯片中,系統在上電或復位時都從地址0x00000000處開始執行,這個地址是片內ROM地址空間,其中存放的就是本系統的Bootloader。

Bootloader通常是嚴重地依賴于硬件而實現的,大多數的CPU體系結構都有不同的Bootloader。目前,多種Bootloader得到了廣泛的應用:例如,Blob是專門為StrongARM架構下的LART設計的Bootloader[4];U?Boot是由開源項目PPCBoot發展而來,適用于PowerPC,ARM,MIPS等多種嵌入式開發板[5];vivi是由韓國Mizi公司設計為ARM系列處理器設計的一個Bootloader[6];等等。但這些Bootloader結構復雜,資源需求量大,且并不完全適用于本芯片的硬件架構。本文設計實現的Bootloader則簡潔高效,代碼密度高,只需較少的資源便可完成多接口與多功能的目標。

2.2 Bootloader典型結構

Bootloader的實現通常分為Stage1和Stage2兩大部分[7]。依賴于CPU體系結構的代碼,通常放在Stage1中,而且為了達到短小精悍的目的,Stage1的代碼通常用匯編語言實現。而Stage2通常用C語言實現,這樣可以實現更復雜的功能,而且代碼會具有更好的可讀性和可移植性。Stage1在完成硬件設備初始化、準備堆棧和RAM等操作后,會跳轉到Stage2的C入口點,然后完成Stage2 的操作。

3 Bootloader設計方案及實現

3.1 系統架構

在嵌入式系統中,Bootloader作為引導與加載片內操作系統(Chip Operation System,COS)的工具,必須提供初始化硬件設備、初始化RAM、初始化I/O接口等功能。

本文所述的Bootloader即有效實現了上述基本功能。從功能上講,該Bootloader先后運行在兩種工作模式:啟動模式和下載模式。安全芯片最初上電時,系統PC開始執行ROM中的Bootloader,首先進入Bootloader的啟動模式,完成硬件設備初始化、RAM空間初始化、堆棧初始化,I/O接口初始化等操作;然后,Bootloader進入循環命令等待狀態,待主機終端用戶輸入相應APDU(Application Protocol Data Unit)命令后,完成命令的解析及響應,從而實現下載COS的功能。

本文設計的Bootloader總體結構框圖如圖3所示。其主要由三部分組成:物理層、驅動層、應用及協議層。物理層包含UART,USB,SSPI,SPI等設備接口以及FLASH存儲空間;驅動層包括系統的初始化以及各種硬件設備的驅動程序;應用及協議層包括APDU命令在不同接口協議下的解析函數及響應函數。

3.2 系統工作流程及軟件實現

本文所述的Bootloader工作流程如圖4所示。

整個Bootloader分為Stage1和Stage2兩個階段,下文將針對這兩個階段的設計和軟件開發進行詳細論述。

3.2.1 Bootloader的鏈接腳本開發

本文介紹的Bootloader在GCC(GNU Compiler Collection)環境下開發,在此開發過程中如何控制輸出文件在內存的布局情況是非常關鍵的問題。在GNU中,每一個鏈接過程都由鏈接腳本(link script,一般以ld作為文件的后綴名)控制。鏈接腳本主要用于規定如何把輸入文件內的section放入輸出文件內,并控制輸出文件內各部分在程序地址空間內的布局[8]。在基于CK?Core的安全芯片中,Bootloader采用GNU ld文件的標準格式開發,主要完成了text段、rodata段、data段和bss段的內存布局,即如何安排其下載地址(Load Memory Address,LMA)和運行地址(Virtual Memory Address,VMA)。上述4個section的LMA全是芯片的ROM,即存放Bootloader的空間。關于VMA,由于text段和rodata段只需讀取不需改動,所以其VMA與LMA相同,也在ROM;而data段和bss段存放著局部變量、堆棧、未初始化的全局變量等,不但需要讀取,而且在程序運行過程中還需改動,所以將其VMA設置在芯片內部的SRAM。這段數據從LMA到VMA數據的搬運將在Stage1中完成。

3.2.2 Bootloader的stage1

Stage1是Bootloader程序運行起來后的第一級,主要運行一些依賴于CK?Core CPU體系結構的代碼,并通過匯編指令實現。在這一部分里主要完成了以下工作:

(1)芯片自檢。包括芯片是否空閑等狀態的自檢,若自檢通過則繼續向下執行,否則繼續等待并自檢。

(2)關鍵值判斷。通過關鍵值來判斷程序PC接下來的運行路徑。

關鍵值寫在芯片eFLASH的固定位置上,決定著程序執行的三種路徑:

①繼續執行ROM里的Bootloader程序;

②打開Jtag,跳轉到eFLASH去執行下載的COS,便于下載COS并進行調試,適用于實驗室階段;

③關閉Jtag,跳轉到eFLASH去執行下載的COS,這樣可以保證COS的安全性,適用于產品生產出廠階段。

(3)定義異常向量表;

(4)初始化處理器狀態寄存器(PSR);

(5)初始化向量基址寄存器(VBR);

(6)初始化堆棧指針;

(7)初始化內存保護區;

(8)將代碼段拷貝至片內SRAM;

(9)將bss段清零;

(10)跳轉到Stage2的C入口點。

3.2.3 Bootloader的Stage2

Stage2使用C語言實現,針對該定制安全芯片的各功能模塊及I/O端口進行軟件開發,主要完成系統的驅動層、應用及協議層的功能。這一階段的任務主要包括:

(1)設置中斷控制器,完成系統中斷和異常的初始化;

(2)初始化eFLASH控制器,為eFLASH的讀/寫和擦除操作做好準備;

(3)初始化PLL并修改時鐘頻率,將系統帶入一個合適的工作頻率;

(4)初始化UART,USB,SSPI(高速SPI)和USB端口,并完成相應中斷的注冊;

(5)等待APDU命令響應:這里先要開發APDU命令的解析函數及響應函數。

Stage2的主要流程均在main()函數里實現,下面介紹了main()函數的軟件實現流程,如圖5所示。

值得注意的是,在Stage2的實現過程中,寫FLASH等耗時的操作均在主程序的while循環里完成,通訊過程中只通過置標志變量來通知上層程序,這樣可以保持I/O接口通信實時性,并進一步提高Bootloader的執行效率。

4 Bootloader的功能測試及應用

4.1 Bootloader的功能測試

Bootloader除系統初始化的功能外,更重要的任務是提供適用于實際應用的其他擴展功能。本文介紹的Bootloader共支持6種基本應用功能:讀SRAM、寫SRAM、讀eFLASH、寫eFLASH、頁擦除eFLASH和程序PC跳轉。對本安全芯片的四種I/O接口(USB、UART、SSPI和SPI),Bootloader均實現了對六項應用功能的支持。下文論述了對各I/O口的功能的實現及測試情況。

4.1.1 USB接口測試

Bootloader中的USB底層驅動根據SCSI協議進行通信[9]。Bootloader將安全芯片虛擬為一個USB大容量存儲設備,并依據Bulk?Only傳輸規范來實現數據/命令/狀態的傳輸。Bulk?Only傳輸規范使用控制端點清除Bulk端點的STALL狀態,并發送此規范定義的兩個塊存儲類請求(Reset請求和Get Max LUN請求)[10]。而數據/命令/狀態的傳輸則僅僅使用Bulk端點。圖6是數據/命令/狀態在USB總線上的傳輸流程圖。

為測試Bootloader中USB接口的功能實現,開發了PC端測試軟件BootTool,該軟件在Visual Studio 2005集成開發環境下使用Visual C++開發完成,調用了Windows中的SCSI底層驅動完成與設備的通信。BootTool的實現界面如圖7所示,成功完成了對Bootloader六項應用功能的測試。

4.1.2 UART接口測試

Bootloader中,UART六項應用功能測試也是通過BootTool來完成。BootTool的串口通信部分主要通過調用CSerialPort類來實現,該類的工作流程可以簡單概括如下:接收數據時,首先設置串口參數(波特率、數據位、停止位、校驗位),然后開啟串行端口監測工作線程,串行端口監測工作線程監測到串行端口接收到的數據、流控制事件或其他串行端口事件后,就以消息方式通知主程序,觸發消息處理函數來進行數據處理。發送數據時則直接向串行端口發送字符。

4.1.3 SSPI接口測試

高速SPI(Super Serial Peripheral Interface,SSPI)是一種新型的I/O接口。SSPI接口由SSPI主控和SSPI從設備組成,如圖8所示。SSPI主控負責SSPI接口的配置并發起命令和數據傳輸,SSPI從設備負責響應命令并完成數據傳輸。SSPI主控和SSPI從設備之間有4根數據線,每個clock可以傳輸4 b的數據,提高了數據傳輸速率。

SSPI接口的測試要采用專用的SD控制芯片及SD控制板。安全芯片運行Bootloader充當SSPI從設備。進行測試時,PC端運行專用腳本程序,通過SD控制板向SD控制芯片發送APDU命令,SD控制芯片再通過其內部的firmware將命令轉發給安全芯片的Bootloader,并負責接收和回送其返回的Response,最終通過Response來確定是否測試通過。

4.1.4 SPI接口測試

SPI接口的測試采用兩塊安全芯片的開發板對接來測試。其中一塊設置為SPI Host模式,另一塊運行Bootloader,充當SPI Slave。通過判斷SPI Slave的響應是否正確來決定是否通過各應用功能測試。

4.2 Bootloader的應用

Bootloader的主要應用就是COS的下載,根據是否完成COS下載及是否修改關鍵值,可以將芯片分為三種工作狀態:Boot狀態、調試狀態和出廠狀態。三種狀態的轉換圖如圖9所示。

為配合芯片的實際應用,我們根據安全芯片的Bootloader開發了COS下載工具WorkshopTools,該工具在Visual Studio 2010集成開發環境下用Visual C++實現,如圖10所示。經測試,通過該工具可實現與安全芯片Bootloader的通信,并成功完成了安全芯片COS的下載及工作狀態的修改,從而使安全芯片可以根據實際需要工作在各種狀態。

使用WorkshopTools為基于CK?Core的安全芯片下載COS的過程如圖11所示。

5 結 語

Bootloader的設計與實現是一個非常復雜的過程。嵌入式系統中,完善的Bootloder能夠大大增強系統的穩定性,提高系統的實時性。本文設計的Bootloader具有多接口和多功能的特點,它結合特定安全芯片及其CK?Core CPU的結構和功能特點,成功實現了該嵌入式系統的軟硬件初始化、命令解析及發送等引導裝載功能,并支持多種I /O接口下載COS,為基于該芯片的多種安全加密設備開發奠定了基礎。因此,本文所詳細論述的Bootloader設計與實現過程,對設計和開發其他類型的嵌入式系統Bootloader提供了較有價值的參考。

參考文獻

[1] 潘赟.CK?Core嵌入式系統開發教程[M].北京:科學出版社,2011.

[2] 楊鑄,唐攀.嵌入式底層軟件開發[M].北京:北京航空航天大學出版社,2011.

[3] Kamal.嵌入式系統:體系結構、編程與設計[M].北京:清華大學出版社,2010.

[4] 張勇,郭熹崴,潘琢金.淺析Blob在S3C44B0上的移植[J].沈陽航空工業學院學報,2006(2):38?39.

[5] DING Xu?chang, LIAO Yong?qing, FU Jian?guo, et al. Analysis of bootloader and transplantation of U?Boot based on S5PC100 processor [C]// 2011 International Conference on Intelligent Human?Machine Systems and Cybernetics. Washington, DC, USA: IEEE Computer Society, 2011, 1: 61?64.

[6] 胡豐凱,張林,鄒韜平.vivi系統引導程序的網絡功能擴展[J]. 單片機與嵌入式系統應用,2006(6):57?59.

[7] ZHANG Zeng?ping, LI Shu?hua. The design and implementation of the embedded system based on ARM7 [J]. Advanced Materials Research, 2012, 433: 5607?5610.

[8] ZHANG Lei. GNU?ld鏈接腳本淺析[EB/OL]. [2005?11?03]. http://wenku.baidu.com/view/01d4e9c758 f5f61fb736663b.html.

[9] American National Standards Institute. Information technology: SCSI block commands–2 (SBC?2) [S]. New York, USA: American National Standards Institute, 2002.

[10] USB Implementers Forum. Universal serial bus mass storage class: bulk?only transport [S]. [S.l.]: USB Implementers Forum, 1999.

主站蜘蛛池模板: 波多野结衣第一页| 欧美精品不卡| 免费国产在线精品一区| 亚洲国产日韩一区| 国产成人1024精品下载| 亚洲第一中文字幕| 精品少妇人妻一区二区| 99视频全部免费| 在线观看亚洲精品福利片| 中文字幕无码电影| 久久精品无码中文字幕| 亚洲美女高潮久久久久久久| 91热爆在线| 一区二区三区高清视频国产女人| 成人一级免费视频| 欧美精品一二三区| 国产精品对白刺激| 熟女成人国产精品视频| 国产麻豆精品在线观看| 色天天综合久久久久综合片| 欧美另类精品一区二区三区| 亚洲一级毛片免费观看| 亚洲久悠悠色悠在线播放| 71pao成人国产永久免费视频| 国产精品丝袜视频| 精品撒尿视频一区二区三区| 久久亚洲精少妇毛片午夜无码| 亚洲精品不卡午夜精品| 欧美一级特黄aaaaaa在线看片| 亚洲香蕉伊综合在人在线| 中文字幕永久在线看| 色综合成人| 幺女国产一级毛片| 人妻21p大胆| 亚洲中文无码av永久伊人| 国产欧美专区在线观看| 美美女高清毛片视频免费观看| 在线视频一区二区三区不卡| 东京热高清无码精品| 成人久久精品一区二区三区| 久久综合色天堂av| 亚洲视频在线网| 日韩精品一区二区三区免费| 18禁高潮出水呻吟娇喘蜜芽| 亚洲欧美不卡| 国产在线无码av完整版在线观看| 中文字幕无线码一区| 国产爽妇精品| 韩国自拍偷自拍亚洲精品| 99人体免费视频| 日本少妇又色又爽又高潮| 免费看a级毛片| 国产免费黄| 1769国产精品视频免费观看| 老汉色老汉首页a亚洲| 香港一级毛片免费看| 无码区日韩专区免费系列| 午夜性刺激在线观看免费| 国产亚洲视频播放9000| igao国产精品| 黄色片中文字幕| 久久综合干| 亚洲精品手机在线| 成人一区专区在线观看| 有专无码视频| 99精品一区二区免费视频| 国产成人精品无码一区二| 亚洲Av综合日韩精品久久久| 国产一级精品毛片基地| 亚洲午夜福利精品无码| 久久久久久久蜜桃| 亚洲国产成人精品无码区性色| 在线无码av一区二区三区| 日韩黄色精品| 欧美高清三区| 国产免费人成视频网| 伊人久久大香线蕉影院| 国产一区二区免费播放| 成·人免费午夜无码视频在线观看| 在线色综合| 国产一二三区视频| 狼友av永久网站免费观看|