設備變磚的思考

關於設備變磚的思考

 

  1. 背景

前段時間同事在燒錄軟件時,在uboot模式下將imgaddr變量的值寫成了8010000(正確值應該0x84000000),斷電之後,設備就變磚了,無法啓動。

雖然知道他因爲地址的原因,破壞了flash裏面的數據,但是具體討論起來,發現自己也不是很清楚,從討論中,我也總結出了一些問題。該文章主要是解析這幾個問題點。

 

  1. 問題一:flash,RAM,ROM的區別

在和王工分析的過程中,我指着開發板上的flash,如圖:

            

                              圖 1

 

說這個就是保存了我們的固件,裏面包括bootload,firmwave,SQL等信息。之前的地址0x84000000應該是我們firmwave的起始地址,你現在改爲了8010000,地址這麼小,肯定把bootload給破壞了,導致設備起不來了。我對自己的分析感到很滿意,說的頭頭是道。

 

但是後面有聽到一個硬件專家說bootload應該不會存放在flash中的,一般會內嵌在CPU中,並且一般是無法訪問的,更不可能修改。還有說板子還有另一個flash,如圖:

           

圖 2

 

聽到他的這些話,我就產生了一系列問題,好奇害死貓。於是我就向他請教,加上自己在百度的查閱,不能說豁然開朗,但的確揭露了我的盲區,有種撥雲見日的舒心。

 

首先他說的兩個觀點都是對的。圖1表示的是NOR flash ,圖2表示的是NAND flash。

NOR flash:支持片上運行,但是價格昂貴,並且因爲工藝的原因,相同的容量,NOR flash的體積比NAND flash的要大很多,所以NOR flash在工藝上就註定無法大容量。

NAND flash:不支持片上運行,容量較大以及改寫速度快等優點

通過上面的區分,我們知道uboot 一般是放在NOR flash中,我們的固件一般是放在NAND F lash中。

 

說到flash,我們就必須要提及一下內存,內存有兩種,RAM,ROM。

ROM:是隻讀存儲器,斷電後數據還在。它不能修改和擦除,只能讀取事先燒錄好的程序,比如電腦的BIOS。用途不是很廣。

RAM:就是我們平時提及的內存,斷電後數據不能保存,讀寫速度很快。如圖:

             

圖 3

 

第二點:吳工說有些bootload 是內嵌到CPU的,這個應該是有些產品這樣設計的,但是我目前還沒有遇到過這樣的設計。大部分都是uboot放在NOR flash中,Firmwave存放在NAND Flash中。

 

  1. 問題二:爲什麼王工的操作,導致設備變磚?

 

經過自己的推測和詢問,瞭解到,王工主要是做了以下兩步驟導致的出錯。

tftpboot 0x84000000 xxxx-ipq40xx-single.img 

imgaddr=0x8010000 && source $imgaddr:script 

 

第一步:通過tftpboot 將固件下載到內存中的0x84000000這個地址中(虛擬地址)。

第二部:設置環境變量,imgaddr,執行source $imgaddr:script,擦寫NOR flash和NAND Flash。

 

由於固件的地址在0x84000000,而燒錄的時候,使用的是0x801000(這個地址後面應該都是亂碼)。也就是說,NOR Flash 和NAND Flash此時裏面都是亂碼了。(可能NAND Flash還是正常的,不過NOR Flash肯定是錯誤的了)。之後斷電重啓,NOR Flash的bootload不存在,所以導致啓動不了。

 

  1. bootm從內存中啓動firmwave

後面於工的一頓操作,驚豔到了我。那就是他直接在內存中,啓動firmwave.不需要將firmwave燒錄到Flash中。

 

其實,事後自己思考了一下,覺得這其實也沒有什麼特別之處的。爲什麼呢?

因爲我們設備斷電重啓之後,都是將Flash中的firmwave拷貝到內存,再啓動的。現在這個操作不在是通過Flash的拷貝,而是通過boottftp 下載到內存中。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章