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
終端
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)