本發(fā)明涉及計(jì)算機(jī)的數(shù)據(jù)通訊領(lǐng)域,更具體地說(shuō)是涉及一種快速有效的安卓Sparse格式鏡像下載方法。
背景技術(shù):
數(shù)據(jù)傳輸是主機(jī)和設(shè)備端兩方的軟件相互配合完成的,安卓設(shè)備鏡像一般分為Bootloader/BIOS,Boot,System,Modem,User等。其中,System的大小一般超過(guò)1GB,System鏡像的下載對(duì)主機(jī)和手機(jī)等設(shè)備的硬件性能要求較高,同時(shí)考慮到用戶的使用需求,對(duì)數(shù)據(jù)傳輸?shù)乃俣纫笠草^高,即實(shí)現(xiàn)快速下載。
傳統(tǒng)的安卓鏡像下載方法主要有兩種,具體描述如下:
方法一:如圖1所示,如果System鏡像是壓縮zip包,具體下載步驟為:
S1:將所有的鏡像存儲(chǔ)在主機(jī)硬盤(pán)上;
S2:通過(guò)下載工具,將鏡像加載到主機(jī)內(nèi)存,并通過(guò)USB傳輸?shù)皆O(shè)備端;
S3:設(shè)備端接收來(lái)自主機(jī)的鏡像,并將鏡像存儲(chǔ)在cache分區(qū)(android默認(rèn))或者直接寫(xiě)入RAM中;
S4:將鏡像寫(xiě)入設(shè)備存儲(chǔ)介質(zhì)EMMC;
S5:寫(xiě)入完成并做校驗(yàn)后,發(fā)送“OK”ACK值反饋給主機(jī);
S6:結(jié)束下載。
方法一的安卓鏡像下載方法的缺點(diǎn)有:
(1)S2中,如果System壓縮包太大,例如大于1GB,則主機(jī)需具備不低于1.5GB的內(nèi)存配置;
(2)S2中,如果是多線程同時(shí)下載,那么主機(jī)需要的內(nèi)存配置更是遠(yuǎn)大于1GB;
(3)S3中,鏡像通過(guò)USB傳輸?shù)皆O(shè)備端,需要先寫(xiě)入cache分區(qū),然后解壓縮并依次寫(xiě)入EMMC,這里花費(fèi)了額外的時(shí)間去寫(xiě)EMMC cache分區(qū);
(4)S3中,鏡像通過(guò)USB傳輸?shù)皆O(shè)備端,如果直接寫(xiě)入RAM中,則RAM需要大于System鏡像的大小,而很多設(shè)備都無(wú)法滿足;
(5)S4中,寫(xiě)入EMMC的過(guò)程需要每個(gè)bit都寫(xiě),從而浪費(fèi)了大量的時(shí)間;
(6)從主機(jī)端到設(shè)備端,一旦傳輸過(guò)程中斷,就需要從頭開(kāi)始。
方法二:如圖2所示,如果System鏡像是Sparse格式,假設(shè)其大小為1GB,具體下載步驟為:
S1:將所有的鏡像存儲(chǔ)在主機(jī)硬盤(pán)上;
S2:通過(guò)fastboot命令,將鏡像按照一定大小分為若干塊,設(shè)分別命名為塊1、塊2、塊3、塊4;
S3:將塊1加載到主機(jī)內(nèi)存,并通過(guò)USB傳輸?shù)皆O(shè)備端;
S4:設(shè)備端讀取主機(jī)發(fā)送的鏡像,并寫(xiě)入RAM中;
S5:鏡像從RAM寫(xiě)入設(shè)備存儲(chǔ)介質(zhì)EMMC;
S6:寫(xiě)入完成并做校驗(yàn)后,發(fā)送“OK”ACK值反饋給主機(jī);
S7:主機(jī)收到“OK”ACK值后,重復(fù)步驟S3至S5,將塊2寫(xiě)入設(shè)備存儲(chǔ)介質(zhì)EMMC,接著塊3、塊4執(zhí)行類(lèi)似操作;
S8:結(jié)束下載。
方法二的安卓鏡像下載方法的缺點(diǎn)有:
(1)鏡像塊1、2、3、4被依次寫(xiě)入設(shè)備存儲(chǔ)介質(zhì)EMMC,只有當(dāng)前面的鏡像塊傳輸并寫(xiě)入完成后才能傳輸及寫(xiě)入后面的鏡像塊,因此未能合理利用多線程寫(xiě)入機(jī)制,浪費(fèi)了大量的時(shí)間;
(2)如果分割的鏡像塊過(guò)大,仍然對(duì)主機(jī)和設(shè)備的硬件性能有嚴(yán)格限制。
因此,找到一種對(duì)硬件配置需求低,同時(shí)下載速度較快的安卓鏡像下載方法顯得十分必要,能大大節(jié)省下載時(shí)間,提升下載效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明克服現(xiàn)有安卓鏡像下載方法的不足,提出一種快速有效的安卓Sparse格式鏡像下載方法,解決了傳統(tǒng)安卓鏡像下載方法對(duì)主機(jī)和設(shè)備硬件性能的限制,同時(shí)大大節(jié)省了下載時(shí)間,提升了下載效率。
與傳統(tǒng)的安卓鏡像下載方法相比,本發(fā)明將數(shù)據(jù)以包的形式組織,以批量傳輸?shù)姆绞桨l(fā)送,同時(shí)引入FIFO隊(duì)列,將前一塊的數(shù)據(jù)先存入FIFO隊(duì)列,即可進(jìn)行下一塊數(shù)據(jù)的傳輸,從而使寫(xiě)入EMMC步驟和從主機(jī)到設(shè)備的數(shù)據(jù)傳輸步驟可以并行進(jìn)行,大大節(jié)省了下載時(shí)間。
實(shí)現(xiàn)本發(fā)明的技術(shù)方案如下:
一種快速有效的安卓Sparse格式鏡像下載方法,包括如下步驟:
S301:將Sparse格式的鏡像存儲(chǔ)在主機(jī)硬盤(pán)上;
S302:通過(guò)fastboot命令,將system鏡像分割為若干塊,分別命名為塊1、塊2、塊3、塊4……;
S303:將每個(gè)塊再次分割為若干個(gè)包,設(shè)塊1分割的包命名為包11、包12……,其他塊類(lèi)似處理;
S304:將包11加載到主機(jī)內(nèi)存并通過(guò)USB傳輸?shù)皆O(shè)備端;
S305:設(shè)備端讀取包11數(shù)據(jù)并寫(xiě)入RAM;
S306:將包12加載到主機(jī)內(nèi)存并通過(guò)USB傳輸?shù)皆O(shè)備端;
S307:設(shè)備端讀取包12數(shù)據(jù)并寫(xiě)入RAM;塊1的其他包同樣處理;
S308:判斷塊1是否為Sparse格式,如果是的話,存入FIFO隊(duì)列;否則,不存入;
S309:開(kāi)始執(zhí)行寫(xiě)操作,將塊1寫(xiě)入EMMC;
S310:設(shè)備端發(fā)送ACK值給主機(jī);
S311:主機(jī)收到ACK值,重復(fù)步驟S303至S308,將塊2分包分別傳輸?shù)皆O(shè)備端、存入FIFO隊(duì)列;接著塊3、塊4……進(jìn)行同樣的操作,存入到FIFO隊(duì)列;
S312:設(shè)備端的主進(jìn)程監(jiān)測(cè)鏡像寫(xiě)入EMMC的進(jìn)度,并分別完成塊1、塊2、塊3、塊4……的寫(xiě)入;
S313:設(shè)備端的主進(jìn)程監(jiān)測(cè)到所有的鏡像塊都寫(xiě)入到EMMC后,發(fā)送“OK”ACK值反饋給主機(jī);
S314:主機(jī)收到“OK”ACK值后,結(jié)束下載。
進(jìn)一步,所述步驟S302中,若System鏡像的大小為1.0GBytes,可按照300M的大小分割System鏡像,分割的塊1、塊2、塊3、塊4的大小分別為288M、312M、294M、130M。
進(jìn)一步,所述步驟S303中,可按照160M將塊1分割得到包11、包12的大小為160M、128M;塊2分割得到的包21、包22的大小為160M、152M;塊3分割得到包31、包32的大小分別為150M和144M;塊4分割得到包41、包42的大小分別為70M和60M。
進(jìn)一步,還包括所有分割的包在內(nèi)存中存放的地址可通過(guò)軟件明確定義,下載完成后,對(duì)應(yīng)的指令指針指向鏡像存放的起始地址。
進(jìn)一步,還包括所有分割的包從主機(jī)內(nèi)存?zhèn)鬏數(shù)皆O(shè)備端時(shí),數(shù)據(jù)包傳輸?shù)母袷桨ㄐr?yàn)位和數(shù)據(jù)位。
本發(fā)明的有益效果:
與傳統(tǒng)的安卓鏡像下載方法相比,本發(fā)明將數(shù)據(jù)以包的形式組織,以批量傳輸?shù)姆绞桨l(fā)送,改善了傳統(tǒng)安卓鏡像下載方法對(duì)主機(jī)和設(shè)備硬件性能的限制;同時(shí),本發(fā)明引入了FIFO隊(duì)列,將前一塊的數(shù)據(jù)先存入FIFO隊(duì)列,即可進(jìn)行下一塊數(shù)據(jù)的傳輸,從而使寫(xiě)入EMMC步驟和從主機(jī)到設(shè)備的數(shù)據(jù)傳輸步驟可以并行進(jìn)行,大大節(jié)省了下載時(shí)間,提高了下載效率。因此它改善了傳統(tǒng)安卓鏡像下載方法的不足,實(shí)現(xiàn)在較低的硬件配置需求下達(dá)到較快的安卓鏡像下載速度。
附圖說(shuō)明
圖1是背景技術(shù)中方法一所述的System鏡像是壓縮zip包的傳統(tǒng)的安卓鏡像下載流程;
圖2是背景技術(shù)中方法二所述的System鏡像是Sparse格式的傳統(tǒng)的安卓鏡像下載流程;
圖3是本發(fā)明所述的安卓鏡像下載流程。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明提出的一種快速有效的安卓Sparse格式鏡像下載方法作進(jìn)一步詳述。
如圖3所示,本發(fā)明所述的一種快速有效的安卓Sparse格式鏡像下載方法,具體步驟如下:
S301:將鏡像存儲(chǔ)在主機(jī)硬盤(pán)上,System鏡像為Sparse格式,假設(shè)大小為1.0GB;
S302:通過(guò)fastboot命令,將system鏡像分割為若干塊;針對(duì)1.0GB大小的System鏡像,按照300M的大小分割system鏡像,得到四個(gè)塊,塊1、塊2、塊3、塊4,且分割的塊1、塊2、塊3、塊4的大小分別為288M、312M、294M、130M;
S303:將每個(gè)塊分別再次分割為若干包;針對(duì)S302中塊的大小,將塊1再次分割為2個(gè)包,分別命名為包11、包12;按照160M將塊1分割得到包11、包12的大小為160M、128M;塊2分割得到的包21、包22的大小為160M、152M;塊3分割得到包31、包32的大小分別為150M和144M;塊4分割得到包41、包42的大小分別為70M和60M。
S304:包11被加載到主機(jī)內(nèi)存并通過(guò)USB傳輸?shù)皆O(shè)備端;
S305:設(shè)備端讀取包11數(shù)據(jù)并寫(xiě)入RAM;
S306:包12被加載到主機(jī)內(nèi)存并通過(guò)USB傳輸?shù)皆O(shè)備端;
S307:設(shè)備端讀取包12數(shù)據(jù)并寫(xiě)入RAM;
S308:判斷塊1是否為Sparse格式,如果是的話,存入FIFO隊(duì)列;否則,不寫(xiě)入;
S309:開(kāi)始將塊1寫(xiě)入EMMC,注意此處只是執(zhí)行開(kāi)始寫(xiě)操作,并不是寫(xiě)完;
S310:設(shè)備端發(fā)送ACK值給主機(jī);
S311:主機(jī)收到ACK值,重復(fù)步驟S303至S308,將塊2分包分別傳輸?shù)皆O(shè)備端,存入FIFO隊(duì)列,接著塊3、塊4執(zhí)行類(lèi)似的操作,寫(xiě)入FIFO隊(duì)列;
S312:設(shè)備端的主進(jìn)程監(jiān)測(cè)鏡像寫(xiě)入EMMC的進(jìn)度,并分別完成塊1、塊2、塊3和塊4的寫(xiě)入;
S313:設(shè)備端的主進(jìn)程監(jiān)測(cè)到所有的鏡像塊都被寫(xiě)入到EMMC后,完成校驗(yàn),并發(fā)送“OK”ACK值反饋給主機(jī);
S314:主機(jī)收到“OK”ACK值后,結(jié)束下載。
進(jìn)一步,所有分割的包在內(nèi)存中存放的地址可通過(guò)軟件明確定義,下載完成后,對(duì)應(yīng)的指令指針指向鏡像存放的起始地址;
進(jìn)一步,所有分割的包從主機(jī)內(nèi)存?zhèn)鬏數(shù)皆O(shè)備端時(shí),數(shù)據(jù)包傳輸?shù)母袷桨ㄐr?yàn)位和數(shù)據(jù)位。
上文所列出的一系列的詳細(xì)說(shuō)明僅僅是針對(duì)本發(fā)明的可行性實(shí)施方式的具體說(shuō)明,它們并非用以限制本發(fā)明的保護(hù)范圍,凡未脫離本發(fā)明技藝精神所作的等效實(shí)施方式或變更均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。