做boot移植工作之前,首先要確定整個boot的啟動流程,根據啟動流程確定移植步驟。
首先看一下boot的啟動流程:
Bootloader執行基本的硬件初始化操作。如關閉中斷,關閉看門狗以避免處理器被復位,以及關閉MMU功能,關閉處理器緩存(數據緩存一定要關閉,指令緩存可以打開),設置系統時鐘,初始化內存等。這一階段代碼通常由匯編代碼編寫,為了運行下一階段的C程序還必須設置好堆棧。如果是從NAND Flash啟動,則必須通過NAND Flash控制器將bootloader代碼復制到內存。
這一階段一般用C語言編寫,大致分為一下幾步:
1)初始化各種硬件設備,如設置處理器正常工作的時鐘頻率,初始化串口等。
2)檢測系統內存,主要是確定系統內存容量以及其地址空間信息。
3)將內核映像文件加載到內存。
4)準備內核引導參數。
5)跳轉到內核的第一條指令處,開始執行內核初始化代碼,控制權轉移到內核代碼,bootload的使命結束。
基本上每個架構平臺的單板移植都需要以下移植步驟:
1、確定架構(比如ARM,MIPS,POWERPC)、平臺(比如三星、海思)、單板(fs4412、exynos_origen)
2、確認交叉開發環境(更改Makefile的CROSS_COMPILE為arm-linux-)
3、配置、編譯及燒寫(make fs4412_config;make)
燒寫時要注意環境變量的配置
4、查看串口是否有輸出
如果沒有輸出首先查找串口驅動上面的問題,再按照整個boot的啟動流程判斷哪里存在問題。
5、查看外圍設備是否正常工作(如網卡)
6、裁剪(如果使用flash較小就需要針對不需要的功能進行裁剪)