uboot中對Flash和DDR的管理
《朱老師物聯網大講堂》學習筆記
學習地址:www.zhulaoshi.org
uboot中對flash和ddr的管理
uboot階段對flash的分割槽,
uboot,var,kernel,rootfs,自由。
uboot中是沒有作業系統中的,但是都有一個分割槽表決定分配方法,
這個分配不是隨意的,比如soc要從第1個扇區開始讀,我們的分配就得配合它,
在移植前,這個分配得定好,這個標準是:
uboot:uboot必須從Flash起始地址開始存放(也許是扇區0,也許是扇區1,也許是其他,取決於SoC的啟動設計),
uboot分割槽的大小一般設計為512KB或者1MB(因為一般uboot肯定不足512KB);
環境變數:環境變數分割槽一般緊貼著uboot來存放,大小為32KB或者更多一點。
kernel:kernel可以緊貼環境變數存放,大小一般為3MB或5MB或其他。
rootfs:······
剩下的就是自由分割槽,一般kernel啟動後將自由分割槽掛載到rootfs下使用
uboot必須在Flash開頭,其他分割槽相對位置是可變的。
分割槽在系統移植前確定好,在uboot中和kernel中使用同一個分割槽表。將來在系統部署時和系統程式碼中的分割槽方法也必須一樣。
uboot階段DDR的分割槽
Flash是掉電存在的,DDR是掉電消失,因此DDR每次系統執行時才開始部署使用的,
記憶體的分割槽一般是在linux核心啟動起來之前,linux核心啟動後核心的記憶體管理模組會接管整個記憶體空間,我們就不用管了,
記憶體中分割槽必須分配好,以避免各個不同功能使用了同一塊記憶體造成的互相踩踏,
比如tftp 0x23E00000 zImage去下載zImage到記憶體的0x23E00000處就會出錯,因為這個記憶體處實際是uboot的映象所在,
這樣下載會導致下載的zImage把記憶體中的uboot給沖掉。