展訊平臺uboot啓動流程

啓動流程

一、 Stage1

start.S代碼結構 u-boot的stage1代碼一般放在start.S文件中,用匯編語言,主要實現功能以下: 網絡

(1) 定義入口: 該工做經過修改鏈接器腳原本完成。 函數

(2)設置異常向量(Exception Vector)。 code

(3)設置CPU的速度、時鐘頻率及終端控制寄存器。內存

(4)初始化內存控制器。 it

(5)將ROM中的程序複製到RAM中。 io

(6)初始化堆棧。 ejs

(7)轉到RAM中執行,該工做可以使用指令ldr pc來完成。循環

bl lowlevel_init跳轉到arm926ejs裏面的spl.c終端

二、Stage2

C語言代碼部分 lib_arm/board.c中的start arm boot是C語言開始的函數也是整個啓動代碼中C語言的主函數,同時仍是整個u-boot(armboot)的主函數,該函數只要完成以下操做:硬件

(1)調用一系列的初始化函數。

(2)初始化Flash設備。 

(3)初始化系統內存分配函數。 

(4)若是目標系統擁有NAND設備,則初始化NAND設備。 

(5)若是目標系統有顯示設備,則初始化該類設備。
//LCM 

(6)初始化相關網絡設備,填寫IP、MAC地址等。 

(7)進去命令循環(即整個boot的工做循環),接受用戶從串口輸入的命令,而後進行相應的工做。

u-boot\arch\arm\cpu\armv7\start.S
.globl _start
_start: b reset
… …
jump_2_ram:
… …
_board_init_r_ofs:
.word board_init_r - _start    //調用 uboot/arch/arm/lib/ board.c 是C 語言開始的函數也是整個啓動代碼中C語言的主函數,進入Stage2

u-boot\arch\arm\lib\board.c

1、初始化硬件

board_init_r() (u-boot15/arch/arm/board.c)
————>board_init()(sl8541e_1h10.c)
————>stdio_init()  
————>drv_lcd_init()  (common/lcd.c)
相關文章
相關標籤/搜索