欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

支持壞塊閃存掃描的啟動(dòng)方法

文檔序號(hào):6738937閱讀:136來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):支持壞塊閃存掃描的啟動(dòng)方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種程序的裝載與啟動(dòng)方法,具體是與非閃存固件的裝載啟動(dòng)方法。
背景技術(shù)
根據(jù)與非閃存(NAND Flash)的技術(shù)要求,在出廠(chǎng)時(shí)允許有不多于2%的壞塊(badblock),主要目的在于允許可接受比例的壞塊存在可以增加產(chǎn)能,降低生產(chǎn)的成本。因此,在與非閃存的生產(chǎn)中會(huì)產(chǎn)生一些隨機(jī)的壞塊。為了防止數(shù)據(jù)存儲(chǔ)到這些壞的單元中,這些壞塊在IC燒錄前首先必須先被識(shí)別,并被標(biāo)識(shí),隔離,用戶(hù)不可見(jiàn),因此這種類(lèi)型的壞塊并不會(huì)影響與非閃存的使用。 實(shí)際上壞塊分為兩種,一種是上述的在生產(chǎn)中過(guò)程中產(chǎn)生的壞塊;另一種則是在使用中產(chǎn)生的壞塊。對(duì)于后者,這是由于與非閃存只能執(zhí)行有限的讀和擦除次數(shù),并且所有的閃存也都會(huì)因磨損而不能在使用。盡管使用中產(chǎn)生的壞塊不可能被工廠(chǎng)所標(biāo)識(shí),但通常一個(gè)塊在擦除或者燒錄其一個(gè)頁(yè)被報(bào)失敗時(shí),依據(jù)存儲(chǔ)管理算法,此塊也會(huì)被標(biāo)識(shí)成壞塊,以后就不能再訪(fǎng)問(wèn)。支持與非閃存啟動(dòng)的固件也被存儲(chǔ)在閃存上,一般對(duì)用戶(hù)不可見(jiàn),當(dāng)然,與非閃存屬于可升級(jí)閃存,用戶(hù)也可以下載新版本的固件對(duì)既有的固件進(jìn)行更新。一般情況下,一個(gè)閃存只有一份固件,并被固定存放在塊O上(出廠(chǎng)前壞塊被屏蔽,存儲(chǔ)管理定義第一個(gè)好塊為第O塊)。隨著技術(shù)的發(fā)展,固件安全性越來(lái)越多的被提出,因此,現(xiàn)在很多與非閃存會(huì)有一個(gè)固件加一個(gè)備份,以提高固件正常啟動(dòng)的成功率。當(dāng)使用中存放固件的塊成為壞塊時(shí),就無(wú)法進(jìn)行固件的加載,導(dǎo)致啟動(dòng)失敗。一般來(lái)說(shuō),對(duì)閃存存儲(chǔ)器會(huì)通過(guò)ECC (Error Correcting Code,錯(cuò)誤糾正碼)技術(shù)進(jìn)行保護(hù),如果讀取頁(yè)時(shí)發(fā)生ECC錯(cuò)誤,則說(shuō)明該塊已經(jīng)為壞塊。但ECC僅能校驗(yàn)并修正部分很簡(jiǎn)單的錯(cuò)誤,壞塊無(wú)法通過(guò)ECC進(jìn)行修復(fù)。

發(fā)明內(nèi)容
顯然,存放固件的存儲(chǔ)空間是否損壞會(huì)影響固件最終能否被加載,而影響閃存的啟動(dòng),因此,本發(fā)明的目的提供一種基于壞塊掃描的閃存啟動(dòng)方法,提高與非閃存正常啟動(dòng)的概率。那么,為了實(shí)現(xiàn)上述發(fā)明目的,一個(gè)技術(shù)方案表述如下
一種支持壞塊閃存掃描的啟動(dòng)方法,在與非閃存上分配一個(gè)存儲(chǔ)空間用于存放固件,并在固件下載時(shí),首先對(duì)所述存儲(chǔ)空間進(jìn)行壞塊掃描,把下載的固件存放到好塊中,并存儲(chǔ)多份備份;
主機(jī)引導(dǎo)接入的與非閃存啟動(dòng);
依據(jù)主機(jī)引導(dǎo)時(shí)依次掃描到的與非閃存在所述存儲(chǔ)空間查找固件,并對(duì)查找到的固件進(jìn)行錯(cuò)誤校驗(yàn),然后對(duì)錯(cuò)誤校驗(yàn)通過(guò)的固件進(jìn)行加載;若當(dāng)前固件錯(cuò)誤校驗(yàn)不通過(guò)且無(wú)法修正時(shí),則依序查找下一份可用固件;若在所述存儲(chǔ)空間查找溢出時(shí),進(jìn)入啟動(dòng)失敗處理步驟。依據(jù)上述方法,在固件下載時(shí),首先對(duì)分配的用于存放固件的與非閃存進(jìn)行壞塊掃描,確保固件存儲(chǔ)在好塊中,并存儲(chǔ)多份備份。從而,大大降低了因?yàn)闊o(wú)法讀取固件而不能啟動(dòng)的概率。這里需要注意,固件不再是固定在存放在與非閃存的塊0,而是被約束地存放在獨(dú)立開(kāi)辟的一個(gè)存儲(chǔ)空間里,這種結(jié)構(gòu)未必就會(huì)降低閃存的啟動(dòng)速度,假定在查找存儲(chǔ)空間的第 一個(gè)塊時(shí)就命中,啟動(dòng)速度與既有的啟動(dòng)方法一樣。查找被限定在有限的存儲(chǔ)空間內(nèi),可以防止掃描固件過(guò)長(zhǎng)而導(dǎo)致啟動(dòng)變慢。上述支持壞塊閃存掃描的啟動(dòng)方法,所述存儲(chǔ)空間為與非閃存的第O塊到第N塊,其中N為100 250。上述支持壞塊閃存掃描的啟動(dòng)方法,所述固件包含用于標(biāo)識(shí)該固件的固件頭,且固件頭被存儲(chǔ)到分配的好塊的第O頁(yè),并且該固件頭包含固件代碼存儲(chǔ)所占用的總頁(yè)數(shù),并對(duì)應(yīng)地包含有頁(yè)號(hào);從而,在執(zhí)行查找時(shí),以固件頭為條件查找,并在查找到固件后依此加載各頁(yè)上的固件代碼。上述支持壞塊閃存掃描的啟動(dòng)方法,加載各頁(yè)上的代碼前要進(jìn)行頁(yè)錯(cuò)誤校驗(yàn),若錯(cuò)誤校驗(yàn)失敗且不能修正,則查找下一份固件。上述支持壞塊閃存掃描的啟動(dòng)方法,在多通道閃存控制器中,在閃存啟動(dòng)時(shí),從通道O依次掃描各通道接入的與非閃存中存放的固件,直到找到相應(yīng)固件并加載,或者在遍歷各通道而沒(méi)有查找到相應(yīng)固件后進(jìn)入啟動(dòng)失敗處理步驟。上述支持壞塊閃存掃描的啟動(dòng)方法,所述啟動(dòng)失敗處理步驟為等待下載固件。上述支持壞塊閃存掃描的啟動(dòng)方法,在使用MLC或TLC架構(gòu)的與非閃存中對(duì)分配的用于存放固件的存儲(chǔ)空間在存放固件前,先依據(jù)廠(chǎng)商提供的存儲(chǔ)優(yōu)化方法優(yōu)化該存儲(chǔ)區(qū)域。上述支持壞塊閃存掃描的啟動(dòng)方法,固件代碼在分配的塊中隨機(jī)寫(xiě)入到被優(yōu)化的頁(yè)中。


圖I為依據(jù)本發(fā)明的一種支持壞塊閃存掃描的啟動(dòng)方法所依賴(lài)的體系結(jié)構(gòu)示意圖。圖2為一種支持壞塊閃存掃描的啟動(dòng)方法流程圖。
具體實(shí)施例方式參照說(shuō)明書(shū)附圖1,片上系統(tǒng)(SoC,system on chip)包括ARM核及配置的內(nèi)部存儲(chǔ)器——ROM和RAM,其中ROM存放弓I導(dǎo)代碼,用于引導(dǎo)片上系統(tǒng)啟動(dòng),一般通過(guò)片上總線(xiàn)連接與非閃存控制器,圖中的與非閃存控制器支持多通道模式。與非閃存通過(guò)閃存控制器接入片上系統(tǒng),成為外部存儲(chǔ)器,擴(kuò)展內(nèi)存。圖下下部表示的固件的存放結(jié)構(gòu),一種支持壞塊閃存掃描的啟動(dòng)方法,在與非閃存上分配一個(gè)存儲(chǔ)空間用于存放固件,圖中表示為與非閃存的前200塊。固件結(jié)構(gòu)包括固件文件頭,然后是存放在其后的頁(yè)上的固件代碼,其中固件頭存放有固件長(zhǎng)度、固件存儲(chǔ)的所有的頁(yè)位置,必要情況下,以及其他的配置信息,主要用于固件的識(shí)別。參見(jiàn)說(shuō)明書(shū)附圖2所示的一種支持壞塊閃存掃描的啟動(dòng)方法流程圖,其包括以下步驟
步驟100,CPU在啟動(dòng)時(shí),存放在ROM中的引導(dǎo)代碼進(jìn)行初始的初始化,通過(guò)閃存控制器讀取所有通道中的閃存查找固件。對(duì)于設(shè)計(jì)比較復(fù)雜的與非閃存控制器來(lái)說(shuō),會(huì)設(shè)計(jì)多通道連接與非閃存,以達(dá)到并行讀寫(xiě)處理數(shù)據(jù)的效果。對(duì)于這類(lèi)與非閃存控制器來(lái)說(shuō),設(shè)計(jì)系統(tǒng)啟動(dòng)方式通常的做法是從某一固定通道上的閃存讀取固件,這種做法死板,可靠性也差,。依據(jù)本發(fā)明,改為掃描所有通道上閃存內(nèi)的固件,加大了讀取固件成功的命中率。此外,并行掃描進(jìn)行占用較少的資源,且掃描速度并不會(huì)太慢。步驟101,依次判斷各通道中是否有與非閃存接入,若有與非閃存接入,通過(guò)與非閃存控制器預(yù)定義的協(xié)議,讀取與非閃存ID及閃存類(lèi)型,以適應(yīng)多種與非閃存的啟動(dòng),并且為后續(xù)步驟提供匹配的處理方法。若無(wú)與非閃存接入,與非閃存控制器則處于休眠的待激活狀態(tài),以節(jié)省能耗。步驟102,判斷當(dāng)前通道數(shù)是否為最大通道數(shù),如果是,則表明沒(méi)有與非閃存接入,則轉(zhuǎn)入步驟110,否則轉(zhuǎn)入步驟103。步驟110,圖中表現(xiàn)為沒(méi)有找到固件,等待下載固件;其實(shí)等待下載是一種聯(lián)機(jī)狀態(tài),如果脫機(jī)狀態(tài),表示的是一種待機(jī)狀態(tài)。當(dāng)然,如果實(shí)際與非閃存設(shè)備接入,而沒(méi)有被識(shí)別,只是啟動(dòng)失敗,那可能的情況是相關(guān)與非閃存設(shè)備需要重新刷機(jī)。步驟103,判斷當(dāng)前塊是否超出了預(yù)定的固件存儲(chǔ)區(qū),如果是,表明在連接在該通道上的與非閃存沒(méi)有找到相關(guān)固件,那么切換到步驟102,查找下一通道連接的與非閃存。如果當(dāng)前塊在預(yù)定的固件存儲(chǔ)區(qū),則轉(zhuǎn)入步驟104。關(guān)于固件存儲(chǔ)區(qū),及分配的用于存放固件的存儲(chǔ)區(qū)域,為了降低啟動(dòng)的時(shí)間,分配固件存儲(chǔ)區(qū)最好是與非閃存的前200塊,不僅能夠存放足夠多的固件,而且會(huì)減少掃描的時(shí)間。為了能夠存放足夠多的備份,分配的存儲(chǔ)空間最好不要小于100塊,并且后續(xù)的內(nèi)容還會(huì)涉及到對(duì)存儲(chǔ)結(jié)構(gòu)的優(yōu)化,能夠被用來(lái)存放固件的比較好的塊可能較少。并且隨著與非閃存的使用,塊的磨損不可避免,處于系統(tǒng)區(qū)(如存放固件的區(qū)域)與數(shù)據(jù)區(qū)磨損均衡的考量,分配的存儲(chǔ)空間最好不要小于100塊,據(jù)此可以使閃存的整體使用壽命延長(zhǎng)。當(dāng)然,也不能分配的過(guò)大,否則會(huì)占用比較多的存儲(chǔ)空間,并且關(guān)于磨損均衡的進(jìn)一步考慮,分配過(guò)多就會(huì)產(chǎn)生浪費(fèi)。同時(shí),如前所述,分配過(guò)大,會(huì)產(chǎn)生啟動(dòng)過(guò)慢的情形。因此,最多不要超過(guò)250塊。當(dāng)然,所分配的塊都位于閃存的前部,讀取速度快。參見(jiàn)說(shuō)明書(shū)附圖I下部,固件并沒(méi)有連續(xù)的存放在所述存儲(chǔ)區(qū)域,而是被隨機(jī)的分配到好的塊中,可以提高固件存儲(chǔ)的安全性。當(dāng)需要下載固件時(shí)或者重新下載固件時(shí),需要對(duì)分配的存儲(chǔ)區(qū)域進(jìn)行壞塊掃描,并且下載的固件隨機(jī)存放到好的塊中,并作多個(gè)備份;對(duì)于重新下載的固件,如果還有空閑塊,把重新下載的固件存放到空閑塊中;否則,擦除臟塊,存放新的固件。步驟104,讀取固件發(fā)生無(wú)法糾正的ECC錯(cuò)誤時(shí),會(huì)掃描下一個(gè)分配的存儲(chǔ)區(qū)域的與非閃存塊。、
掃描時(shí),首先查找具有固件文件頭的當(dāng)前與非閃存塊,即步驟105,然后按照固件文件頭中包含的固件總頁(yè)數(shù)以及固件各頁(yè)存儲(chǔ)的位置依次加在固件代碼至RAM,即步驟106和步驟108。對(duì)于步驟105和步驟106可以沒(méi)有嚴(yán)格的順序關(guān)系,雖然理應(yīng)判斷查找到的當(dāng)前塊是否含有固件文件頭似乎更應(yīng)該在前,之后才有可能存在讀取的ECC錯(cuò)誤,不過(guò)ECC校驗(yàn)也可以在判斷固件頭之前。那么更準(zhǔn)確的表述為如果當(dāng)前與非閃存塊沒(méi)有固件文件頭或者讀取發(fā)生無(wú)法糾正的ECC錯(cuò)誤時(shí),會(huì)掃描存儲(chǔ)空間的下一個(gè)與非閃存塊,即進(jìn)行步驟103。ECC錯(cuò)誤發(fā)生在讀塊和讀塊內(nèi)容兩個(gè)方面,讀塊更多的表現(xiàn)在讀取固件文件頭,若沒(méi)有讀到固件文件頭(存放在相應(yīng)塊的第O頁(yè),可以直接命中),然后在讀到固件文件頭后,就可以依據(jù)前述的讀取方法讀取其后的固件代碼,讀固件代碼的時(shí)候可能也會(huì)產(chǎn)生ECC錯(cuò)誤(步驟107),因此,ECC校驗(yàn)表現(xiàn)在讀取固件頭,避免加載錯(cuò)誤的固件,也表現(xiàn)在讀取固件代碼,避免加載損壞的固件,從而,可以有效地避免產(chǎn)生因加載錯(cuò)誤或者損壞的固件導(dǎo)致主機(jī)(嵌入式系統(tǒng))死鎖。一旦固件讀取成功,啟動(dòng)的控制權(quán)轉(zhuǎn)給固件,S卩加載固件,由固件引導(dǎo)初始化。如前所述,在每個(gè)存放固件的塊中,固件頭部分放在頁(yè)O里,固件頭中包含了固件代碼部分存放所需要占用的頁(yè)數(shù),及存放的具體頁(yè)號(hào)和必要的配置信息。這里針對(duì)MLC、TLCFlash進(jìn)行了固件存儲(chǔ)優(yōu)化,同時(shí)兼容SLC Flash存儲(chǔ),固件代碼不需要連續(xù)放置,可分別放置在優(yōu)化選擇的頁(yè)中。這樣,按照不同F(xiàn)lash特性,把固件存放在優(yōu)化的flash塊中某頁(yè)上,可顯著的提高固件存儲(chǔ)壽命。與非閃存按照存儲(chǔ)單元進(jìn)行分類(lèi),目前有三種架構(gòu),分別是MLC架構(gòu)、TLC架構(gòu)和SLC 架構(gòu),其中,SLC 和 MLC 分別是 Single Layer Cell(單層單兀)和 Multi-Level Cell(多層單元)的縮寫(xiě),SLC的特點(diǎn)是成本高、容量小、速度快,而MLC的特點(diǎn)是容量大成本低,但是速度慢。MLC的每個(gè)單元是2bit的,相對(duì)SLC來(lái)說(shuō)整整多了一倍。不過(guò),由于每個(gè)MLC存儲(chǔ)單元中存放的資料較多,結(jié)構(gòu)相對(duì)復(fù)雜,出錯(cuò)的幾率會(huì)增加,必須進(jìn)行錯(cuò)誤修正,這個(gè)動(dòng)作導(dǎo)致其性能大幅落后于結(jié)構(gòu)簡(jiǎn)單的SLC閃存。TLC與MLC具有相似的特點(diǎn),是Triple-LevelCell的縮寫(xiě),即3bit/cell,即三層單元,它的壽命更短,速度更慢,但也更便宜。為了提高固件的存儲(chǔ)壽命,在采用成本較低的MLC和TLC時(shí),要對(duì)與非閃存進(jìn)行優(yōu)化。關(guān)于與非閃存的優(yōu)化,各閃存廠(chǎng)商均提供了說(shuō)明文檔,給出了匹配的優(yōu)化方法。優(yōu)化之后的頁(yè)被存放到固件文件頭中,這樣 就可以被固件代碼存放到優(yōu)化的與非閃存的某頁(yè)上,從而,可以顯著地提高固件的存儲(chǔ)壽命。傳統(tǒng)方法一般把固件存儲(chǔ)在NOR Flash上,但價(jià)格較高;或者把固件存儲(chǔ)在NANDFlash的塊0(閃存廠(chǎng)商保證塊O為好塊)或者固定的某幾塊上,如果塊O或者使用的固定塊擦寫(xiě)次數(shù)達(dá)到一定極限時(shí),就無(wú)法完成固件啟動(dòng)。本方法采用一定的固件存放范圍,在該范圍內(nèi),可以任意選擇好與非閃存塊存儲(chǔ)固件??梢杂行У谋荛_(kāi)壞塊,動(dòng)態(tài)選擇正確固件進(jìn)行加載,靈活性高,安全性強(qiáng)。傳統(tǒng)方法只能從通道O中讀取固件,本方法能靈活的從各通道讀取固件,增加了靈活性,可靠性。傳統(tǒng)方法存儲(chǔ)固件沒(méi)有有效利用MLC、TLC的特性,本方法對(duì)此進(jìn)行了優(yōu)化,提高了固件存儲(chǔ)壽命。
另外,這里的支持壞塊閃存掃描指的是能夠在使用中產(chǎn)生壞塊的情況下掃描壞塊并下載固件。
權(quán)利要求
1.一種支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,在與非閃存上分配一個(gè)存儲(chǔ)空間用于存放固件,并在固件下載時(shí),首先對(duì)所述存儲(chǔ)空間進(jìn)行壞塊掃描,把下載的固件存放到好塊中,并存儲(chǔ)多份備份; 主機(jī)引導(dǎo)接入的與非閃存啟動(dòng); 依據(jù)主機(jī)引導(dǎo)時(shí)依次掃描到的與非閃存在所述存儲(chǔ)空間查找固件,并對(duì)查找到的固件進(jìn)行錯(cuò)誤校驗(yàn),然后對(duì)錯(cuò)誤校驗(yàn)通過(guò)的固件進(jìn)行加載;若當(dāng)前固件錯(cuò)誤校驗(yàn)不通過(guò)且無(wú)法修正時(shí),則依序查找下一份可用固件;若在所述存儲(chǔ)空間查找溢出時(shí),進(jìn)入啟動(dòng)失敗處理步驟。
2.根據(jù)權(quán)利要求I所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,所述存儲(chǔ)空間為與非閃存的第O塊到第N ±夾,其中N為100 250。
3.根據(jù)權(quán)利要求I所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,所述固件包含用于標(biāo)識(shí)該固件的固件頭,且固件頭被存儲(chǔ)到分配的好塊的第O頁(yè),并且該固件頭包含固件代碼存儲(chǔ)所占用的總頁(yè)數(shù),并對(duì)應(yīng)地包含有頁(yè)號(hào);從而,在執(zhí)行查找時(shí),以固件頭為條件查找,并在查找到固件后依此加載各頁(yè)上的固件代碼。
4.根據(jù)權(quán)利要求3所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,加載各頁(yè)上的代碼前要進(jìn)行頁(yè)錯(cuò)誤校驗(yàn),若錯(cuò)誤校驗(yàn)失敗且不能修正,則查找下一份固件。
5.根據(jù)權(quán)利要求I所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,在多通道閃存控制器中,在閃存啟動(dòng)時(shí),從通道O依次掃描各通道接入的與非閃存中存放的固件,直到找到相應(yīng)固件并加載,或者在遍歷各通道而沒(méi)有查找到相應(yīng)固件后進(jìn)入啟動(dòng)失敗處理步驟。
6.根據(jù)權(quán)利要求I或5所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,所述啟動(dòng)失敗處理步驟為等待下載固件。
7.根據(jù)權(quán)利要求I所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,在使用MLC或TLC架構(gòu)的與非閃存中對(duì)分配的用于存放固件的存儲(chǔ)空間在存放固件前,先依據(jù)廠(chǎng)商提供的存儲(chǔ)優(yōu)化方法優(yōu)化該存儲(chǔ)區(qū)域。
8.根據(jù)權(quán)利要求7所述的支持壞塊閃存掃描的啟動(dòng)方法,其特征在于,固件代碼在分配的塊中隨機(jī)寫(xiě)入到被優(yōu)化的頁(yè)中。
全文摘要
本發(fā)明公開(kāi)了一種支持壞塊閃存掃描的啟動(dòng)方法,在與非閃存上分配一個(gè)存儲(chǔ)空間用于存放固件,并在固件下載時(shí),首先對(duì)所述存儲(chǔ)空間進(jìn)行壞塊掃描,把下載的固件存放到好塊中,并存儲(chǔ)多份備份;主機(jī)引導(dǎo)接入的與非閃存啟動(dòng);依據(jù)主機(jī)引導(dǎo)時(shí)依次掃描到的與非閃存在所述存儲(chǔ)空間查找固件,并對(duì)查找到的固件進(jìn)行錯(cuò)誤校驗(yàn),然后對(duì)錯(cuò)誤校驗(yàn)通過(guò)的固件進(jìn)行加載;若當(dāng)前固件錯(cuò)誤校驗(yàn)不通過(guò)且無(wú)法修正時(shí),則依序查找下一份可用固件;若在所述存儲(chǔ)空間查找溢出時(shí),進(jìn)入啟動(dòng)失敗處理步驟。依據(jù)本發(fā)明的支持壞塊閃存掃描的啟動(dòng)方法提高與非閃存正常啟動(dòng)的概率。
文檔編號(hào)G11C29/32GK102637461SQ201210058090
公開(kāi)日2012年8月15日 申請(qǐng)日期2012年3月7日 優(yōu)先權(quán)日2012年3月7日
發(fā)明者盧方勇, 張洪柳, 李峰, 王璞 申請(qǐng)人:山東華芯半導(dǎo)體有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
会宁县| 武城县| 常山县| 嘉祥县| 百色市| 铁力市| 晋宁县| 丰镇市| 西华县| 阳西县| 五指山市| 天水市| 新河县| 昭通市| 通江县| 民乐县| 莱州市| 舞阳县| 连江县| 玉屏| 丰县| 石景山区| 建水县| SHOW| 赤峰市| 逊克县| 宁津县| 宁波市| 邹城市| 阳西县| 色达县| 甘谷县| 灵山县| 商丘市| 塔城市| 临清市| 鹤山市| 临澧县| 富顺县| 沛县| 凌源市|