亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

啟動(dòng)處理方法及裝置與流程

文檔序號:12596373閱讀:466來源:國知局
啟動(dòng)處理方法及裝置與流程

本發(fā)明涉及通信領(lǐng)域,具體而言,涉及啟動(dòng)處理方法及裝置。



背景技術(shù):

數(shù)據(jù)通信產(chǎn)品通常采用嵌入式系統(tǒng)構(gòu)架,通常需要使用BOOT來負(fù)責(zé)完成系統(tǒng)硬件的初始化以及相關(guān)應(yīng)用程序的引導(dǎo)加載,因此,BOOT運(yùn)行的穩(wěn)定性和可靠性對于整個(gè)系統(tǒng)的啟動(dòng)至關(guān)重要。

現(xiàn)有的數(shù)據(jù)通信產(chǎn)品,在BOOT啟動(dòng)方式上通常存在如下的不足:

首先,現(xiàn)有的數(shù)據(jù)通信產(chǎn)品,通常采用單一BOOT的方式來啟動(dòng)設(shè)備,并且,BOOT數(shù)據(jù)通常是存放在NOR FLASH、NAND FLASH等存儲(chǔ)器件中的,這些器件無論是在生產(chǎn)和使用過程中都有可能產(chǎn)生壞塊,并且,這些壞塊的產(chǎn)生都是隨機(jī)的,如果使用單一BOOT,一旦BOOT數(shù)據(jù)存儲(chǔ)的區(qū)域產(chǎn)生了壞塊,那么整個(gè)BOOT將無法正常啟動(dòng),從而造成整個(gè)設(shè)備無法啟動(dòng)。同時(shí),由于這些存儲(chǔ)器件壞塊的產(chǎn)生是隨機(jī)的,那么,也就是說,對于BOOT而言,數(shù)據(jù)被損壞的概率與BOOT數(shù)據(jù)所占用的存儲(chǔ)空間大小是成線性比例的,BOOT數(shù)據(jù)存儲(chǔ)所占用的存儲(chǔ)空間越大,BOOT數(shù)據(jù)被損壞的可能性也會(huì)越大。這對于現(xiàn)在BOOT數(shù)據(jù)越來越大的數(shù)據(jù)通信產(chǎn)品而言,由此導(dǎo)致的BOOT啟動(dòng)失敗的概率也會(huì)隨之增加。

另外,現(xiàn)有的數(shù)據(jù)通信產(chǎn)品,在調(diào)試生產(chǎn)、測試及市場應(yīng)用中,都會(huì)涉及到BOOT的數(shù)據(jù)更新問題,而現(xiàn)有的BOOT數(shù)據(jù)更新,一般采用的是燒錄器燒錄或在線升級的方式,對于燒錄器燒錄的方式,一般都需要有特定的硬件設(shè)備和軟件來支持,操作相對會(huì)比較復(fù)雜,這種方式只適用于在設(shè)備生產(chǎn)過程中對BOOT數(shù)據(jù)的第一次燒錄,或者是在實(shí)驗(yàn)室的調(diào)試階段中使用;相對于燒錄器燒錄,在線升級的方式實(shí)現(xiàn)起來相對簡單,對于軟硬件環(huán)境的依賴也較小,現(xiàn)在被廣泛應(yīng)用于數(shù)據(jù)通信產(chǎn)品的開發(fā)、測試和市場應(yīng)用等場景;但在實(shí)際應(yīng)用中,在線升級的方式也存在著風(fēng)險(xiǎn),也會(huì)出現(xiàn)一些情況導(dǎo)致BOOT升級失敗,比如,升級的過程被中斷、升級的BOOT本身就存在問題等,一旦遇到這種情況,不僅這次BOOT升級會(huì)失敗,而且由于原有BOOT數(shù)據(jù)的損壞,還會(huì)造成BOOT無法再次在線升級,BOOT無法正常啟動(dòng)設(shè)備的情況出現(xiàn),這時(shí),就只能對設(shè)備單板進(jìn)行更換或者返廠維修了,這不僅增加了設(shè)備維護(hù)成本,還有可能造成其它更加嚴(yán)重的后果。

針對相關(guān)技術(shù)中對BOOT的啟動(dòng)存在缺陷的問題,還未提出有效的解決方案。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明提供了啟動(dòng)處理方法及裝置,以至少解決相關(guān)技術(shù)中對BOOT的啟動(dòng)存在缺陷的問題。

根據(jù)本發(fā)明的一個(gè)方面,提供了一種啟動(dòng)處理方法,包括:將BOOT程序按功能拆分為一個(gè)BOOT1和一個(gè)或多個(gè)BOOT2,其中,所述BOOT1對應(yīng)所述一個(gè)或多個(gè)BOOT2,用于完成BOOT2的引導(dǎo)及引導(dǎo)所述BOOT2所必須的硬件初始化,所述BOOT2用于完成所述BOOT所有或除所述BOOT1以外的BOOT功能;通過所述BOOT1對所述BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理。

進(jìn)一步地,在通過所述BOOT1對所述BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理之前,所述方法還包括:通過BOOT1讀取上次啟動(dòng)所述BOOT2的結(jié)果信息;將所述結(jié)果信息更新到所述BOOT2對應(yīng)的數(shù)據(jù)區(qū)中。

進(jìn)一步地,通過所述BOOT1對所述BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理包括:判斷是否從存儲(chǔ)器件FLASH的所有BOOT2中獲取到與所述結(jié)果信息中的所述BOOT2相匹配的BOOT2;在判斷結(jié)果為是的情況下,通過所述BOOT1更新所述BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記所述BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

進(jìn)一步地,通過所述BOOT1對所述BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理還包括:在判斷結(jié)果為否的情況下,通過所述BOOT1檢測是否有外部USB存儲(chǔ)設(shè)備掛載;在檢測結(jié)果為是的情況下,判斷所述USB存儲(chǔ)設(shè)備上是否存在與所述結(jié)果信息中的所述BOOT2相匹配的BOOT2;在判斷結(jié)果為是的情況下,在所述USB存儲(chǔ)設(shè)備上獲取所述BOOT2,通過所述BOOT1將所述BOOT2加載到內(nèi)存,并對所述BOOT2的文件數(shù)據(jù)的完整性進(jìn)行校驗(yàn);在所述BOOT2的文件數(shù)據(jù)為完整的情況下,通過所述BOOT1更新所述BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記所述BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

進(jìn)一步地,所述方法還包括:在通過所述BOOT1更新所述BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記所述BOOT2為此次加載的BOOT2的同時(shí),通過所述BOOT1啟動(dòng)計(jì)數(shù)器;判斷在預(yù)定時(shí)間內(nèi)是否收到用于關(guān)閉所述計(jì)數(shù)器的指示信息,其中,所述指示信息是所述BOOT2在成功完成所有內(nèi)核引導(dǎo)前的初始化工作后,在啟動(dòng)內(nèi)核時(shí)發(fā)送的;在判斷結(jié)果為是的情況下,確定此次BOOT啟動(dòng)處理成功;在判斷結(jié)果為否的情況下,確定此次BOOT啟動(dòng)處理異常。

根據(jù)本發(fā)明的另一方面,還提供了一種啟動(dòng)處理裝置,包括:拆分模塊,用于將BOOT程序按功能拆分為一個(gè)BOOT1和一個(gè)或多個(gè)BOOT2,其中,所述BOOT1對應(yīng)所述一個(gè)或多個(gè)BOOT2,用于完成BOOT2的引導(dǎo)及引導(dǎo)所述BOOT2所必須的硬件初始化,所述BOOT2用于完成所述BOOT所有或除所述BOOT1以外的BOOT功能;啟動(dòng)處理模塊,用于通過所述BOOT1對所述BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理。

進(jìn)一步地,所述裝置還包括:讀取模塊,用于通過BOOT1讀取上次啟動(dòng)所述BOOT2的結(jié)果信息;更新模塊,用于將所述結(jié)果信息更新到所述BOOT2對應(yīng)的數(shù)據(jù)區(qū)中。

進(jìn)一步地,所述啟動(dòng)處理模塊包括:第一判斷單元,用于判斷是否從存儲(chǔ)器件FLASH的所有BOOT2中獲取到與所述結(jié)果信息中的所述BOOT2相匹配的BOOT2;啟動(dòng)處理單元,用于在判斷結(jié)果為是的情況下,通過所述BOOT1更新所述BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記所述BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

進(jìn)一步地,所述啟動(dòng)處理模塊還包括:檢測單元,用于在判斷結(jié)果為否的情況下,通過所述BOOT1檢測是否有外部USB存儲(chǔ)設(shè)備掛載;第二判斷單元,用于在檢測結(jié)果為是的情況下,判斷所述USB存儲(chǔ)設(shè)備上是否存在與所述結(jié)果信息中的所述BOOT2相匹配的BOOT2;校驗(yàn)單元,用于在判斷結(jié)果為是的情況下,在所述USB存儲(chǔ)設(shè)備上獲取所述BOOT2,通過所述BOOT1將所述BOOT2加載到內(nèi)存,并對所述BOOT2的文件數(shù)據(jù)的完整性進(jìn)行校驗(yàn);標(biāo)記單元,用于在所述BOOT2的文件數(shù)據(jù)為完整的情況下,通過所述BOOT1更新所述BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記所述BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

進(jìn)一步地,所述裝置還包括:啟動(dòng)單元,用于在通過所述BOOT1更新所述BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記所述BOOT2為此次加載的BOOT2的同時(shí),通過所述BOOT1啟動(dòng)計(jì)數(shù)器;第三判斷單元,用于判斷在預(yù)定時(shí)間內(nèi)是否收到用于關(guān)閉所述計(jì)數(shù)器的指示信息,其中,所述指示信息是所述BOOT2在成功完成所有內(nèi)核引導(dǎo)前的初始化工作后,在啟動(dòng)內(nèi)核時(shí)發(fā)送的;第一確定單元,用于在判斷結(jié)果為是的情況下,確定此次BOOT啟動(dòng)處理成功;第二確定單元,用于在判斷結(jié)果為否的情況下,確定此次BOOT啟動(dòng)處理異常。

通過本發(fā)明,采用將BOOT程序按功能拆分為一個(gè)BOOT1和一個(gè)或多個(gè)BOOT2,其中,所述BOOT1對應(yīng)所述一個(gè)或多個(gè)BOOT2,用于完成BOOT2的引導(dǎo)及引導(dǎo)所述BOOT2所必須的硬件初始化,所述BOOT2用于完成所述BOOT所有或除所述BOOT1以外的BOOT功能;通過所述BOOT1對所述BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理,解決了相關(guān)技術(shù)中對BOOT的啟動(dòng)存在缺陷的問題,提高了設(shè)備啟動(dòng)和升級的成功率和安全性。

附圖說明

此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:

圖1是根據(jù)本發(fā)明實(shí)施例的啟動(dòng)處理方法的流程圖;

圖2是根據(jù)本發(fā)明實(shí)施例的啟動(dòng)處理裝置的框圖;

圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的啟動(dòng)處理裝置的框圖一;

圖4是根據(jù)本發(fā)明優(yōu)選實(shí)施例的啟動(dòng)處理裝置的框圖二;

圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的啟動(dòng)處理裝置的框圖三;

圖6是根據(jù)本發(fā)明實(shí)施例的一種數(shù)字通信設(shè)備硬件模塊的框圖;

圖7是根據(jù)本發(fā)明實(shí)施例的BOOT1和BOOT2在FLASH上存儲(chǔ)的示意圖;

圖8是根據(jù)本發(fā)明實(shí)施例的一種多BOOT啟動(dòng)方法流程圖;

圖9是根據(jù)本發(fā)明實(shí)施例的HMPU雙BOOT啟動(dòng)流程示意圖。

具體實(shí)施方式

下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。

在本實(shí)施例中提供了一種啟動(dòng)處理方法,圖1是根據(jù)本發(fā)明實(shí)施例的啟動(dòng)處理方法的流程圖,如圖1所示,該流程包括如下步驟:

步驟S102,將BOOT程序按功能拆分為一個(gè)BOOT1和一個(gè)或多個(gè)BOOT2,其中,該BOOT1對應(yīng)該一個(gè)或多個(gè)BOOT2,用于完成BOOT2的引導(dǎo)及引導(dǎo)該BOOT2所必須的硬件初始化,該BOOT2用于完成該BOOT所有或除該BOOT1以外的BOOT功能;

步驟S104,通過該BOOT1對該BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理。

傳統(tǒng)BOOT所有功能都是由一個(gè)BOOT(可執(zhí)行文件)來實(shí)現(xiàn),通過上述步驟,將BOOT分成了BOOT1和BOOT2,分別實(shí)現(xiàn)不同功能,由于BOOT1實(shí)現(xiàn)的功能比較簡單,所以體積比較小,不容易損壞,同時(shí),可以有多個(gè)BOOT2,從而在BOOT1不損壞的情況下,即使有個(gè)別BOOT2出現(xiàn)損壞,設(shè)備還是可以從其他BOOT2正常啟動(dòng),一個(gè)設(shè)備上有一個(gè)BOOT1,但可以有多個(gè)BOOT2文件,多個(gè)BOOT2文件可以是相同版本也可以是不同版本,多個(gè)BOOT2文件可以由多個(gè)BOOT拆分而來。BOOT的拆分是在代碼編譯階段完成的,也可以理解為一套代碼編譯生成了BOOT1,另一套代碼編譯生成了BOOT2,設(shè)備的BOOT啟動(dòng)由生成的BOOT1和BOOT2共同完成。

通過上述步驟,將BOOT程序按功能拆分為一個(gè)BOOT1和一個(gè)或多個(gè)BOOT2,其中,該BOOT1對應(yīng)該一個(gè)或多個(gè)BOOT2,用于完成BOOT2的引導(dǎo)及引導(dǎo)該BOOT2所必須的硬件初始化,該BOOT2用于完成該BOOT所有或除該BOOT1以外的BOOT功能;通過該BOOT1對該BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理,解決了相關(guān)技術(shù)中對BOOT的啟動(dòng)存在缺陷的問題,提高了設(shè)備啟動(dòng)和升級的成功率和安全性。

進(jìn)一步地,在通過該BOOT1對該BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理之前,通過 BOOT1讀取上次啟動(dòng)該BOOT2的結(jié)果信息;將該結(jié)果信息更新到該BOOT2對應(yīng)的數(shù)據(jù)區(qū)中。

通過該BOOT1對該BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理的方式不止一種,在一個(gè)優(yōu)選實(shí)施例中,可以通過判斷是否從存儲(chǔ)器件FLASH的所有BOOT2中獲取到與該結(jié)果信息中的該BOOT2相匹配的BOOT2;在判斷結(jié)果為是的情況下,通過該BOOT1更新該BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記該BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

在另一個(gè)優(yōu)選實(shí)施例中,可以通過在判斷結(jié)果為否的情況下,通過該BOOT1檢測是否有外部USB存儲(chǔ)設(shè)備掛載;在檢測結(jié)果為是的情況下,判斷該USB存儲(chǔ)設(shè)備上是否存在與該結(jié)果信息中的該BOOT2相匹配的BOOT2;在判斷結(jié)果為是的情況下,在該USB存儲(chǔ)設(shè)備上獲取該BOOT2,通過該BOOT1將該BOOT2加載到內(nèi)存,并對該BOOT2的文件數(shù)據(jù)的完整性進(jìn)行校驗(yàn);在該BOOT2的文件數(shù)據(jù)為完整的情況下,通過該BOOT1更新該BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記該BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理,通過BOOT1啟動(dòng)加載USB設(shè)備上的BOOT2,從而即使現(xiàn)有BOOT2全部損壞了,也可以通過更換USB上的BOOT2文件使市場應(yīng)用中處理設(shè)備BOOT啟動(dòng)故障便利很多。

在通過該BOOT1更新該BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記該BOOT2為此次加載的BOOT2的同時(shí),通過該BOOT1啟動(dòng)計(jì)數(shù)器;判斷在預(yù)定時(shí)間內(nèi)是否收到用于關(guān)閉該計(jì)數(shù)器的指示信息,其中,該指示信息是該BOOT2在成功完成所有內(nèi)核引導(dǎo)前的初始化工作后,在啟動(dòng)內(nèi)核時(shí)發(fā)送的;在判斷結(jié)果為是的情況下,確定此次BOOT啟動(dòng)處理成功;在判斷結(jié)果為否的情況下,確定此次BOOT啟動(dòng)處理異常。

本發(fā)明實(shí)施例還提供了一種啟動(dòng)處理裝置,圖2是根據(jù)本發(fā)明實(shí)施例的啟動(dòng)處理裝置的框圖,如圖2所示,包括:

拆分模塊22,用于將BOOT程序按功能拆分為一個(gè)BOOT1和一個(gè)或多個(gè)BOOT2,其中,該BOOT1對應(yīng)該一個(gè)或多個(gè)BOOT2,用于完成BOOT2的引導(dǎo)及引導(dǎo)該BOOT2所必須的硬件初始化,該BOOT2用于完成該BOOT所有或除該BOOT1以外的BOOT功能;

啟動(dòng)處理模塊24,用于通過該BOOT1對該BOOT2的啟動(dòng)完成BOOT啟動(dòng)處理。

圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的啟動(dòng)處理裝置的框圖一,如圖3所示,該裝置還包括:

讀取模塊32,用于通過BOOT1讀取上次啟動(dòng)該BOOT2的結(jié)果信息;

更新模塊34,用于將該結(jié)果信息更新到該BOOT2對應(yīng)的數(shù)據(jù)區(qū)中。

圖4是根據(jù)本發(fā)明優(yōu)選實(shí)施例的啟動(dòng)處理裝置的框圖二,如圖4所示,啟動(dòng)處理模 塊24包括:

第一判斷單元42,用于判斷是否從存儲(chǔ)器件FLASH的所有BOOT2中獲取到與該結(jié)果信息中的該BOOT2相匹配的BOOT2;

啟動(dòng)處理單元44,用于在判斷結(jié)果為是的情況下,通過該BOOT1更新該BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記該BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的啟動(dòng)處理裝置的框圖三,如圖5所示,啟動(dòng)處理模塊24還包括:

檢測單元52,用于在判斷結(jié)果為否的情況下,通過該BOOT1檢測是否有外部USB存儲(chǔ)設(shè)備掛載;

第二判斷單元54,用于在檢測結(jié)果為是的情況下,判斷該USB存儲(chǔ)設(shè)備上是否存在與該結(jié)果信息中的該BOOT2相匹配的BOOT2;

校驗(yàn)單元56,用于在判斷結(jié)果為是的情況下,在該USB存儲(chǔ)設(shè)備上獲取該BOOT2,通過該BOOT1將該BOOT2加載到內(nèi)存,并對該BOOT2的文件數(shù)據(jù)的完整性進(jìn)行校驗(yàn);

標(biāo)記單元58,用于在該BOOT2的文件數(shù)據(jù)為完整的情況下,通過該BOOT1更新該BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記該BOOT2為此次加載的BOOT2完成BOOT啟動(dòng)處理。

進(jìn)一步地,上述的裝置還可以包括:啟動(dòng)單元,用于在通過該BOOT1更新該BOOT2對應(yīng)的數(shù)據(jù)區(qū),標(biāo)記該BOOT2為此次加載的BOOT2的同時(shí),通過該BOOT1啟動(dòng)計(jì)數(shù)器;第三判斷單元,用于判斷在預(yù)定時(shí)間內(nèi)是否收到用于關(guān)閉該計(jì)數(shù)器的指示信息,其中,該指示信息是該BOOT2在成功完成所有內(nèi)核引導(dǎo)前的初始化工作后,在啟動(dòng)內(nèi)核時(shí)發(fā)送的;第一確定單元,用于在判斷結(jié)果為是的情況下,確定此次BOOT啟動(dòng)處理成功;第二確定單元,用于在判斷結(jié)果為否的情況下,確定此次BOOT啟動(dòng)處理異常。

針對相關(guān)技術(shù)中存在的上述問題,下面結(jié)合具體的可選實(shí)施例進(jìn)行進(jìn)一步說明,下述可選實(shí)施例結(jié)合了上述可選實(shí)施例及其可選實(shí)施方式。

圖6是根據(jù)本發(fā)明實(shí)施例的一種數(shù)字通信設(shè)備硬件模塊的框圖,如圖6所示,在現(xiàn)有數(shù)據(jù)通信產(chǎn)品的基礎(chǔ)上,本可選實(shí)施例包含有一個(gè)硬件邏輯器件模塊68,通過功能總線和中央處理器(Central Processing Unit,簡稱為CPU)芯片子系統(tǒng)62相連,可以實(shí)現(xiàn)硬件計(jì)數(shù)器和復(fù)位CPU的功能,當(dāng)CPU啟動(dòng)但沒有在設(shè)定時(shí)限內(nèi)關(guān)閉硬件邏輯器件模塊68的硬件計(jì)數(shù)器時(shí),此模塊會(huì)復(fù)位CPU,并記錄結(jié)果。

本可選實(shí)施例的數(shù)據(jù)通信產(chǎn)品中,至少包含有一個(gè)通用串行總線(Universal Serial Bus,簡稱為USB)模塊,用于CPU芯片子系統(tǒng)62訪問外部USB存儲(chǔ)器件。

傳統(tǒng)的BOOT啟動(dòng)分為兩個(gè)階段,第一個(gè)階段主要完成代碼的搬移和為后續(xù)代碼運(yùn)行提供C語言運(yùn)行環(huán)境的工作,第二階段主要是初始化一些硬件及驅(qū)動(dòng)并引導(dǎo)內(nèi)核的加 載。

以一個(gè)BOOT1(Tractor)、兩個(gè)BOOT2(主BOOT、備BOOT)為例,在整個(gè)BOOT啟動(dòng)流程中,Tractor在完成啟動(dòng)后,會(huì)讀取外部邏輯器件BOOT啟動(dòng)標(biāo)記位指示寄存器,從該寄存器中獲取上次BOOT啟動(dòng)信息,并將此信息更新到上次啟動(dòng)BOOT2對應(yīng)的數(shù)據(jù)區(qū),根據(jù)所有BOOT2數(shù)據(jù)區(qū)信息,Tractor會(huì)決定啟動(dòng)boot slave或者boot master,同時(shí),Tractor還會(huì)設(shè)置CPLD的邏輯快/慢翻轉(zhuǎn)寄存器(10s/30s)來檢測BOOT啟動(dòng)是否啟動(dòng)成功,實(shí)現(xiàn)類似看門狗的作用。

至此,BOOT2已經(jīng)開始運(yùn)行,之后,BOOT2會(huì)完成內(nèi)核啟動(dòng)所需要的所有初始化工作,關(guān)閉CPLD的硬件計(jì)數(shù)計(jì)時(shí)器,為內(nèi)核傳遞參數(shù)并引導(dǎo)內(nèi)核正常啟動(dòng)。

傳統(tǒng)Boot啟動(dòng)的兩個(gè)階段:

Stage 1實(shí)現(xiàn)以下功能:

(1)初始化相關(guān)硬件;

(2)設(shè)置異常向量(Exception Vector);

(3)關(guān)閉MMU、CACHE、RAM控制器;

(4)初始化時(shí)鐘,波特率及串口設(shè)備;

(5)reload code;

(6)初始化堆棧;

(7)清0BSS段;

(8)執(zhí)行stage2。

Stage 2實(shí)現(xiàn)以下功能:

(1)初始化本階段要使用到的硬件設(shè)備;

(2)包括終端設(shè)備初始化,I2C,loacoal BUS,各種總線,網(wǎng)口等設(shè)備及相關(guān)驅(qū)動(dòng)的初始化等;

(3)從USB/FTP Server或者Flash獲取kernl文件加載到內(nèi)存;

(4)解析kernl文件;

(5)為內(nèi)核設(shè)置啟動(dòng)參數(shù);

(6)啟動(dòng)內(nèi)核。

本發(fā)明實(shí)施例是在上述原有數(shù)據(jù)通信產(chǎn)品BOOT基礎(chǔ)上,將原有BOOT程序按功 能分解為BOOT1和BOOT2兩種(兩個(gè)部分)。BOOT1負(fù)責(zé)完成BOOT2的引導(dǎo)及加載功能;BOOT2負(fù)責(zé)完成原數(shù)據(jù)通信產(chǎn)品BOOT所有或者原數(shù)據(jù)通信產(chǎn)品BOOT中除BOOT1完成部分以外的所有硬件初始化和相關(guān)應(yīng)用程序的引導(dǎo)加載工作。

圖7是根據(jù)本發(fā)明實(shí)施例的BOOT1和BOOT2在FLASH上存儲(chǔ)的示意圖,如圖7所示,在同一數(shù)據(jù)通信產(chǎn)品上,可以存在多個(gè)BOOT2,每個(gè)BOOT2可以和BOOT1存儲(chǔ)在相同存儲(chǔ)器件FLASH上,也可以存儲(chǔ)在不同存儲(chǔ)器件上,比如存儲(chǔ)在外部USB存儲(chǔ)器件上;存儲(chǔ)在數(shù)據(jù)通信產(chǎn)品上的每個(gè)BOOT2,都會(huì)有一個(gè)與之一一對應(yīng)的數(shù)據(jù)區(qū),每個(gè)數(shù)據(jù)區(qū)都包含有對應(yīng)BOOT2的版本信息、啟動(dòng)結(jié)果信息等,為減小數(shù)據(jù)區(qū)數(shù)據(jù)被損壞的概率,本可選實(shí)施例是將這些數(shù)據(jù)區(qū)放在對應(yīng)的BOOT2數(shù)據(jù)前。

設(shè)備上電后,會(huì)先加載運(yùn)行BOOT1,BOOT1完成加載BOOT2所必須的硬件初始化工作后,會(huì)從外部硬件邏輯器件中讀取上次BOOT2啟動(dòng)的結(jié)果,并更新到BOOT2對應(yīng)的數(shù)據(jù)區(qū);BOOT1完成數(shù)據(jù)區(qū)數(shù)據(jù)更新后,會(huì)檢測是否有外部掛載USB存儲(chǔ)器件中有BOOT2文件存在,如果存在,則無條件加載USB上的BOOT2,如果不存在,則從設(shè)備內(nèi)部存儲(chǔ)器件中選取一個(gè)可以成功加載并且版本最新的BOOT2進(jìn)行加載,如果內(nèi)部存儲(chǔ)器件中不存在可以成功加載的BOOT2,BOOT1會(huì)進(jìn)入串口命令等待模式,等待外部命令輸入;BOOT1在加載BOOT2的同時(shí),還會(huì)啟動(dòng)外部硬件邏輯器件模塊的計(jì)數(shù)器,此計(jì)數(shù)器由BOOT2完成所有硬件初始化、啟動(dòng)引導(dǎo)內(nèi)核之時(shí)關(guān)閉,如果BOOT2在設(shè)定時(shí)限內(nèi)沒有關(guān)閉計(jì)數(shù)器,則外部硬件邏輯器件模塊會(huì)判定BOOT2啟動(dòng)失敗并復(fù)位CPU芯片,設(shè)備重新啟動(dòng);設(shè)備重啟后,會(huì)重復(fù)上述步驟,直到選取的BOOT2可以成功加載內(nèi)核,如果設(shè)備所有BOOT2都沒能成功加載內(nèi)核,則進(jìn)入串口命令等待模式。

本發(fā)明實(shí)施例采用BOOT1和多個(gè)BOOT2版本啟動(dòng)設(shè)備的方式,在單個(gè)BOOT2損壞或者升級失敗的情況下,BOOT1會(huì)自動(dòng)切換到其它的BOOT2來啟動(dòng)設(shè)備,而且,當(dāng)數(shù)據(jù)通訊設(shè)備背部存儲(chǔ)器件上的所有BOOT2都無法正常啟動(dòng)設(shè)備的時(shí)候,BOOT1還可以用外部USB存儲(chǔ)器件上的BOOT2來啟動(dòng)設(shè)備,與現(xiàn)有的技術(shù)相比,提高了設(shè)備啟動(dòng)的靈活性,也提高了設(shè)備啟動(dòng)的成功率。

另外,在本發(fā)明實(shí)施例中,當(dāng)BOOT1完成BOOT2的引導(dǎo)和加載后,BOOT2還可以對BOOT1已經(jīng)初始化過的內(nèi)容重新進(jìn)行初始化,也就是說,在實(shí)際開發(fā)、測試和應(yīng)用場景中,BOOT1是不需要進(jìn)行升級維護(hù)的;同時(shí),由于BOOT1只需要實(shí)現(xiàn)BOOT2的引導(dǎo)和加載功能,體積會(huì)比現(xiàn)有BOOT小很多,這些,都提高了設(shè)備啟動(dòng)和升級的成功率和安全性。

圖8是根據(jù)本發(fā)明實(shí)施例的一種多BOOT啟動(dòng)方法流程圖,如圖8所示,數(shù)據(jù)通信產(chǎn)品的多BOOT的啟動(dòng)方法的步驟包括:

步驟S801,設(shè)備上電后,設(shè)備會(huì)先跳轉(zhuǎn)到BOOT1執(zhí)行,BOOT1會(huì)執(zhí)行一些基本的硬件初始化工作,如初始化內(nèi)存、定時(shí)器、串口、按鍵及USB驅(qū)動(dòng)加載等。

步驟S802,BOOT1從外部邏輯器件中讀取上次BOOT2啟動(dòng)的結(jié)果信息,并更新到BOOT2對應(yīng)的數(shù)據(jù)區(qū)中;

步驟S803,BOOT1對設(shè)備上是否有外部USB存儲(chǔ)設(shè)備掛載進(jìn)行檢測,如果有USB設(shè)備掛載,執(zhí)行步驟S804,如果沒有,執(zhí)行步驟S806;

步驟S804,在USB存儲(chǔ)設(shè)備上查找是否存在與設(shè)備相匹配的BOOT2文件,這種查找,屬于基于文件名的查找,但并不限于基于文件名查找的方式。如果在外部USB存儲(chǔ)設(shè)備上找到了與設(shè)備相匹配的BOOT2文件,則從步驟S805開始執(zhí)行,否則從步驟S806執(zhí)行;

步驟S805,BOOT1將USB存儲(chǔ)設(shè)備上的BOOT2加載到內(nèi)存,并對BOOT2文件數(shù)據(jù)做完整性校驗(yàn),如果BOOT2數(shù)據(jù)損壞,則執(zhí)行步驟S808,沒有損壞,執(zhí)行步驟S810;

步驟S806,BOOT1遍歷設(shè)備存儲(chǔ)器件上所有BOOT2對應(yīng)的數(shù)據(jù)區(qū),從數(shù)據(jù)區(qū)信息里讀取是否有用戶指定要加載的BOOT2,如有,則從步驟S810開始操作,沒有則從步驟S807執(zhí)行;

步驟S807,BOOT1遍歷所有數(shù)據(jù)區(qū)信息,判斷是否有可以正常啟動(dòng)的BOOT2,如果有,執(zhí)行步驟S809,否則,執(zhí)行步驟S808;

步驟S808,BOOT1會(huì)等待串口命令的輸入,如果有,則執(zhí)行串口命令,如果沒有,則繼續(xù)等待;這里對于串口輸入命令的響應(yīng),不屬于本發(fā)明重點(diǎn),這里就不在詳述;

步驟S809,BOOT1從所有可執(zhí)行的BOOT2中選取版本最新的BOOT2并執(zhí)行步驟S810,如果有版本時(shí)間相同的BOOT2出現(xiàn),則隨機(jī)選取其中一個(gè);

步驟S810,BOOT1將選取的BOOT2加載到內(nèi)存,并對BOOT2做數(shù)據(jù)完整性校驗(yàn),如果數(shù)據(jù)不完整,則執(zhí)行步驟S807;如果數(shù)據(jù)完整,則執(zhí)行步驟S811;

步驟S811,BOOT1更新對應(yīng)數(shù)據(jù)區(qū),標(biāo)記此BOOT2為此次加載的BOOT2,同時(shí),BOOT1啟動(dòng)硬件邏輯器件的計(jì)數(shù)器,程序從BOOT2開始執(zhí)行;

步驟S812,BOOT2在成功完成所有內(nèi)核引導(dǎo)前的初始化工作后,會(huì)在啟動(dòng)內(nèi)核時(shí),發(fā)送信號關(guān)閉外部邏輯器件的硬件計(jì)數(shù)器。如果外部邏輯器件在設(shè)定的時(shí)限內(nèi)收到了關(guān)閉計(jì)數(shù)器的信號,則判定此次BOOT啟動(dòng)成功結(jié)束;如果沒有收到,則判定此次BOOT啟動(dòng)異常,并執(zhí)行步驟S813;

步驟S813,外部硬件邏輯器件記錄此次BOOT2啟動(dòng)失敗的結(jié)果,重新啟動(dòng)設(shè)備。

需要說明的是,外部硬件邏輯器件設(shè)定的從計(jì)數(shù)器開始計(jì)數(shù)到復(fù)位設(shè)備之間的時(shí)限,應(yīng)大于設(shè)備BOOT2正常啟動(dòng)的時(shí)限,同時(shí),還應(yīng)留有一定的冗余,以防止外部硬件邏輯器件異常復(fù)位設(shè)備。

下面以兩個(gè)BOOT為例進(jìn)行進(jìn)一步說明,圖9是根據(jù)本發(fā)明實(shí)施例的HMPU雙BOOT啟動(dòng)流程示意圖,如圖9所示,設(shè)備上電后,CPU從0地址加載Tractor,Tractor首先對CPU、RAM進(jìn)行初始化。Tractor檢測復(fù)雜可編程邏輯器件(Complex Programmable Logic Device,簡稱為CPLD)的狀態(tài)寄存器(0x80),根據(jù)寄存器和數(shù)據(jù)區(qū)信息確定從哪個(gè)BOOT2(主boot、備boot)啟動(dòng)。Tractor同時(shí)啟動(dòng)10S、30S定時(shí)器。Tractor跳轉(zhuǎn)到相應(yīng)的BOOT2開始執(zhí)行。BOOT2在單板初始化時(shí)通知CPLD關(guān)閉10S定時(shí)器,表明CPU已經(jīng)跳轉(zhuǎn)到BOOT2階段開始執(zhí)行。BOOT2在完成硬件初始化之后,在加載啟動(dòng)內(nèi)核時(shí),再次通知CPLD關(guān)閉30S定時(shí)器,表明BOOT2啟動(dòng)已經(jīng)完成,進(jìn)入內(nèi)核啟動(dòng)階段。

設(shè)備上電后,CPLD等待Tractor啟動(dòng)10S、30S定時(shí)器。10S定時(shí)器超時(shí),更新狀態(tài)寄存器,指示CPU下次應(yīng)該從備用BOOT啟動(dòng);30S定時(shí)器超時(shí),更新狀態(tài)寄存器,指示CPU下次應(yīng)該從備用BOOT啟動(dòng)。復(fù)位CPU,CPLD等待Tractor啟動(dòng)10S、30S定時(shí)器。

顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。

以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1