啟動流程 1、 Stage1 start.S代碼結構 u boot的stage1代碼通常放在start.S文件中,用彙編語言,主要實現功能如下: (1) 定義入口: 該工作通過修改連接器腳本來完成。 (2)設置異常向量(Exception Vector)。 (3)設置CPU的速度、時鐘頻率及終端控制 ...
啟動流程
1、 Stage1
start.S代碼結構 u-boot的stage1代碼通常放在start.S文件中,用彙編語言,主要實現功能如下:
(1) 定義入口: 該工作通過修改連接器腳本來完成。
(2)設置異常向量(Exception Vector)。
(3)設置CPU的速度、時鐘頻率及終端控制寄存器。
(4)初始化記憶體控制器。
(5)將ROM中的程式複製到RAM中。
(6)初始化堆棧。
(7)轉到RAM中執行,該工作可使用指令ldr pc來完成。
bl lowlevel_init
跳轉到arm926ejs裡面的spl.c
2、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
一、初始化硬體
board_init_r() (u-boot15/arch/arm/board.c)
————>board_init()(sl8541e_1h10.c)
————>stdio_init()
————>drv_lcd_init() (common/lcd.c)