1 開發板啟動過程?
1.1 回顧芯片手冊第三章內存映射
?
對于arm來說,不是給它多大的內存都能讀。尋址空間(地址空間)讀寫范圍是有限的,尋址空間的大小與地址總線寬度有關,如32位,地址空間4G(2^32)。4412的CPU在工作的時需要讀寫內存,還需要控制硬件,讀取寄存器,所以需要規范這4G的空間。
上電PC為0,0地址執行了IROM,內部三星公司寫入了BL0(即boot load 0)
IRAM是內部的內存
SFR是特殊功能寄存器
最后3G 外擴內存(我們開發板上的內存1G,地址是0x40000000-0x80000000)
EMMC斷電不丟失,安裝系統是安裝在EMMC中,上電后再把linux從EMMC加載到SD卡
1.2 linux啟動流程
上電流程主要包括以下幾個步驟:
- BL0(固件)進行基本軟硬件初始化(這段代碼先對基本的軟硬件環境時鐘等)。
- BL0讀取撥碼開關狀態,確定啟動方式。
- 如果撥碼開關指定SD卡啟動,BL0會將SD卡中的程序復制到內存中,外部存儲器CPU無法運行。
- 然后再將對應存儲器中的uboot搬移到內存,然后跳轉到uboot運行(Universal Bootloader),進行基本軟硬件初始化。
- UBOOT將EMMC中存儲的Linux系統復制到內存中(前提是已經將Linux安裝到了EMMC)。
- 將設備樹二進制文件(Device Tree Blob,DTB)從EMMC加載到內存中,Linux系統需要用到它來配置硬件。
- 將根文件系統(Root File System,rootfs)從EMMC加載到內存中,Linux運行時需要訪問其中的文件。
- Linux系統開始運行,當系統啟動完成后,Linux再從內存中(或網絡)掛載根文件系統。
這樣,系統就完成了從上電到Linux系統正常運行的過程。在此過程中,通過讀取撥碼開關狀態和選擇不同的存儲設備,可以決定系統的啟動方式,例如從SD卡或EMMC中啟動,并將對應的程序和文件加載到內存中。
2 系統移植步驟
知道了啟動過程,那么大致需要完成系統移植的步驟也就清楚了
- uboot移植
- linux內核移植(包含設備樹)
- 根文件系統移植
3 練習
簡述開發板啟動過程?略