EMMC中檢測預(yù)先設(shè)定的第一地址為起始地址的、且與所述刷機(jī)文件的數(shù)據(jù)量大小相同的存儲(chǔ)區(qū)域中是否存在壞塊,若存在,則執(zhí)行步驟S300 ;若不存在,則執(zhí)行步驟S400 ;
步驟S300、改變所述預(yù)先設(shè)定的第一地址,并返回步驟S200 ;
步驟S400、將所述刷機(jī)文件寫入所述存儲(chǔ)區(qū)域中,以完成刷機(jī)。
[0021]下面結(jié)合具體的實(shí)施例對(duì)上述步驟進(jìn)行詳細(xì)的描述。
[0022]在步驟SlOO中,啟動(dòng)刷機(jī),獲取刷機(jī)文件的數(shù)據(jù)量大小。具體來說,在所述步驟SlOO之前,需要預(yù)先將刷機(jī)文件存儲(chǔ)在移動(dòng)終端的存儲(chǔ)器中;這樣移動(dòng)終端才可能進(jìn)行刷機(jī)。以手機(jī)為例,刷機(jī)文件是下載到手機(jī)的存儲(chǔ)器中,譬如EMMC中,然后手機(jī)提示用戶是否進(jìn)行刷機(jī)(若為升級(jí)文件,對(duì)應(yīng)提示用戶是否進(jìn)行系統(tǒng)升級(jí)),接收用戶的確認(rèn)操作,從而進(jìn)行后續(xù)的刷機(jī)。
[0023]在實(shí)際應(yīng)用時(shí),在所述步驟SlOO中,啟動(dòng)刷機(jī),判斷存儲(chǔ)器中是否存在刷機(jī)文件,若存在則獲取刷機(jī)文件的大小;譬如,在移動(dòng)終端菜單中有啟動(dòng)刷機(jī)的選項(xiàng),當(dāng)用戶選中該選項(xiàng)時(shí),將在存儲(chǔ)器中查找是否存在刷機(jī)文件;對(duì)于是否存在刷機(jī)文件的判斷,具體地,可以預(yù)先規(guī)定刷機(jī)文件的文件名,如規(guī)定刷機(jī)文件的文件名為os.Mn,則在存儲(chǔ)器中若查找到os.bin文件則認(rèn)為存在刷機(jī)文件,否則認(rèn)為不存在刷機(jī)文件。
[0024]在步驟S200中,在移動(dòng)終端EMMC中檢測預(yù)先設(shè)定的第一地址為起始地址的、且與所述刷機(jī)文件的數(shù)據(jù)量大小相同的存儲(chǔ)區(qū)域中是否存在壞塊,若存在,則執(zhí)行步驟S300 ;若不存在,則執(zhí)行步驟S400。具體來說,獲取預(yù)先設(shè)定的第一地址;在EMMC中檢測預(yù)先設(shè)定的第一地址為起始地址的一塊大小為所述刷機(jī)文件的大小的存儲(chǔ)區(qū)域中是否存在壞塊;如果不存在壞塊,則將刷機(jī)文件寫入所述存儲(chǔ)區(qū)域;如果存在壞塊則改變所述預(yù)先設(shè)定的第一地址,重新檢測第一地址為起始地址的、且與所述刷機(jī)文件的數(shù)據(jù)量大小相同的存儲(chǔ)區(qū)域中是否存在壞塊,直到找到一塊大小與所述刷機(jī)文件的大小相同、且沒有壞塊的存儲(chǔ)區(qū)域時(shí)為止。所述壞塊表明EMMC中的存儲(chǔ)單元有損壞,此乃現(xiàn)有技術(shù)名詞,不做贅述。
[0025]優(yōu)選地,所述步驟S200具體包括:
5201、獲取預(yù)先設(shè)定的第一地址;
5202、對(duì)EMMC中以所述預(yù)先設(shè)定的第一地址為起始地址、大小與所述刷機(jī)文件大小相同的連續(xù)存儲(chǔ)區(qū)域中的每一個(gè)地址進(jìn)行壞塊檢測;讀取所述連續(xù)存儲(chǔ)區(qū)域中任意的第二地址中存儲(chǔ)的第一數(shù)據(jù);對(duì)第一數(shù)據(jù)取反后得到第二數(shù)據(jù),并將第二數(shù)據(jù)寫入第二地址中;再次讀取第二地址中存儲(chǔ)的第三數(shù)據(jù),判斷第三數(shù)據(jù)是否為第二數(shù)據(jù),若為是則第二地址未損壞;否則第二地址損壞;
5203、檢測所述連續(xù)存儲(chǔ)區(qū)域中的各個(gè)地址,若不存在地址損壞,則認(rèn)為所述連續(xù)存儲(chǔ)區(qū)域不存在壞塊;否則所述連續(xù)存儲(chǔ)區(qū)域存在壞塊。
[0026]具體來說,獲取預(yù)先設(shè)定的地址;在EMMC中檢測預(yù)先設(shè)定的第一地址為起始地址的一塊大小與所述刷機(jī)文件大小相同的連續(xù)存儲(chǔ)區(qū)域中是否存在壞塊。可采用下面的方式進(jìn)行檢測,對(duì)EMMC中以所述預(yù)先設(shè)定的第一地址開始、大小與所述刷機(jī)文件的大小相同的連續(xù)存儲(chǔ)區(qū)域中的每一個(gè)地址進(jìn)行如下的檢測方式來檢測壞塊:
設(shè)連續(xù)存儲(chǔ)區(qū)域中任意的一個(gè)地址為a,可記為第二地址a,讀取第二地址a中存儲(chǔ)的第一數(shù)據(jù),設(shè)第一數(shù)據(jù)為b ;對(duì)第一數(shù)據(jù)b取反后得到第二數(shù)據(jù)C,并將第二數(shù)據(jù)c寫入第二地址a中。
[0027]然后,再次讀取第二地址a中存儲(chǔ)的第三數(shù)據(jù),判斷第三數(shù)據(jù)是否為第二數(shù)據(jù)C,若為是則第二地址a未損壞,否則第二地址a損壞。
[0028]采用這樣的壞塊檢測方式,對(duì)所述連續(xù)存儲(chǔ)區(qū)域中的各個(gè)地址進(jìn)行檢測。優(yōu)選地,在實(shí)際應(yīng)用時(shí),為了提高檢測速度,若在EMMC中檢測預(yù)先設(shè)定的第一地址為起始地址的、大小與所述刷機(jī)文件大小相同的連續(xù)存儲(chǔ)區(qū)域中,只要有一個(gè)地址被認(rèn)為損壞,則認(rèn)為存在壞塊;也就是說,只要檢測到一個(gè)地址損壞,則表明該連續(xù)存儲(chǔ)區(qū)域存在壞塊,那么則執(zhí)行步驟S300 ;若全部地址都沒有損壞,則表明該連續(xù)存儲(chǔ)區(qū)域不存在壞塊,那么執(zhí)行步驟S400o
[0029]在步驟S300中,改變所述預(yù)先設(shè)定的第一地址,并返回步驟S200。具體來說,根據(jù)預(yù)先設(shè)定的第一地址al和刷機(jī)文件的數(shù)據(jù)量大小a2,得到改變后的第一地址al’為al’ =al+a2,其中,al表示第一地址,a2表示刷機(jī)文件的數(shù)據(jù)量大小,al’表示改變后的第一地址;并返回步驟S200。在實(shí)際應(yīng)用時(shí),有多種地址改變方式,本發(fā)明舉了其中一個(gè)優(yōu)選實(shí)施例,若在第一地址al為起始的刷機(jī)文件大小為a2的存儲(chǔ)區(qū)域內(nèi),存在壞塊;那么則將地址向后移動(dòng)刷機(jī)文件大小a2,使得改動(dòng)后的第一地址al’為al’=al+a2。這樣,再繼續(xù)判定改動(dòng)后的第一地址al’為起始,大小為刷機(jī)文件的數(shù)據(jù)量大小a2的連續(xù)存儲(chǔ)區(qū)域內(nèi)是否有壞塊,直到找到?jīng)]有壞塊的大小為a2的連續(xù)存儲(chǔ)區(qū)域時(shí)為止。
[0030]需要說明的是,上述地址改變方式只是其中一個(gè)實(shí)施例,本發(fā)明的改變第一地址,還可將第一地址設(shè)置為第一次檢測到壞塊后的地址。具體來說,就是在連續(xù)存儲(chǔ)區(qū)域的各個(gè)地址中只要檢測到某個(gè)地址損壞,則表示有壞塊;那么檢測到第一個(gè)地址損壞,就改變預(yù)設(shè)的第一地址,也就是改變起始地址,將其移動(dòng)到損壞的地址后面,再重復(fù)本發(fā)明的步驟S200,從而帶來了大大的方便。并且,這個(gè)地址改變方式,效果更好,因?yàn)樯鲜龅牡刂犯淖兎绞剑魟偤迷谶@樣的區(qū)間選擇方式的存儲(chǔ)區(qū)域都有壞塊,那么采用本發(fā)明的方法,則無法進(jìn)行刷機(jī);但是采用將地址移動(dòng)到地址損壞后的地方,這樣的地址改變方式,會(huì)具有更多的區(qū)間選擇,成功刷新的幾率更大。
[0031]在步驟S400中,將所述刷機(jī)文件寫入所述存儲(chǔ)區(qū)域中,以完成刷機(jī)。具體來說,若第一地址為起始地址的、且與所述刷機(jī)文件的數(shù)據(jù)量大小相同的存儲(chǔ)區(qū)域中不存在壞塊,也就是說這個(gè)連續(xù)區(qū)域得每個(gè)地址都沒有損壞,那么則可將所述刷機(jī)文件寫入所述存儲(chǔ)區(qū)域中,以完成刷機(jī),也就是執(zhí)行正常的刷機(jī)流程。以移動(dòng)終端為手機(jī)為例,若用戶在手機(jī)上下載好系統(tǒng)升級(jí)文件(對(duì)應(yīng)上述的刷機(jī)文件)后,那么根據(jù)用戶的確定升級(jí)操作,便可進(jìn)行本發(fā)明的上述流程,從而進(jìn)行手機(jī)的系統(tǒng)升級(jí)。在手機(jī)中找到一個(gè)存儲(chǔ)區(qū)域,該存儲(chǔ)區(qū)域大小與系統(tǒng)升級(jí)文件相同,且沒有壞塊;然后將系統(tǒng)升級(jí)文件寫入該存儲(chǔ)區(qū)域,進(jìn)行手機(jī)升級(jí)。
[0032]本發(fā)明提供的移動(dòng)終端的刷機(jī)方法,通過啟動(dòng)刷機(jī),獲取刷機(jī)文件的大??;在EMMC中檢測預(yù)先設(shè)定的地址為起始地址的一塊大小為所述刷機(jī)文件的大小的存儲(chǔ)區(qū)域中是否存在壞塊,如果不存在壞塊則將刷機(jī)文件寫入;可以有效解決現(xiàn)有技術(shù)中當(dāng)EMMC中存在壞塊時(shí)刷機(jī)后,移動(dòng)終端系統(tǒng)異常、甚至無法使用的問題;從而保證用戶每一次刷機(jī)時(shí)都能將刷機(jī)文件寫入EMMC中沒有壞塊的區(qū)域,以達(dá)到減少系統(tǒng)故障、提高系統(tǒng)穩(wěn)定性的目的;特別可應(yīng)用于系統(tǒng)升級(jí),特別有利于移動(dòng)終端升級(jí)系統(tǒng);提供了大大的方便。
[0033]基于上述移動(dòng)終端的刷機(jī)方法,本發(fā)明實(shí)施例還提供了一種移動(dòng)終端的刷機(jī)系統(tǒng),如圖2所示,包括:
數(shù)據(jù)獲取模塊10,用于啟動(dòng)刷機(jī),獲取刷機(jī)文件的數(shù)據(jù)量大??;具體如步驟SlOO所述;
壞塊檢測模塊20,用于在移動(dòng)終端EMMC中檢測預(yù)先設(shè)定的第一地址為起始地址的、且與所述刷機(jī)文件的數(shù)據(jù)量大小相同的存儲(chǔ)區(qū)域中是否存在壞塊,若存在,則觸發(fā)地址改變模塊30 ;若不存在,則觸發(fā)數(shù)據(jù)寫入模塊40 ;具體如步驟S200所述;
地址改變模塊30,用于改變所述預(yù)先設(shè)定的第一地址,并觸發(fā)壞塊檢測模塊;