1. 程式人生 > >uboot階段對Flash和DDR的分割槽管理

uboot階段對Flash和DDR的分割槽管理

1、uboot階段Flash的分割槽

(1)在uboot中是沒有作業系統的,所以我們不能由作業系統進行分割槽管理。因此我們對Flash(相當於硬碟)的管理必須事先使用分割槽界定(實際上在uboot中和kernel中都有個分割槽表,分割槽表就是我們在做系統移植時對Flash的整體管理分配方法)。有了這個界定後,我們在部署系統時按照分割槽界定方法來部署,uboot和kernel的軟體中也是按照這個分割槽界定來工作,就不會錯。

(2)分割槽方法不是一定的,不是固定的,是可以變動的。但是在一個移植中必須事先設計好定死,一般在設計系統移植時就會定好,定的標準是:

uboot:uboot必須從Flash起始地址開始存放(也許是扇區0,也許是扇區1,也許是其他,取決於SoC的啟動設計),uboot分割槽的大小必須保證uboot肯定能放下,一般設計為512KB或者1MB(因為一般uboot肯定不足512KB,給再大其實也可以工作,但是浪費);

環境變數:環境變數分割槽一般緊貼著uboot來存放,大小為32KB或者更多一點。

kernel:kernel可以緊貼環境變數存放,大小一般為3MB或5MB或其他。

rootfs:······

剩下的就是自由分割槽,一般kernel啟動後將自由分割槽掛載到rootfs下使用

 

總結:一般規律如下:

(1)各分割槽彼此相連,前面一個分割槽的結尾就是後一個分割槽的開頭。

(2)整個flash充分利用,從開頭到結尾。

(3)uboot必須在Flash開頭,其他分割槽相對位置是可變的。

(4)各分割槽的大小由系統移植工程師自己來定,一般定為合適大小(不能太小,太小了容易溢位;不能太大,太大了浪費空間)

(5)分割槽在系統移植前確定好,在uboot中和kernel中使用同一個分割槽表。將來在系統部署時和系統程式碼中的分割槽方法也必須一樣。

 

2、uboot階段DDR的分割槽

(1)DDR的分割槽和Flash的分割槽不同,主要是因為Flash是掉電存在的,而DDR是掉電消失,因此可以說DDR是每次系統執行時才開始部署使用的。

(2)記憶體的分割槽主要是在linux核心啟動起來之前,linux核心啟動後核心的記憶體管理模組會接管整個記憶體空間,那時候就不用我們來管了。

(3)注意記憶體分割槽關鍵就在於記憶體中哪一塊用來幹什麼必須分配好,以避免各個不同功能使用了同一塊記憶體造成的互相踩踏。譬如說我們tftp 0x23E00000 zImage去下載zImage到記憶體的0x23E00000處就會出錯,因為這個記憶體處實際是uboot的映象所在。這樣下載會導致下載的zImage把記憶體中的uboot給沖掉。

 

來自朱友鵬老師的課堂課件