一種引導程序的存儲方法、故障恢復方法及設備的制造方法
【技術領域】
[0001]本發(fā)明涉及嵌入式領域的引導程序管理技術,尤其涉及一種引導程序的存儲方法、故障恢復方法及設備。
【背景技術】
[0002]UBoot及BootLoader是用于多種嵌入式設備的中央處理器(Central ProcessingUnit, CPU)的引導程序,UBoot是BootLoader升級后的版本;UBoot不僅支持Linux系統(tǒng),而且支持VxWorks、NetBSD、LyxOS等嵌入式操作系統(tǒng)。UBoot可以支持的處理器包括:80X86、ARM、MIPS、XScale、PowerPC, UBoot的主要功能是初始化硬件設備,待將軟硬件運行環(huán)境設置好后,將操作系統(tǒng)內(nèi)核從存儲介質中載入內(nèi)存,最終跳轉到操作系統(tǒng)入口,將控制權移交給操作系統(tǒng)。
[0003]空中接口固件更新(Firmware Over The Air,F0TA)是終端設備的固件升級空中下載技術,指終端設備通過云端設備管理(Device Management, DM)及下載協(xié)議,將固件升級包通過互聯(lián)網(wǎng)下載到終端設備內(nèi)部;然后,由終端設備內(nèi)部的安裝程序進行自升級,從而實現(xiàn)軟件Bug的修復、新功能的擴展。
[0004]FOTA技術升級通常采用差分升級的方式,差分升級的思想是對比兩個軟件版本,根據(jù)差分算法計算出兩個軟件版本的差異部分,通過對存儲介質Flash塊中差異頁進行搬運、修改、擦除來完成固件升級,通過對文件進行隨機讀寫完成文件系統(tǒng)的升級。
[0005]發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有引導程序升級的技術方案至少存在以下缺陷:
[0006]I)現(xiàn)有技術中,若升級引導程序時出現(xiàn)掉電,下次啟動系統(tǒng)時會出現(xiàn)系統(tǒng)自舉問題。
[0007]2)現(xiàn)有技術中,引導程序中的第一階段代碼和第二階段代碼是合并在一起存儲于存儲介質中的,這里,通常將用于完成基本參數(shù)設置和加載第二階段代碼到內(nèi)存的代碼稱為第一階段代碼,將用于加載內(nèi)核到內(nèi)存并運行的代碼稱為第二階段代碼;若引導程序在運行或升級過程中出現(xiàn)了故障,系統(tǒng)將難以恢復,這種情況下,就需要進行存儲介質拆卸,用燒片器進行軟件重寫或者用聯(lián)合測試工作組(Joint Test Act1n Group, JTAG)接口進行寫入,這樣不但不安全,而且破壞了問題現(xiàn)場,為軟件研發(fā)過程帶來了許多不便。
【發(fā)明內(nèi)容】
[0008]有鑒于此,本發(fā)明實施例期望提供一種引導程序的存儲方法、故障恢復方法及設備,能夠使嵌入式系統(tǒng)的引導程序保持穩(wěn)定運行,從而提高嵌入式系統(tǒng)的安全性。
[0009]為達到上述目的,本發(fā)明的技術方案是這樣實現(xiàn)的:
[0010]本發(fā)明實施例提供了一種引導程序的存儲方法,該方法包括:
[0011]配置引導程序的第一階段代碼及第二階段代碼;其中,所述第一階段代碼用于完成基本參數(shù)設置、對所述第二階段代碼進行故障檢測及根據(jù)檢測結果執(zhí)行相應操作;所述第二階段代碼用于加載內(nèi)核到內(nèi)存并運行;
[0012]將所述第一階段代碼存儲于存儲介質中預設的第一分區(qū),并將所述第二階段代碼存儲于存儲介質中預設的第二分區(qū)。
[0013]上述方案中,所述方法還包括:
[0014]配置所述第二階段代碼的備份代碼,得到第二階段備份代碼;
[0015]將所述第二階段備份代碼存儲于存儲介質中預設的第三分區(qū)。
[0016]上述方案中,所述方法還包括:
[0017]在所述第二階段代碼升級后,利用升級后的第二階段代碼更新存儲于第三分區(qū)中的第二階段備份代碼。
[0018]本發(fā)明實施例提供了一種引導程序的故障恢復方法,將第一階段代碼和第二階段代碼分別存儲于存儲介質的第一分區(qū)和第二分區(qū)中;該方法還包括:
[0019]所述第一階段代碼在完成基本參數(shù)設置后,檢測所述第二階段代碼是否故障;
[0020]檢測到所述第二階段代碼故障時,確定是否存在第二階段備份代碼;
[0021]確定不存在所述第二階段備份代碼時,進入引導程序的下載模式。
[0022]上述方案中,所述方法還包括:
[0023]確定存在所述第二階段備份代碼時,檢測所述第二階段備份代碼是否故障;
[0024]檢測到所述第二階段備份代碼無故障時,利用所述第二階段備份代碼恢復故障的存儲于第二分區(qū)中的第二階段代碼;
[0025]檢測到所述第二階段備份代碼故障時,進入引導程序的下載模式。
[0026]上述方案中,所述方法還包括:
[0027]檢測到所述第二階段代碼無故障時,確定是否存在所述第二階段備份代碼;
[0028]確定不存在所述第二階段備份代碼時,跳轉到所述第二階段代碼的入口處,完成剩余的初始化操作;
[0029]確定存在所述第二階段備份代碼時,檢測所述第二階段代碼與所述第二階段備份代碼是否一致;
[0030]若檢測到所述第二階段代碼與所述第二階段備份代碼一致,則跳轉到所述第二階段代碼的入口處,完成剩余的初始化操作;
[0031]若檢測到所述第二階段代碼與所述第二階段備份代碼不一致,則確定存儲于第二分區(qū)中的第二段代碼已被升級,利用升級后的第二階段代碼更新存儲于第三分區(qū)中的第二階段備份代碼。
[0032]基于上述方法,本發(fā)明實施例提供了一種存儲設備,該存儲設備包括:配置單元、存儲單元;其中,
[0033]所述配置單元,用于配置引導程序的第一階段代碼及第二階段代碼;其中,所述第一階段代碼用于完成基本參數(shù)設置、對所述第二階段代碼進行故障檢測及根據(jù)檢測結果執(zhí)行相應操作;所述第二階段代碼用于加載內(nèi)核到內(nèi)存并運行;
[0034]所述存儲單元,用于將所述第一階段代碼存儲于存儲介質中預設的第一分區(qū),并將所述第二階段代碼存儲于存儲介質中預設的第二分區(qū)。
[0035]上述方案中,所述配置單元,還用于配置所述第二階段代碼的備份代碼,得到第二階段備份代碼;
[0036]所述存儲單元,還用于將所述第二階段備份代碼存儲于存儲介質中預設的第三分區(qū)。
[0037]上述方案中,所述存儲設備還包括:
[0038]更新單元,用于在所述第二階段代碼升級后,利用升級后的第二階段代碼更新存儲于第三分區(qū)中的第二階段備份代碼。
[0039]基于上述方法,本發(fā)明實施例還提供了一種嵌入式設備,該嵌入式設備包括:配置單元、存儲單元、檢測單元、確定單元、故障恢復單元;其中,
[0040]所述配置單元,用于配置引導程序的第一階段代碼及第二階段代碼;其中,所述第一階段代碼用于完成基本參數(shù)設置、對所述第二階段代碼進行故障檢測及根據(jù)檢測結果執(zhí)行相應操作;所述第二階段代碼用于加載內(nèi)核到內(nèi)存并運行;
[0041]所述存儲單元,用于將所述第一階段代碼存儲于存儲介質中預設的第一分區(qū),并將所述第二階段代碼存儲于存儲介質中預設的第二分區(qū);
[0042]所述檢測單元,用于所述第一階段代碼在完成基本參數(shù)設置后,檢測第二階段代碼是否故障;
[0043]所述確定單元,用于在檢測單元檢測到所述第二階段代碼故障時,確定是否存在第二階段備份代碼;
[0044]所述故障恢復單元,用于在確定單元確定不存在所述第二階段備份代碼時,進入引導程序的下載模式。
[0045]上述方案中,所述配置單元,還用于配置所述第二階段代碼的備份代碼,得到第二階段備份代碼;相應的,所述存儲單元,還用于將所述第二階段備份代碼存儲于存儲介質中預設的第三分區(qū);
[0046]所述檢測單元,還用于檢測所述第二階段備份代碼是否故障;
[0047]所述故障恢復單元,還用于在確定單元確定存在所述第二階段備份代碼,并在檢測單元檢測到所述第二階段備份代碼無故障時,利用所述第二階段備份代碼恢復故障的存儲于第二分區(qū)中的第二階段代碼;在確定單元確定存在所述第二階段備份代碼,并在檢測單元檢測到所述第二階段備份代碼故障時,進入引導程序的下載模式。
[0048]上述方案中,所述檢測單元,還用于檢測所述第二階段代碼與所述第二階段備份代碼是否一致;
[0049]所述嵌入式設備還包括:
[0050]執(zhí)行單元,用于在檢測單元檢測到所述第二階段代碼無故障,并在確定單元確定不存在所述第二階段備份代碼時,跳轉到所述第二階段代碼的入口處,完成剩余的初始化操作;在檢測單元檢測到所述第二階段代碼無故障,并在確定單元確定存在所述第二階段備份代碼時,若所述檢測單元檢測到所述第二階段代碼與所述第二階段備份代碼一致,則跳轉到所述第二階段代碼的入口處,完成剩余的初始化操作;
[0051]更新單元,用于在檢測單元檢測到所述第二階段代碼無故障,并在確定單元確定存在所述第二階段備份代碼時,若所述檢測單元檢測到所述第二階段代碼與所述第二階段備份代碼不一致,