U-Boot在LPC2210上的移植分析
U-Boot移植相關硬件地址空間分配為:FLASH 2MB 0x80000000~0x801FFFFF;PSRAM 8MB 0x81000000~0x817FFFFF;以太網控制器RTL8019 0x83400000~0x8340001F。由于U-Boot源碼包中已經包含強大的網絡技術的支持和豐富的硬件驅動代碼,因此移植U-Boot到新的開發板我們上只需修改和硬件相關代碼。
移植U-Boot工作就是添加開發板硬件相關文件、配置選項、然后配置編譯。由于目前U-Boot并不支持LPC2210處理器,比較后我們選擇與 LPC2210同基于ARM7TDMI-S架構的S3C44B0處理器及相關的B2開發板,以S3C44B0和B2開發板為基礎來完成移植工作。
首先在cpu目錄下建立lpc2210目錄并在其下建立和處理器移植相關文件,為開發板取名為dx2210并在board文件夾下建立dx2210 子目錄,在SHELL環境下輸入命令cp –rf board/dave/B2 board/dx2210將B2開發板的內容復制到dx2210中,并注意修改文件中開發板名稱;在include/configs文件夾中建立配置頭文件dx2210.h,用命令cp include/configs/B2.h include/configs/dx2210.h將B2.h文件的內容復制到dx2210.h中以便與后面修改;修改頂層Makefile文件為開發板建立新的編譯選項,由于U-Boot的源代碼是通過GCC和Makefile組織編譯的。在源代碼頂層目錄下的Makefile首先設置開發板的定義,然后遞歸地調用各級子目錄下的Makefile文件,最后把編譯過的程序鏈接成U-Boot可執行映像。因此利用vim在Makefie文件中添加配置命令:
dx2210_config : unconfig
@ ./mkconfig $(@ : _config=) arm lpc2210 dx2210 NULL
各項定義如下:
arm CPU架構(ARCH)
lpc2210 CPU的類型(CPU),其對應于cpu/lpc2210子目錄
dx2210 開發板型號(BOARD), 其對應于board/dx2210子目錄
NULL 開發板或硬件經銷商(VENDER)
這樣在執行配置命令make dx2210_config,通過./config腳本可生成include/config.mk的配置文件,硬件平臺依賴文件的目錄文件可以根據這些定義來確定。
5.2修改include/configs/dx2210.h文件
在include/configs/dx2210.h文件中包含了大部分的全局宏定義。主要修改的宏定義有:#define CONFIG_LPC2210 1 //CPU配置型號
#define CONFIG_LPC2210_CLOCK_SPEED 60 //最大CPU操作頻率
#define CONFIG_DRIVER_RTL8019 1 //定義以太網控制器型號
#define RTL8019_BASE 0x83400000 //RTL8019的硬件地址
#define CONFIG_SERIAL 1 //串口設置
#define CFG_LOAD_ADDR 0x81008000 //kernel映像加載到RAM空間中的起始地址
此外還需要修改開發板的波特率,配置網絡信息,FLASH ROM和RAM的容量大小、地址信息,操作時序等參數。
5.3 cpu/lpc2210目錄下相關文件
該目錄中包含了Makefile、config.mk、cpu.c、interrupts.c、serial.c、start.S幾個文件。其中匯編文件start.S是整個Bootloader程序的入口,主要設置系統堆棧和工作方式為進入C程序奠定基礎。根據RAM地址將中斷向量表起始地址 0x0c000000修改為0x81000000,根據LPC2210的芯片手冊完成設置CPU速度和時鐘頻率、為加載Stage2準備RAM空間并將 Stage2加載到RAM中執行、設置堆棧、看門狗、屏蔽所有中斷部分的修改。這里注意的是TEXT_BASE變量是在board/dx2210 /config.mk文件中定義,它規定了主程序TEXT段在內存RAM中的起始地址,當u-boot從FLASH中啟動后會把Stage2階段的代碼和數據重定位到這個地址開始的RAM中運行以提高速度。復制時要明確Stage2的可執行映像在固態存儲設備的存放的起始地址和終止地址,一般來說給 Stage2部分在RAM地址頂端分配1MB的空間,因此經過計算得出TEXT_BASE=0x81700000;serial.c文件是串口設備的驅動代碼,在調試部分主要依靠串口產生調試信息,串口波特率設置為115200bit/s;cpu.c文件初始化CPU、由于LPC2210中并沒有指令 Cache和數據Cache,則應用源碼提供的icache_disable(void)和dcache_disable(void)兩個函數禁止這部分代碼功能;interrupt.c文件設置系統的各種中斷和異常,在Bootloader階段應禁止中斷的產生。
評論