uboot啟動流程關鍵函式的介紹(二)

2021-10-07 21:32:40 字數 2218 閱讀 7031

在uboot啟動流程關鍵函式介紹(一)介紹_main函式的過程,至此以將uboot的**拷貝到ddr中,下面主要講解uboot命令的相關處理函式。

run_main_loop

函式(在common/board_r.c中):

uboot

啟動後3

秒倒計時,如果在

3秒倒計時結束前按下回車鍵,那麼就會進入

uboot

的命令模式,如果沒有按下回車鍵,那麼就會自動啟動

linux

核心。

先進入死迴圈,死迴圈中有乙個

main_loop

函式(在

common/main.c

中定義)

main_loop

函式:呼叫

bootstage_mark_name

函式,列印出啟動進度,呼叫

setenv

函式將變數

ver的值設為

version_string

,也就是設定版本號的環境變數。呼叫

cli_init

函式初始化命令,初始化

hush shell

相關的變數。

bootdelay_process

函式用於讀取環境變數

bootdelay

和bootcmd

的內容,然後將

bootdelay

的值賦值給全域性變數

stored_bootdelay

,返回bootcmd

的值。

autoboot_command

函式,此函式檢查倒計時是否結束,倒計時結束前是否被打斷。如果倒計時正常結束,就會執行run_command_list,此函式會執行引數s指定的一系列命令,也就是環境變數bootcmd的命令,bootcmd中儲存著預設的啟動命令,因此linux核心啟動。如果在倒計時結束錢按下回車鍵,run_command_list就不會執行,相當於空函式,然後執行cli_loop函式,這個是命令列處理函式,負責接收處理輸入命令。

總結一下

main_loop

函式,開始會呼叫一些函式,設定一些環境變數,初始化hush shell等,接著呼叫auto_command函式,用於判斷倒計時前鍵盤是否按下,如果按下就執行cli_loop函式,如果沒有按下,就直接啟動linux核心。

cli_loop

函式是uboot命令列處理函式,輸入的各種命令,進行各種操作就是cli_loop函式來處理的,此函式定義在command/cli.c中

cli_loop會呼叫parse_file_outer函式

parse_file_outer先呼叫setup_file_str函式初始化input的成員變數;再呼叫parse_stream_outer函式,該函式就是 hush shell的命令直譯器,使用do-while迴圈接收命令列輸入,然後利用函式parse_stream函式解析,呼叫run_list函式在經過一系列函式呼叫cmd_process

函式來處理命令。

cmd_process函式

在uboot

中,命令是通過巨集

u-boot-cmd

來定義,最終目的是為了定義乙個

cmd_tbl_t

型別的變數,並初始化這個變數的各個成員。

uboot

中的每個命令都存放在

.uboot_boot_list

段中,每個命令都有乙個名為

do_***

(***

為具體的命令名)的函式,這個

do_***

函式就是具體的命令處理函式。了解了

uboot

中命令的組成再來看一下

cmd_process

函式的處理過程。

cmd_process

在common/command.c

中定義。通過呼叫

find_cmd

函式在命令表中找到指定的命令,命令表其實就是

cmd_tlb_t

結構體陣列,在

find_cmd

函式中通過函式

ll_entry_start

得到陣列的第乙個元素,也就是命令表起始位址,通過

ll_entry_count

得到陣列長度,也就是命令表的長度,最後通過

find_cmd_tlb

在命令表中找到所需的命令。

在命令表中找到命令以後,就呼叫

cmd_call

函式來執行具體的命令

uboot啟動流程概述 uboot啟動流程

u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...

u boot啟動流程

uboot啟動流程分析 華清遠見嵌入式學院講師。uboot是嵌入式系統中最常用的bootloader,這裡我們以s3c2410為例分析一下uboot的啟動流程。首先通過uboot的鏈結檔案,我們可以看到uboot執行是執行的第一段 在start.s中。entry start sections ali...

uboot啟動流程

華清遠見嵌入式學院 講師。uboot是嵌入式系統中最常用的bootloader,這裡我們以s3c2410為例分析一下uboot的啟動流程。首先通過uboot的鏈結檔案,我們可以看到uboot執行是執行的第一段 在start.s中。entry start sections align 4 rodata...