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