支持多種閃存加密存儲(chǔ)的啟動(dòng)固件的執(zhí)行方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及固件啟動(dòng)技術(shù)領(lǐng)域,特別涉及一種支持多種閃存加密存儲(chǔ)的啟動(dòng)固件 的執(zhí)行方法。
【背景技術(shù)】
[0002] 隨著嵌入式系統(tǒng)的日益發(fā)展,以SOC為主芯片多種閃存為存儲(chǔ)設(shè)備的各種產(chǎn)品得 到了越來(lái)越廣泛的應(yīng)用。其中,使用SOC和閃存的嵌入式產(chǎn)品的軟件都會(huì)包含一個(gè)固件,即 SOC啟動(dòng)固件,負(fù)責(zé)軟件的啟動(dòng)。
[0003] 根據(jù)存放位置的不同,SOC啟動(dòng)固件可以分為兩類。第一類是將SOC啟動(dòng)固件保 存至外部閃存中,它的特點(diǎn)是固件屬于軟件部分,在制作系統(tǒng)的時(shí)候產(chǎn)生并可以通過(guò)特殊 方式進(jìn)行修改,多數(shù)嵌入式產(chǎn)品使用這種方式的啟動(dòng)固件。第二類是將SOC啟動(dòng)固件固化 至硬件SOC中,它的特點(diǎn)是固件屬于硬件部分,在芯片生產(chǎn)的時(shí)候產(chǎn)生并且無(wú)法進(jìn)行任何 修改。
[0004] 其中,使用第二類啟動(dòng)固件的SOC-般使用以下兩個(gè)主要啟動(dòng)過(guò)程完成啟動(dòng)代碼 的裝載:第一步:參照?qǐng)D1所示,由SOC硬件通過(guò)特定方法執(zhí)行啟動(dòng)固件;第二步:參照?qǐng)D2 所示,由啟動(dòng)固件加載閃存中存儲(chǔ)的系統(tǒng)啟動(dòng)代碼。
[0005] 然而,通常情況下,第二類SOC啟動(dòng)固件所需的啟動(dòng)代碼是存儲(chǔ)在Nor閃存或Nand 閃存中。但是,由于目前市場(chǎng)上的閃存種類繁多,并且隨著技術(shù)不斷發(fā)展大容量閃存新產(chǎn)品 也不斷出現(xiàn),在這種情況下,由于第二類啟動(dòng)固件是固化到硬件中的不能修改,導(dǎo)致其在設(shè) 計(jì)初就需要包含智能識(shí)別閃存新產(chǎn)品的功能。另外,對(duì)于使用第二類SOC啟動(dòng)固件的對(duì)特 種設(shè)備,對(duì)在第二步過(guò)程中使用的閃存中的數(shù)據(jù)內(nèi)容進(jìn)行加密并在啟動(dòng)過(guò)程中實(shí)現(xiàn)可執(zhí)行 性檢測(cè),這是必不可少的重要的技術(shù)環(huán)節(jié)。因此,針對(duì)不同廠商的多種閃存的智能識(shí)別和在 第二步過(guò)程中啟動(dòng)代碼的加密存儲(chǔ),有待改善。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明旨在至少在一定程度上解決上述相關(guān)技術(shù)中的技術(shù)問(wèn)題之一。
[0007] 為此,本發(fā)明的目的在于提出一種支持多種閃存加密存儲(chǔ)的啟動(dòng)固件的執(zhí)行方 法,該方法實(shí)現(xiàn)簡(jiǎn)單,消耗低。
[0008] 為達(dá)到上述目的,本發(fā)明實(shí)施例提出了一種支持多種閃存加密存儲(chǔ)的啟動(dòng)固件的 執(zhí)行方法,包括以下步驟:對(duì)閃存設(shè)定硬件基本操作功能參數(shù);調(diào)整設(shè)定存儲(chǔ)訪問(wèn)預(yù)設(shè)參 數(shù);根據(jù)硬件連接讀取所述閃存的硬件ID ;根據(jù)所述硬件連接及所述閃存的硬件ID判斷是 否為Nand閃存;如果是Nand閃存,則讀取所述閃存的ONFI協(xié)議參數(shù)及所述閃存中的加密 的參數(shù)信息;如果不是Nand閃存,則讀取所述閃存中的加密的參數(shù)信息;對(duì)讀取的參數(shù)信 息進(jìn)行解密,并對(duì)解密后的數(shù)據(jù)進(jìn)行驗(yàn)證;根據(jù)所述硬件ID、所述閃存的ONFI協(xié)議參數(shù)、所 述解密后的數(shù)據(jù)和驗(yàn)證結(jié)果判斷所述存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)情況下閃存通訊和存儲(chǔ)訪問(wèn)的正 確性;如果正確,則判斷解密后的數(shù)據(jù)為所述存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)設(shè)定之后的可靠數(shù)據(jù)信息, 所述存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)為可靠硬件操作參數(shù);以及對(duì)于保存在閃存中加密的啟動(dòng)代碼進(jìn)行 解密并加載。
[0009] 根據(jù)本發(fā)明實(shí)施例提出的支持多種閃存加密存儲(chǔ)的啟動(dòng)固件的執(zhí)行方法,通過(guò)閃 存的硬件判斷是否為Nand閃存,從而讀取閃存的ONFI協(xié)議參數(shù)及閃存中的加密的參數(shù)信 息或只讀取閃存中的加密的參數(shù)信息,并且對(duì)讀取的參數(shù)信息進(jìn)行解密和驗(yàn)證,以根據(jù)硬 件ID、ONFI協(xié)議參數(shù),解密后的數(shù)據(jù)和驗(yàn)證結(jié)果判斷閃存通訊和存儲(chǔ)訪問(wèn)的正確性,從而 判斷解密后的數(shù)據(jù)是否為存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)設(shè)定之后的可靠數(shù)據(jù)和存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)是 否為可靠硬件參數(shù),以及對(duì)于加密的啟動(dòng)代碼進(jìn)行解密和加載,實(shí)現(xiàn)支持多種閃存與在閃 存上加密存儲(chǔ)的目的,具有實(shí)現(xiàn)過(guò)程簡(jiǎn)單,運(yùn)行時(shí)解密系統(tǒng)消耗低的特點(diǎn)。
[0010] 另外,根據(jù)本發(fā)明上述實(shí)施例的支持多種閃存加密存儲(chǔ)的啟動(dòng)固件的執(zhí)行方法還 可以具有如下附加的技術(shù)特征:
[0011] 進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,其中,對(duì)于Nor閃存,所述基本操作功能參 數(shù)包括實(shí)現(xiàn)硬件通訊和控制協(xié)議必要的控制器設(shè)置內(nèi)容;以及對(duì)于Nand閃存,除包含對(duì)硬 件控制器實(shí)現(xiàn)硬件通訊和控制協(xié)議必要的設(shè)置外,還對(duì)閃存協(xié)議要求的硬件時(shí)序參數(shù)進(jìn)行 缺省配置。
[0012] 進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,對(duì)于Nand閃存,所述存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)包 括地址長(zhǎng)度;對(duì)于Nor閃存,所述存儲(chǔ)訪問(wèn)預(yù)設(shè)參數(shù)包括數(shù)據(jù)總線寬度。
[0013] 進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述讀取所述閃存的硬件ID具體包括:根 據(jù)所述硬件連接向所述閃存發(fā)送0x90及0x9F命令對(duì)所述閃存的硬件ID進(jìn)行預(yù)讀。
[0014] 進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述參數(shù)信息包括閃存存儲(chǔ)屬性,容量信 息;還包括加密的啟動(dòng)代碼數(shù)據(jù)分段信息,該分段信息除包含數(shù)據(jù)讀取的段數(shù)據(jù)長(zhǎng)度外,還 包含一組包含隨機(jī)有限個(gè)數(shù)據(jù)段讀取關(guān)系的映射表,這個(gè)映射表數(shù)據(jù)將用于啟動(dòng)代碼數(shù)據(jù) 讀取,其中,所述參數(shù)信息長(zhǎng)度最后2字節(jié)為對(duì)整個(gè)參數(shù)信息進(jìn)行CRC32后的校驗(yàn)碼。
[0015] 進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述驗(yàn)證可以使用CRC32驗(yàn)證算法。
[0016] 進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述對(duì)于保存在閃存中加密的啟動(dòng)代碼進(jìn) 行解密并加載具體包括:讀取所述SOC內(nèi)置fuse上密碼子用于數(shù)據(jù)解密;讀取配置參數(shù)中 對(duì)閃存上的數(shù)據(jù)分段信息;讀取所述分段信息指定位置數(shù)據(jù),將數(shù)據(jù)保存在片內(nèi)高速緩存 中;使用AES算法和所述密碼子將所述數(shù)據(jù)解密至SOC內(nèi)置高速緩存中,并進(jìn)行校驗(yàn)。
[0017] 本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變 得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
【附圖說(shuō)明】
[0018] 本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變 得明顯和容易理解,其中:
[0019] 圖1為由SOC硬件通過(guò)特定方法執(zhí)行啟動(dòng)固件的過(guò)程示意圖;
[0020] 圖2為由啟動(dòng)固件加載閃存中存儲(chǔ)的系統(tǒng)啟動(dòng)代碼的過(guò)程示意圖;
[0021] 圖3為根據(jù)本發(fā)明實(shí)施例的支持多種閃存加密存儲(chǔ)的啟動(dòng)固件的執(zhí)行方法的流 程圖;
[0022] 圖4為根據(jù)本發(fā)明一個(gè)實(shí)施例的啟動(dòng)固件執(zhí)行過(guò)程的流程圖;
[0023] 圖5為根據(jù)本發(fā)明一個(gè)實(shí)施例的由啟動(dòng)固件加載閃存中存儲(chǔ)的系統(tǒng)啟動(dòng)代碼的 流程圖;
[0024] 圖6為根據(jù)本發(fā)明一個(gè)實(shí)施例的啟動(dòng)固件閃存屬性和參數(shù)探測(cè)過(guò)程的流程圖;以 及
[0025] 圖7為根據(jù)本發(fā)明一個(gè)實(shí)施例的啟動(dòng)固件讀取閃存中加密的啟動(dòng)代碼過(guò)程的流 程圖。
【具體實(shí)施方式】
[0026] 下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附 圖描述的實(shí)施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。
[0027] 此外,術(shù)語(yǔ)"第一"、"第二"僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性 或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有"第一"、"第二"的特征可以明示或 者隱含地包括一個(gè)或者更多個(gè)該特征。在本發(fā)明的描述中,"