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

網絡安全嵌入應用中的BOOTLOADER*

2016-11-12 07:32:01龔昌平譙通旭張福健
通信技術 2016年10期
關鍵詞:嵌入式網絡安全程序

龔昌平,譙通旭,張福健

(中國電子科技集團公司第三十研究所,四川 成都 610041)

網絡安全嵌入應用中的BOOTLOADER*

龔昌平,譙通旭,張福健

(中國電子科技集團公司第三十研究所,四川 成都 610041)

Bootloader是網絡安全嵌入軟件開發實現的第一步,也是最重要的一步,直接影響應用程序在設備加電后是否能夠正常加載運行,也影響設備從加電到正常運行間的時間,影響用戶的體驗。因此,討論Bootloader的基本屬性,并通過一個簡單的實例詳細描述引導加載過程,同時就如何滿足現場升級、在應用編程(IAP)等方面的應用需求進行闡述,以助于網絡安全嵌入式系統開發人員尤其是初學者深刻理解Bootloader。

網絡安全;嵌入式應用;引導加載器;現場升級;IAP

0 引 言

所謂Bootloader,即引導加載器,是網絡安全嵌入式系統中最先被運行的一小段程序。通過這小段程序初始化硬件設備,建立內存空間映射圖,從而將系統的軟硬件環境帶到一個合適狀態,以便為最終調用應用程序準備好軟硬件環境。

常言道,“萬事開頭難”。編寫網絡安全嵌入式應用軟件也是如此。一些網絡安全嵌入式應用開發者,尤其是初學者,常常對其中的Bootloader感到困惑不解,更不用說如何編寫。因為網絡安全嵌入系統的Bootloader涉及底層硬件操作細節,所以編寫一個合適的Bootloader是一項具有挑戰性的任務。本文將以TI公司的DSP芯片為例,介紹編寫Bootloader的一些實現細節。

1 Bootloader的基本屬性

在具體闡述Bootloader的基本屬性前,先了解系統的引導過程[1-2]。以TI公司的C6000 DSP的ROM Boot方式為例,如圖1所示,DSP的引導過程如下:(1)上電復位后,CPU暫停運轉,其他部分則開始工作,此時EMIF的CE1空間自動配置為8/16/32位異步存儲器接口,并且CE1空間讀/寫時序自動配置為最大,然后通過DMA(或EDMA)方式將外部CE1空間的數據讀入到內部程序空間地址0處,讀入數據的多少因芯片而異(C641x,C671x讀取1 kB,C620x讀取64 kB)。(2)CPU開始運轉,并執行內部程序空間地址0處的程序,先將外部應用程序數據讀入到DSP程序空間相應地址,然后跳轉到應用程序運行。

圖1 TI DSP引導過程

第一步由芯片自動完成,第二步由用戶完成。用戶編寫相應的C程序(C620x,容量64 kB,可以用C實現)或匯編程序(C641x,C671x,容量1 kB,只能用匯編實現),實現二級引導,即應用程序的裝載。

第二步通常也就是Bootloader要實現的目標。

在一個典型的網絡安全嵌入式開發環境中,目標硬件通過一個硬件仿真器與主機連接[3]。通常,還會有類似TI的CCS調試器,用于將程序加載到目標存儲器并執行。用戶還可根據需要設置斷點,以及其他諸如跟蹤、剖析等事務。這些都使得開發者很容易快速實現和調試新的應用案例。

如果一個應用由C實現,并在非嵌入式開發環境中運行,程序看起來像是從主函數main開始執行,程序的加載和初始化過程則隱藏在表象背后。可見,將把用戶的注意力從底層的系統寄存器初始化、堆棧的初始化、數據的初始化轉移到上層應用程序代碼,向用戶提供一個友好的用戶界面,將僅僅是調試器而非開發者的事情。

而在一個網絡安全嵌入應用開發環境中,程序通常從C環境的程序入口點開始執行。程序入口點,TI的文檔通常稱為c_int00,實現堆棧、系統寄存器和數據存儲器的初始化后,跳轉到main[4]。由于與特定處理器相關的復位入口點(復位矢量)將觸發c_int00,故開發者通常會對c_int00作特殊處理。

Bootloader形式多樣,圖2展示了一個典型的網絡安全嵌入式C應用中的Bootloader。在這個例子中,RESET矢量跳轉到C環境入口函數c_int00,并在此進行堆棧和系統寄存器的初始化。此外,在運行前需初始化的C變量也從.cinit段復制到.bss段相應的位置[5]。最后,調用main()函數。在這個簡單的例子中,Bootloader包括RESET復位矢量和c_int00,并假定Bootloader和應用程序都是從同一個非易失存儲器開始執行。在一個稍微復雜的系統中,Bootloader在調用main()前或許還會將應用程序復制到快速易失存儲器。

圖2 一個簡單的Bootloader

更復雜的Bootloader或許還會實現諸如系統診斷、調試功能、現場更新等。其中,系統診斷包括存儲器測試、外設測試、程序完整性校驗等。Bootloader也可能會包含簡單的調試功能模塊,它通常集成在用戶監控程序模塊中。Bootloader還可能會處理現場更新程序、從外部存儲器下載應用程序等。如果擔心自己的產品被逆向工程,為保護自己的知識產權,用戶還可以在Bootloader中集成加密、解密代碼的功能。為了節約寶貴的存儲器資源,也可以選擇在Bootloader中進行資源壓縮、解壓縮。甚至為了以后方便資源管理,還可以集成文件系統。

2 應用實例

讓我們來看看一個包含上述所有基本屬性的Bootloader。這個例子同樣也會將應用程序從慢速非易失性存儲器復制到快速易失性存儲器,以加快應用程序的執行速度。

這里以TI的DSP為例,目標處理器是TI的TMS320C6205 DSP。它使用分離的程序和數據存儲器,即典型的哈佛結構[6-8]。在這個簡單的系統中,外部存儲器是位于CE1空間的慢速FLASH,內含Bootloader和應用程序的拷貝。引導方式選擇C6205的ROM Boot方式,存儲器映射選擇Memory Map 1,即地址0處于片內空間,這也是網絡安全嵌入式應用中的首選應用方式。實際上,TI在后續C6000芯片的設計中,完全摒棄了存儲器映射方式的選擇,直接將地址0x00000000定位于片內(例如C6416)。

應用程序代碼用C語言編寫。此例中,修改TI C6205 DSP的庫函數c_int00,以此作為Bootloader,并完成以下功能:初始化堆棧;設置寄存器;從.cinit中初始化數據,將應用程序從慢速的外部FLASH復制到快速的程序RAM(片內或片外),然后跳轉到main()函數[9]。

本例子的鏈接命令文件如下[10]:

開始兩行分別定義堆、棧空間的大小為16 kB、32 kB。接下來,MEMORY偽指令分配存儲空間。這里,把片內程序空間(共64 kB)分為4個部分:IPRAM_VECT(中斷矢量),IPRAM_BOOT(RTS庫中的boot代碼),IPRAM_RTSL(本程序中用到的RTS庫代碼)和IPRAM(其余運行于片內的程序);把CE1空間分為FLASH0~FLASH5六部分:片內程序、保留、片外程序、.cinit段、.const段、.switch段;接下來,SRAM_P則定義了片外程序的運行空間,而IDRAM則是64 k字節的片內數據空間,所有的全局變量、局部變量、常數等均在此空間內。偽指令SECTIONS將程序中用到的各個段分配至MEMORY定義的相應區域內,從而完成所有段的映射。開始于CE1空間(FLASH0)的首0x200字節存放的是中斷矢量表,上電時將被搬移至IPRAM_VECT區域。FLASH0的其余部分以及FLASH1~FLASH5則包含c_int00和C程序的拷貝,上電時將被搬移到IPRAM_BOOT、IPRAM_RTSL、IPRAM、SRAM_P,隨后應用程序開始運行。最后,IDRAM中包含堆棧和C變量,存于C6000的片內RAM中。需要注意的是,這些變量和堆棧也是由c_int00負責初始化的。

在鏈接命令文件中,應特別注意LOAD和RUN的使用。當編譯C或匯編源文件時,生成的目標文件總是可重定位的。因此,在鏈接前是不知道絕對地址的[11-14]。一個目標文件可以臨時加載到存儲器的任何區域,但在運行前必須拷貝到RUN運行時的絕對地址處,否則程序的運行不可預知。LOAD

用于說明程序存儲在哪,但并不說明程序的運行地址。RUN

則說明程序的運行地址,也被鏈接器用于地址解析。如果程序的加載地址和運行地址不同,程序在運行前應從加載地址拷貝到運行地址。通常程序的運行地址和加載地址相同,但在這個特定的例子中,由于應用程序在運行前必須從慢速存儲器搬移到快速存儲器,因此這兩個地址必定不同,而程序拷貝工作由Bootloader來完成。

對于中斷矢量表,復位矢量只是簡單跳轉到c_int00入口函數,不處理其他中斷:

.sect “.vectors”

.ref _c_int00

RESET:

mvkl _c_int00,b0

mvkh _c_int00,b0

b b0

mvc PCE1,b0

mvc b0,ISTP

nop 3

nop

nop

這個修改后的c_int00函數必須首先初始化堆棧和需要初始化的DSP寄存器,然后把應用程序從FLASH拷貝到片外程序RAM,使用.cinit表初始化數據項,最后調用main()函數。

注意,應盡量把對速度要求較高的程序段放在片內,同時把堆棧、變量也放在片內,以加快程序的運行速度。

在編寫鏈接命令文件時,要注意程序和數據的地址空間安排。通常,數據區域不能存放程序,反之亦然。正如本例的鏈接命令文件,C6205的數據空間和程序空間并不重疊。

3 思路拓展

幾乎TI所有的DSP都內置有基于ROM的Bootloader,用于將程序代碼從片外拷貝到DSP的程序空間。代碼加載接口靈活多樣,可使用McBSP、SPI、HPI、I/O、GPIO和并行存儲器接口等[15]。使用GPIO非常方便、通用、靈活,但缺點是速度較慢且獨占CPU。HPI和并行存儲器接口的速度較快,但靈活性稍差。激活Bootloader的機制因器件而異,但所有的器件通常都會有“檢測外部處理器引腳的數字狀態”“外部并行數據接口”“I/O總線上某個特殊數字序列”等常規機制。

在大多數網絡安全嵌入式環境中,Bootloader必須具備魯棒性,在某些情況下甚至只許成功,不能失敗。一個好的設計思路就是像圖3那樣,將Bootloader分成幾個獨立的扇區[10]。由于可塊引導FLASH的每個扇區能夠單獨鎖定,因此非常適合這種場合。

引導扇區包含中斷矢量表和引導代碼,出廠時被編程到非易失性存儲器。加載器分為兩個扇區:主加載器扇區和二級加載器扇區。每個扇區均有CRC校驗值。出廠時,設備默認配置為主加載器。

圖3 多級引導扇區(魯棒性)

二級加載器扇區出廠時為保留空間,無初始化數據。如果設備需要新的加載器(即加載程序),將由主加載器寫到二級加載器扇區。應用程序扇區包含應用程序代碼,將由主加載器或二級加載器現場加載至非易失性存儲空間(即現場更新)。

系統復位時,引導扇區進行冗余檢測、硬件特定的系統初始化。引導扇區基于CRC完整性校驗來確定激活哪個加載器,每個加載器扇區都存儲有CRC校驗值。首先檢驗主加載扇區的完整性校驗,若校驗通過,則使用主加載扇區;若校驗未通過,轉為校驗二級加載扇區的校驗值,若校驗通過,使用二級加載扇區。然后,選擇的加載器扇區負責應用程序的完整性校驗,將應用程序加載到易失性存儲器,并跳轉到應用程序的入口點。

軟件是否可在線更新成為衡量設備升級靈活性的重要指標。應用編程(IAP)是指當固件駐留在系統中時,可將固件寫至非易失性存儲器。常用的方法是,首先加載設備加載程序到非易失性目標存儲器,隨后就由設備加載程序負責下載外部應用程序,并將其編程到目標系統的非易失存儲器。TI的許多DSP都內置有基于ROM的Bootloader,利用這個內置的Bootloader將很容易實現上述目標。通常的思路如下:(1)完成系統初始化;(2)選擇檢測程序更新條件。有四種方式對程序更新進行檢測:

方式1:設置定時器。時限未到,可以進行程序更新;時限到,則檢查應用程序標志,如果有應用程序且校驗和正確,則跳轉到應用程序執行;否則重置定時器,開始新一輪檢測。(前提條件:有硬件定時器)

方式2:檢測外部按鍵是否按下。如果按鍵按下,執行程序更新;否則,檢查應用程序標志,如果有應用程序且校驗和正確,則跳轉到應用程序執行,否則重新檢測按鍵,開始新一輪檢測。(前提條件:有按鍵)

方式3:方式1和方式2的綜合,設置定時器。時限未到,循環檢測按鍵是否有效,并進行程序更新;時限到,則檢查應用程序標志,如果有應用程序且校驗和正確,則跳轉到應用程序執行;否則重置定時器,開始新一輪檢測。(前提條件:按鍵+定時器)

方式4:在主循環中設置一個變量進行計數。每循環一次變量加1,計數值未到,可進行程序更新;計數值到,則檢查應用程序標志,如果有應用程序且校驗和正確,則跳轉到應用程序執行;否則計數值清0,開始新一輪檢測。

上述過程結束后,如果有應用程序,Bootloader將把程序的控制權交給應用程序。考慮到片內RAM資源有限、用戶習慣且程序編寫方便,通常我們把Bootloader和應用程序的入口地址都安排在地址0處。因此,在任意時刻,有且僅有一個程序處于執行狀態。

Bootloader如何將應用程序搬移到地址0并運行?需要搬移全部應用程序嗎?以TI的C6000芯片為例,先使用芯片內置的DMA/EDMA完成固定長度的程序代碼搬移(C641x,C671x:1KB,C620x:64KB-Len),隨后由剛才搬移的程序將余下的程序代碼搬移至合適地址。切記,完成DMA/EDMA程序搬移的這段程序(假設長度為Len)的地址空間,不能與被其搬移的程序地址空間重疊,否則程序的執行行為不可預知。

基于DSP的Bootloader遇到的另一個普遍問題便是常數處理。由于C編譯器對常數的處理機制和DSP的架構原因,存儲在應用程序代碼空間中的常數在訪問前必須拷貝到數據空間。通過將.const段的加載地址定義在非易失程序存儲區,運行地址定義在易失數據存儲區即可達到這個目的。

在一些網絡安全嵌入式系統中,非易失存儲器的容量可能比易失存儲器的容量小得多。針對此種情況,可在Bootloader中集成信源編碼(即壓縮、解壓縮):代碼先經壓縮,然后存放到FLASH上;使用前解壓縮FLASH上的代碼,再加載到程序RAM空間并運行。此外,如果用戶希望保護自己的知識產權,防止競爭對手COPY技術成果,在Bootloader中可增加加密、解密功能。

4 結 語

本文概要介紹Bootloader的方方面面,并以TMS320C6205為例,對怎樣為網絡安全嵌入式應用寫一個Bootloader進行詳細闡述,希望對網絡安全嵌入式系統開發人員尤其是初學者有所幫助。

[1] TI.TMS320C620x/C670x DSP Boot Modes and Configuration Reference Guide[J].Application Note,2003,1(01):1-23.

[2] TI.TMS320C6414,TMS320C6415,TMS320C6416 Fixed-point Digital Signal Processors[J].Application Note,2005,1(01):75.

[3] TI.TMS320C6000 Assembly Language Tools User’s Guide[J].Application Note,2006,1(01):61-125.

[4] TI.TMS320C6000 Optimizing C Compiler User’s Guide[J].Application Note,2011,1(01):183-243.

[5] TI.TMS320C6000 CPU and Instruction Set Reference Guide[J].Application Note,2000,1(01):644-670.

[6] TI.TMS320C6000 Peripherals Reference Guide [J]. Application Note,2006,1(01):1-11.

[7] TI.TMS320C62x/C67x Programmer’s Guide [J]. Application Note,2011,1(01):421-432.

[8] TI.TMS320C6000 DSP Enhanced Direct Memory Access(EDMA) Controller Reference Guide[J].Application Note,2005,1(01):117-163.

[9] TI.TMS320C620x/C670x DSP Program and Data Memory Controller/Direct Memory Access (DMA) Controller Reference Guide[J].Application Note,2004,1(01):11-37.

[10] Stanford Hudson.Embedded Apps Need Boot-loaders Too[J].Embedded Edge,2002,3(02):20-26.

[11] TI.TMS320C54x DSP Reference Set Volume 1:CPU and Peripherals[J].Application Note,1999,1(01):60-89.

[12] TI.TMS320C54x DSP Reference Set,Volume 2:Mnemonic Instruction[J].Application Note,1998,2(01):45-116.

[13] TI.TMS320C54x DSP Reference Set Volume 3:Algebraic Instruction Set[J].Application Note,1998,3(01):332-344.

[14] TI.TMS320C54x DSP Reference Set Volume 4: Applications Guide[J].Application Note,1996,4(01):165-185.

[15] TI.TMS320C54x DSP Reference Set Volume 5:Enhanced Peripherals[J].Application Note,1999,5(01):125-181.

龔昌平(1972—),男,碩士,工程師,主要研究方向為信息安全與通信保密;

譙通旭(1963—),男,學士,高級工程師,主要研究方向為密碼學;

張福健(1989—),男,碩士,工程師,主要研究方向為信息安全與通信保密。

Bootloader in Embedded Application of Network Security

GONG Chang-ping, QIAO Tong-xu, ZHANG Fu-jian
(No.30 Institute of China Electronics Technology Group Corporation, Chengdu Sichuan 610041, China)

The design and implementation of Bootloader is the first and most important step, in a embedded environment of network security, this directly influences program loading and running of the devices after power-on, and also affects boot time of the devices and thus the user's experiences. This article discusses some basic properties of Bootloader, describes in detail the Bootloader process via a simple example, and makes an elaborate interpretation of how to satisfy such application demands as field upgrade and IAP(In-Application Programming). All this could help the developer of network security embedded system, especially the beginner, deeply understand Bootloader.

network security; embedded application; Bootloader; field upgrade; IAP

TN918.1

A

1002-0802(2016)-10-1392-05

10.3969/j.issn.1002-0802.2016.10.024

2016-06-19;

2016-09-24

data:2016-06-19;Revised data:2016-09-24

猜你喜歡
嵌入式網絡安全程序
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
網絡安全
網絡安全人才培養應“實戰化”
上網時如何注意網絡安全?
搭建基于Qt的嵌入式開發平臺
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
我國擬制定網絡安全法
聲屏世界(2015年7期)2015-02-28 15:20:13
主站蜘蛛池模板: 四虎免费视频网站| 天堂av高清一区二区三区| 谁有在线观看日韩亚洲最新视频| 国产视频你懂得| 在线人成精品免费视频| 成AV人片一区二区三区久久| 免费观看成人久久网免费观看| 人妻熟妇日韩AV在线播放| 国产一区免费在线观看| 久草中文网| 国产精品林美惠子在线观看| 另类重口100页在线播放| 欧美激情伊人| 成人在线视频一区| 91亚洲精品第一| 自偷自拍三级全三级视频| 91久久夜色精品| 国产麻豆va精品视频| 久久semm亚洲国产| 国内精品自在自线视频香蕉| 欧美伦理一区| 亚洲91精品视频| 91精品国产情侣高潮露脸| 97久久超碰极品视觉盛宴| 午夜国产精品视频| 国产女人综合久久精品视| 欧美色图久久| 亚洲国产精品国自产拍A| 九色免费视频| 一本久道久久综合多人| 扒开粉嫩的小缝隙喷白浆视频| 青青青视频91在线 | 91久久偷偷做嫩草影院电| 久久毛片基地| 喷潮白浆直流在线播放| 欧美成人精品一级在线观看| 国产素人在线| 青青草原偷拍视频| 黄网站欧美内射| 在线观看视频99| 亚洲精品人成网线在线 | 欧美日韩免费观看| 国产成人综合亚洲欧洲色就色| 亚洲国产成人在线| 强奷白丝美女在线观看| 亚洲精品大秀视频| 国产精品欧美在线观看| 国产男人天堂| 色哟哟国产精品一区二区| 老色鬼久久亚洲AV综合| 国产免费自拍视频| 日韩激情成人| 亚洲无码视频一区二区三区| 亚洲第一精品福利| 午夜啪啪网| 中国国语毛片免费观看视频| 久久精品波多野结衣| 无码在线激情片| 亚洲性影院| 久久精品91麻豆| 亚洲国产中文综合专区在| 亚洲天堂日韩在线| 91精品国产91久无码网站| 精品一区二区三区视频免费观看| 国产高潮流白浆视频| 国产欧美精品一区aⅴ影院| 日本成人精品视频| 色天堂无毒不卡| 亚洲一区二区三区国产精品| 日韩免费视频播播| 台湾AV国片精品女同性| 欧美精品1区2区| 国产剧情一区二区| 天天综合网色| 真实国产乱子伦视频| 国产激爽大片高清在线观看| 免费无码又爽又刺激高| a毛片免费观看| 美女国内精品自产拍在线播放| 国产成本人片免费a∨短片| 国产成人91精品免费网址在线 | 欧美日韩在线成人|