本申請涉及計算機(jī)技術(shù)領(lǐng)域,特別是涉及一種安卓系統(tǒng)的啟動方法、移動終端及具有存儲功能的裝置。
背景技術(shù):
安卓系統(tǒng)是一種基于linux的開源移動操作系統(tǒng),主要應(yīng)用于手機(jī)、平板電腦、電視機(jī)、手表等智能終端上。隨著安卓系統(tǒng)的迅速發(fā)展和其市場份額的不斷增大,其客戶群也在迅猛增長,但隨之而來的是系統(tǒng)在使用中問題的不斷暴露。其中最大的問題就是安卓系統(tǒng)的開機(jī)啟動失敗的問題。
本申請的發(fā)明人在長期的研發(fā)中發(fā)現(xiàn),在目前現(xiàn)有技術(shù)中,安卓系統(tǒng)的開放性造就了用戶在使用上的最大靈活性,包括自主刷機(jī),自主安裝未授權(quán)的第三方軟件等。但這些操作極易將安卓系統(tǒng)的引導(dǎo)鏡像文件刷壞,直接導(dǎo)致產(chǎn)品無法開機(jī)啟動。
技術(shù)實現(xiàn)要素:
本申請主要解決的技術(shù)問題是提供一種安卓系統(tǒng)的啟動方法、移動終端及具有存儲功能的裝置,以提高安卓系統(tǒng)啟動的成功率。
為解決上述技術(shù)問題,本申請采用的一個技術(shù)方案是:提供一種安卓系統(tǒng)的啟動方法。所述方法包括:在所述安卓系統(tǒng)啟動的引導(dǎo)加載階段,加載編譯引導(dǎo)鏡像文件,所述編譯引導(dǎo)鏡像文件包括原始引導(dǎo)鏡像文件和糾錯文件,所述糾錯文件是采用糾錯算法對所述原始引導(dǎo)鏡像文件進(jìn)行計算而得到的;若加載失敗,則獲取所述糾錯文件,進(jìn)而采用所述糾錯算法對所述原始引導(dǎo)鏡像文件進(jìn)行糾錯處理;若糾錯處理成功,則重新加載糾錯處理后的引導(dǎo)鏡像文件,進(jìn)而啟動所述安卓系統(tǒng)。
其中,所述糾錯算法為前向糾錯算法。
其中,所述糾錯算法通過里德-所羅門碼實現(xiàn)。
其中,所述糾錯文件是采用糾錯算法和交錯技術(shù)對所述原始引導(dǎo)鏡像文件進(jìn)行計算而得到的。
其中,所述若加載失敗,則獲取所述糾錯文件,進(jìn)而采用所述糾錯算法對所述原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,包括:若加載失敗,則從所述編譯引導(dǎo)鏡像文件的頭部數(shù)據(jù)中解析所述原始引導(dǎo)鏡像文件的大小,進(jìn)而獲得所述糾錯文件的偏移地址,所述糾錯文件包括糾錯文件頭部數(shù)據(jù)和糾錯文件糾錯數(shù)據(jù);通過所述糾錯文件的偏移地址,讀取所述糾錯文件頭部數(shù)據(jù);若對所述糾錯文件頭部數(shù)據(jù)校驗成功,則在所述糾錯文件頭部數(shù)據(jù)的后面獲取所述糾錯文件糾錯數(shù)據(jù),其中,所述糾錯文件頭部數(shù)據(jù)占用一頁的存儲空間;基于所述糾錯文件糾錯數(shù)據(jù),采用所述糾錯算法對所述原始引導(dǎo)鏡像文件進(jìn)行糾錯處理。
其中,若對所述糾錯文件頭部數(shù)據(jù)校驗失敗,則確定所述糾錯文件被破壞,無法對所述原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,啟動失敗。
其中,若糾錯處理失敗,則確定無法修復(fù)所述原始引導(dǎo)鏡像文件,啟動失敗。
其中,所述若糾錯處理成功,則重新加載糾錯處理后的引導(dǎo)鏡像文件,進(jìn)而啟動所述安卓系統(tǒng),包括:若糾錯處理成功,則將所述糾錯處理后的引導(dǎo)鏡像文件覆蓋所述原始引導(dǎo)鏡像文件,并重新加載糾錯處理后的引導(dǎo)鏡像文件;若重新加載成功,則啟動所述安卓系統(tǒng),并將糾錯處理后的編譯引導(dǎo)鏡像文件寫入引導(dǎo)鏡像分區(qū)中。
為解決上述技術(shù)問題,本申請采用的另一個技術(shù)方案是:提供一種移動設(shè)備。所述移動設(shè)備包括:處理器、存儲器以及通信電路,所述處理器分別耦接所述存儲器和所述通信電路,所述處理器、所述存儲器、所述通信電路用于在工作時能夠?qū)崿F(xiàn)上述方法中的步驟。
為解決上述技術(shù)問題,本申請采用的又一個技術(shù)方案是:提供一種具有存儲功能的裝置。所述裝置上存儲有程序數(shù)據(jù),所述程序數(shù)據(jù)用于被執(zhí)行時實現(xiàn)上述方法中的步驟。
本申請實施例的有益效果是:區(qū)別于現(xiàn)有技術(shù),本申請實施例利用糾錯算法對原始引導(dǎo)鏡像文件進(jìn)行糾錯編碼,當(dāng)加載編譯引導(dǎo)鏡像文件失敗時,采用該糾錯算法對該原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,并在糾錯成功后重新加載糾錯處理后的引導(dǎo)鏡像文件,以啟動該安卓系統(tǒng),對原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,能夠改善因原始引導(dǎo)鏡像文件損壞,而導(dǎo)致加載編譯引導(dǎo)鏡像文件失敗的問題,進(jìn)而能夠提高安卓系統(tǒng)啟動的成功率。
附圖說明
圖1是本申請安卓系統(tǒng)的啟動方法一實施例的流程示意圖;
圖2是圖1實施例的編譯引導(dǎo)鏡像文件的結(jié)構(gòu)示意圖;
圖3是圖1實施例中步驟102的方法流程示意圖;
圖4是本申請移動設(shè)備一實施例的結(jié)構(gòu)示意圖;
圖5是本申請具有存儲功能的裝置一實施例的結(jié)構(gòu)示意圖。
具體實施方式
安卓系統(tǒng)是一種基于linux的開源移動操作系統(tǒng)。安卓系統(tǒng)啟動流程主要分為啟動linux系統(tǒng)階段及啟動安卓系統(tǒng)階段,其中,啟動linux系統(tǒng)即為引導(dǎo)加載階段,主要為加載引導(dǎo)鏡像文件及內(nèi)核,啟動安卓系統(tǒng)的階段主要是加載初始進(jìn)程,該初始進(jìn)程是由該內(nèi)核啟動的用戶級進(jìn)程,是安卓系統(tǒng)的第一個進(jìn)程,該初始進(jìn)程啟動后,整個安卓系統(tǒng)就啟動了。引導(dǎo)鏡像文件是安卓系統(tǒng)自定義的文件,其頭部有特殊的信息,用于保證該引導(dǎo)鏡像文件能被正確加載,它是安卓系統(tǒng)啟動非常關(guān)鍵的一個文件。如果該文件的內(nèi)容出現(xiàn)損壞,會導(dǎo)致安卓系統(tǒng)啟動失敗。
請一并參閱圖1、圖2,圖1是本申請安卓系統(tǒng)的啟動方法一實施例的流程示意圖;圖2是圖1實施例的編譯引導(dǎo)鏡像文件的結(jié)構(gòu)示意圖。本實施例安卓系統(tǒng)的啟動方法具體包括以下步驟:
步驟101:在安卓系統(tǒng)啟動的引導(dǎo)加載階段,加載編譯引導(dǎo)鏡像文件201,其中,編譯引導(dǎo)鏡像文件201包括原始引導(dǎo)鏡像文件202和糾錯文件203,糾錯文件203是采用糾錯算法對原始引導(dǎo)鏡像文件202進(jìn)行計算而得到的。
本實施例的原始引導(dǎo)鏡像文件202由頭部數(shù)據(jù)204、內(nèi)核205及虛擬內(nèi)存盤206組成。本實施例的糾錯文件203設(shè)置于原始引導(dǎo)鏡像文件202的后面。當(dāng)然在其它實施例中,糾錯文件203還可以設(shè)置于原始引導(dǎo)鏡像文件202的其它位置,如頭部數(shù)據(jù)204前面等。
可選地,本實施例的糾錯算法為前向糾錯算法,該算法是在原始引導(dǎo)鏡像文件202的信息碼元序列上附加一些監(jiān)督碼元,這些多余的監(jiān)督碼元與信息碼元之間以某種規(guī)則相互關(guān)聯(lián)。在后續(xù)安卓系統(tǒng)端啟動過程中,按照該規(guī)則檢驗信息碼元與監(jiān)督碼元之間的關(guān)系,一旦原始引導(dǎo)鏡像文件202發(fā)生差錯,其信息碼元與監(jiān)督碼元之間的關(guān)系將受到破壞,從而可以發(fā)現(xiàn)錯誤,且糾正該錯誤。這種糾錯算法的實時性較好。當(dāng)然,在其它實施例中,可以采用自動請求重發(fā)、混合糾錯、比特交織等相關(guān)算法對原始引導(dǎo)鏡像文件202進(jìn)行計算,以得到編譯引導(dǎo)鏡像文件201。
可選地,本實施例的前向糾錯算法采用里德-所羅門(reed-solomon,rs)碼實現(xiàn)。rs碼是前向糾錯的信道編碼,既可以糾正隨機(jī)錯誤,還可以糾正突發(fā)錯誤,具有很強(qiáng)的糾錯能力。rs碼具體實現(xiàn)過程為:在發(fā)送端對多個點上對多項式求冗余,然后將其傳輸或者存儲,當(dāng)接收端正確的收到足夠的點后,它就可以恢復(fù)原來的多項式,即使接收到的多項式上有很多點被噪聲干擾失真。
本實施例采用rs碼的具體模型為rs(255,n),其中,n表示n個原始信息碼元,形成碼長為255的數(shù)據(jù),t=(255-n)/2,t表示可糾正的最大未知錯誤,n越小,t越大,可糾正的錯誤就越多,一般地,取n=253或n=251。其中,n、t均為自然數(shù)。
當(dāng)然,在其它實施例中,可以采用卷積碼或其它分組碼來代替rs碼,如格雷碼、多維奇偶校驗碼及漢明碼等。
可選地,為提高連續(xù)數(shù)據(jù)的錯誤糾正率,本實施例的糾錯文件203采用上述糾錯算法和交錯技術(shù)對原始引導(dǎo)鏡像文件202進(jìn)行計算,得到編譯引導(dǎo)鏡像文件201。具體實現(xiàn)過程為:把原始信息碼元分為n個源塊,不足的碼元以0補(bǔ)齊;取每個源塊的第i個碼元,以組成第i個信息碼元,然后利用上述糾錯算法計算糾錯碼。因此,每個糾錯碼涵蓋了橫跨n個源塊的n個碼元,每個糾錯碼可以從n個碼元中糾正t個錯誤數(shù)據(jù),對原始信息碼元來說,最多能糾正連續(xù)的t/n*t個錯誤碼元,其中t是原始碼元大小,n、t、i均為自然數(shù)。
步驟102:若編譯引導(dǎo)鏡像文件201加載失敗,則獲取糾錯文件203,進(jìn)而采用上述糾錯算法對原始引導(dǎo)鏡像文件202進(jìn)行糾錯處理。
本實施例步驟102的采用上述糾錯算法對原始引導(dǎo)鏡像文件202進(jìn)行糾錯處理與上述步驟101的采用上述糾錯算法對原始引導(dǎo)鏡像文件202進(jìn)行計算的過程是對稱的,前者是對原始引導(dǎo)鏡像文件202進(jìn)行糾錯編碼的過程,后者是對原始引導(dǎo)鏡像文件202進(jìn)行糾錯解碼的過程。
可選地,請一并參閱圖2、圖3,圖3是圖1實施例中步驟102的方法流程示意圖。本實施例的糾錯文件203包括糾錯文件頭部數(shù)據(jù)207及糾錯文件糾錯數(shù)據(jù)208。本實施例具體包括以下步驟:
步驟301:若加載失敗,則從編譯引導(dǎo)鏡像文件201的頭部數(shù)據(jù)204中解析原始引導(dǎo)鏡像文件202的大小,進(jìn)而獲得糾錯文件203的偏移地址。本實施例中,原始引導(dǎo)鏡像文件202的文件大小就是糾錯文件203的相對于原始引導(dǎo)鏡像文件202的偏移地址,因為糾錯文件203位于原始引導(dǎo)鏡像文件202的后面。
本實施例的原始引導(dǎo)鏡像文件202的頭部數(shù)據(jù)204、內(nèi)核205及虛擬內(nèi)存盤205分別占用一頁或多頁的存儲空間,一頁通常是操作系統(tǒng)為程序分配的,或內(nèi)存?zhèn)鬏?,或外存?zhèn)鬏數(shù)淖钚卧?。本實施例不限定一頁的大小,可以?024字節(jié)、2048字節(jié)等。
其中,原始引導(dǎo)鏡像文件202的頭部數(shù)據(jù)204的數(shù)據(jù)結(jié)構(gòu)如下:
structboot_img_hdr
{
unsignedcharmagic[boot_magic_size];
unsignedkernel_size;//sizeinbytes,內(nèi)核205大小
unsignedkernel_addr;//physicalloadaddr,內(nèi)核205地址
unsignedramdisk_size;//sizeinbytes,虛擬內(nèi)存盤206大小
unsignedramdisk_addr;//physicalloadaddr,虛擬內(nèi)存盤206地址
unsignedsecond_size;//sizeinbytes
unsignedsecond_addr;//physicalloadaddr
unsignedtags_addr;//physicaladdrforkerneltags
unsignedpage_size;//flashpagesizeweassume,一頁大小
unsignedunused;//futureexpansion:shouldbe0
unsignedos_version;
unsignedcharname[boot_name_size];//asciizproductname
unsignedcharcmdline[boot_args_size];
unsignedid[8];//timestamp/checksum/sha1/etc
};
可知,原始引導(dǎo)鏡像文件202的頭部數(shù)據(jù)204中定義了內(nèi)核205的大小及虛擬內(nèi)存盤206的大小,且頭部數(shù)據(jù)204的大小也由其數(shù)據(jù)結(jié)構(gòu),因此,從頭部數(shù)據(jù)204重可解析得到原始引導(dǎo)鏡像文件202的大小。
步驟302:通過糾錯文件203的偏移地址,讀取糾錯文件頭部數(shù)據(jù)207。通過上述分析可知,糾錯文件頭部數(shù)據(jù)207的地址為原始引導(dǎo)鏡像文件202的存儲地址加上原始引導(dǎo)鏡像文件202的大小。
步驟303:若對糾錯文件頭部數(shù)據(jù)207校驗成功,則在糾錯文件頭部數(shù)據(jù)207的后面獲取糾錯文件糾錯數(shù)據(jù)208。本實施例的糾錯文件頭部數(shù)據(jù)207占用一頁的存儲空間,因此糾錯文件糾錯數(shù)據(jù)208的存儲地址位為糾錯文件頭部數(shù)據(jù)207加上一頁存儲空間所占用的地址。
其中,糾錯文件頭部數(shù)據(jù)207的數(shù)據(jù)結(jié)構(gòu)如下:
structfec_header{
uint32_tmagic;//magic,mustbe0xfecfecfe
uint32_tversion;//fecversion,mustbe0
uint32_tsize;//theheadersize
uint32_troots;//themaxsizecancorrected,roots=t
uint32_tfec_size;//thesizeoffec,notincludetheheader
uint64_tinp_size;//thedatasizeoferrorcorrectingcode
uint8_thash[sha256_digest_length];//fechash
}fec_header;
本實施例對糾錯文件頭部數(shù)據(jù)207的校驗主要是對其數(shù)據(jù)結(jié)構(gòu)中的各變量進(jìn)行校驗,只有當(dāng)所有的變量均校驗成功后,對糾錯文件頭部數(shù)據(jù)207校驗才成功。其中,各參數(shù)校驗具體包括:校驗變量magic是否為0xfecfecfe,該值是在編譯原始引導(dǎo)鏡像文件202時設(shè)置的約定值;校驗變量version是否為0,該值是在編譯原始引導(dǎo)鏡像文件202時設(shè)置的約定值;校驗變量size是否為fec_header結(jié)構(gòu)體的大??;檢驗變量roots是否能被2整除,并且取值范圍在0至255之間;校驗變量fec_size是否為糾錯文件203的大小與糾錯文件頭部數(shù)據(jù)207大小的差值;校驗變量inp_size是否為原始引導(dǎo)鏡像文件202的內(nèi)核205及虛擬內(nèi)存盤206的大小之和;校驗變量hash是否與新的hash值一致。
若對糾錯文件頭部數(shù)據(jù)207校驗失敗,則確定糾錯文件203被破壞,無法對原始引導(dǎo)鏡像文件202進(jìn)行糾錯處理,安卓系統(tǒng)啟動失敗。
步驟304:基于糾錯文件203糾錯數(shù)據(jù),采用上述糾錯算法對原始引導(dǎo)鏡像文件202進(jìn)行糾錯處理。該糾錯算法在上述實施例中進(jìn)行了詳細(xì)的敘述,這里不重復(fù)。
步驟103:若糾錯處理成功,則重新加載糾錯處理后的引導(dǎo)鏡像文件,進(jìn)而啟動安卓系統(tǒng)。具體地,若糾錯處理成功,則將糾錯處理后的引導(dǎo)鏡像文件覆蓋原始引導(dǎo)鏡像文件202,并重新加載糾錯處理后的引導(dǎo)鏡像文件;若重新加載成功,則啟動安卓系統(tǒng),并將糾錯處理后的編譯引導(dǎo)鏡像文件寫入引導(dǎo)鏡像分區(qū)中。因每次啟動linux系統(tǒng)時,都會先將編譯引導(dǎo)鏡像文件201以讀文件的方式保存到隨機(jī)存取存儲器中,因此,對原始引導(dǎo)鏡像文件202的糾錯處理是在隨機(jī)存取存儲器中進(jìn)行,當(dāng)每次關(guān)閉安卓系統(tǒng)后,隨機(jī)存取存儲器都會清零,因此本實施例將糾錯處理后的編譯引導(dǎo)鏡像文件寫入引導(dǎo)鏡像分區(qū)中,可以保證下次開啟linux系統(tǒng)時,保存到隨機(jī)存取存儲器中的原始引導(dǎo)鏡像文件202是經(jīng)過錯糾錯處理的,可以避免重復(fù)糾錯。
若糾錯處理失敗,則確定無法修復(fù)原始引導(dǎo)鏡像文件202,安卓系統(tǒng)啟動失敗。
區(qū)別于現(xiàn)有技術(shù),本實施例利用糾錯算法對原始引導(dǎo)鏡像文件進(jìn)行糾錯編碼,當(dāng)加載編譯引導(dǎo)鏡像文件失敗時,采用該糾錯算法對該原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,并在糾錯成功后重新加載糾錯處理后的引導(dǎo)鏡像文件,以啟動該安卓系統(tǒng),通過對原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,能夠改善因原始引導(dǎo)鏡像文件損壞,而導(dǎo)致加載編譯引導(dǎo)鏡像文件失敗的問題,進(jìn)而能夠提高安卓系統(tǒng)啟動的成功率。
參閱圖4,圖4是本申請移動設(shè)備一實施例的結(jié)構(gòu)示意圖。本實施例移動終端401的操作系統(tǒng)為安卓系統(tǒng),且采用上述方法實施例對移動終端401的安卓系統(tǒng)進(jìn)行啟動。關(guān)于安卓系統(tǒng)的啟動方法在上述方法實施例中進(jìn)行了詳細(xì)的敘述,這里不贅述。本實施例移動終端401包括:處理器402、存儲器403以及通信電路404,處理器402分別耦接存儲器403和通信電路404,處理器402、存儲器403、通信電路404在工作時能夠?qū)崿F(xiàn)上述方法實施例的安卓系統(tǒng)啟動方法,以啟動移動終端401。
本實施例移動終端401可以是但不局限于手機(jī)、平板電腦、電視機(jī)、手表等。
區(qū)別于現(xiàn)有技術(shù),本實施例通過對原始引導(dǎo)鏡像文件進(jìn)行糾錯處理,能夠改善因原始引導(dǎo)鏡像文件損壞,而導(dǎo)致加載編譯引導(dǎo)鏡像文件失敗的問題,進(jìn)而能夠提高安卓系統(tǒng)啟動的成功率。
參閱圖5,圖5是本申請具有存儲功能的裝置一實施例的結(jié)構(gòu)示意圖。本實施例具有存儲功能的裝置501存儲有程序數(shù)據(jù)502,程序數(shù)據(jù)502被執(zhí)行時實現(xiàn)上述方法實施例的方法,以啟動安卓系統(tǒng)。關(guān)于安卓系統(tǒng)的啟動方法在上述方法實施例中進(jìn)行了詳細(xì)的敘述,這里不贅述。
本實施例可以是但不局限于u盤、sd卡、pd光驅(qū)、移動硬盤、大容量軟驅(qū)、閃存、多媒體記憶卡等。
區(qū)別于現(xiàn)有技術(shù),本實施例能夠提高安卓系統(tǒng)啟動的成功率。
以上所述僅為本申請的實施方式,并非因此限制本申請的專利范圍,凡是利用本申請說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本申請的專利保護(hù)范圍內(nèi)。