在基于A(yíng)DSP BF533的嵌入式Linux系統上的移植
2.3.2安裝交叉編譯器
交叉編譯是在一個(gè)架構下編譯另外一個(gè)架構的目標文件。要從http://blackfin.uclinux.org網(wǎng)站上下載Blackfin ToolChain,然后安裝并修改環(huán)境變量PATH,使其包含ToolChain的安裝目錄。
3 U-Boot啟動(dòng)兩階段
U-Boot代碼一般分為stage1和stage2兩大部分。stage1依賴(lài)于cpu體系結構如設備初始化代碼,常用匯編語(yǔ)言編寫(xiě)以達到短小精悍,提高系統運行效率的目的。它主要包括cpu/bf533目錄下的start.s。stage2一般采用C語(yǔ)言編寫(xiě)實(shí)現復雜功能,這樣代碼則具有更好的可讀性和可移植性,主要包括lib blackfin/board.c文件和common/main.c文件中main_loop函數。
stagel從cpu入口函數cpu/bf533/start.s開(kāi)始,通常包含以下步驟:
(1)基本硬件的初始化,為隨后執行kernel準備好基本的硬件環(huán)境。包括:屏蔽所有中斷,引導裝載程序的執行過(guò)程中不必執行任何中斷,中斷屏蔽可通過(guò)寫(xiě)cpu的中斷屏蔽寄存器或狀態(tài)寄存器實(shí)現;設置cpu的速度和時(shí)鐘頻率,初始化pll;RAM初始化,初始化內存控制器的各個(gè)寄存器;初始化 UART,向串口打印U-Boot的字符信息;關(guān)閉cpu內部指令,數據cache。
(2) 為加載U-Boot的stage2準備RAM空間,通常將stage2置于整個(gè)RAM空間的最頂層1 MB空間。
(3)拷貝U-Boot的stage2到RAM。判斷是否是Flash運行,如果是就將stage2的代碼拷貝到TEXT BASE處。將stage2安排到RAM空間的最頂層1 MB是較推薦的方法。
(4)設置堆棧指針sp為C語(yǔ)言代碼執行做好準備。
(5)跳轉到stage2的C語(yǔ)言代碼入口點(diǎn)。
stage2主要包括lib-blackfin/board.c中board_init_f、board_init_r函數以及common/main.C中main_loop函數。通常包含以下步驟:
(1)初始化此階段需用的硬件設備,由board_init_f和board_init_r函數實(shí)現。
(2)內存映射檢測。
(3)加載內核并為內核設置啟動(dòng)參數。
(4)調用內核。
4 U-BOOt的移植
4.1 U-Boot方法與要點(diǎn)
移植U-Boot簡(jiǎn)便的方法是從U-Boot支持的開(kāi)發(fā)板中選擇一個(gè)與其目標板接近的開(kāi)發(fā)板進(jìn)行修改。需修改的是與硬件相關(guān)的部分,涉及到兩個(gè)層面:針對CPU的移植,由于U-Boot_1.1.3支持BF533,故只需做第二層面的移植:針對目標板硬件的移植。在移植前,需仔細閱讀U- Boot/readme文件,該文件對目錄結構和如何移植作了簡(jiǎn)要介紹。從移植U-Boot的最小要求、U-Boot能夠正常啟動(dòng)的角度出發(fā),選擇 BF533的STAMP板為模板,相關(guān)源代碼在/board/stamp目錄下,結合U-Boot的啟動(dòng)流程,主要修改文件如下:
(1)與目標板相關(guān)的代碼部分:在board下創(chuàng )建mybf533目錄,無(wú)需從頭開(kāi)始,參考與目標板相似的STAMP板在mybf533目錄下創(chuàng )建 mybf533.c、mybf533.h、flash.c、config.mk、Makefie等文件。需要修改/board/mybf533 /config.mk:
TFEXT_BASE用于設置程序編譯鏈接的起始地址即將U-Boot的stage2拷貝到SDRAM的TEXT_BASE處,即SDRAM最頂層一段存儲區。修改board/mybf533/Makefile:
(2)與CPU相關(guān)的代碼部分:U-Boot_1.1.3/epu文件中含有BF533的目錄,其中包含start.s、cpu.c、cpu.h、interrupt.c、init_sdram.s等。故不需要建立與cpu相關(guān)的文件目錄。
評論