<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > uboot stage2 init_fnc_t *init_sequence[]代碼分析

uboot stage2 init_fnc_t *init_sequence[]代碼分析

作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò ) 收藏
 今天總算是把uboot stage2看完了,哎,感受太深了一句話(huà):看完了這些代碼,才知道什么叫代碼~~

 uboot第二階段代碼是用C寫(xiě)的,本來(lái)以為可以比第一階段的匯編好理解,畢竟對C更熟悉一點(diǎn)??蓜傞_(kāi)始進(jìn)入start_armboot()函數一看,就了~~哎,學(xué)習不到家啊~~ 所以,現在還不敢大談對第二階段有多理解吧,只是簡(jiǎn)單記一下,大概理解的。

本文引用地址:http://dyxdggzs.com/article/201611/323261.htm

 本著(zhù)理解代碼高于一切的原則,順著(zhù)start_armboot()函數執行順序讀下去。前面的還是比較好理解的,現在就講講init_fnc_t *init_sequence[]吧。

 在init_fnc_t *init_sequence[]定義前有這樣一行:typedef int (init_fnc_t) (void)哎,這,最怕碰到這種定義了~~都是受譚老師的禍害啊~~自己的C語(yǔ)言基礎還是在大二的時(shí)候打下的,計算機專(zhuān)業(yè)學(xué)生學(xué)C語(yǔ)言用的居然是譚浩強的那本C搞的直到現在面對這個(gè)typedef int (init_fnc_t) (void)都還有點(diǎn)不敢確定。定義init_fnc_t為函數類(lèi)型,該函數返回int型,無(wú)參數。而init_fnc_t *init_sequence[]則是定義一個(gè)init_fnc_t指針類(lèi)型的數組。簡(jiǎn)單的說(shuō)就是定義了個(gè)函數指針數組,指向一系列cpu初始化函數。包括cpu_init,board_init,interupt_init,env_init,init_baudrate,serial_init,console_init_f,display_banner,dram_init,display_dram_config并且如果定義了CONFIG_VCMA9的話(huà)還有checkboard函數。當然這些函數都是返回int并且無(wú)參數輸入型,有些還是static的。

 現分別說(shuō)說(shuō)各個(gè)初始化函數吧:簡(jiǎn)單的現在可以多講點(diǎn),還有一些是現在還不太理解或是很長(cháng)的,需要以后單獨列個(gè)日志來(lái)寫(xiě)吧,打算是這樣,希望后面幾天能搞懂

 int cpu_init(void):該函數位于ubootcpus3c44b0cpu.c

    該函數只是調用icache_enable()函數實(shí)現cpu cache的初始化,然后返回0。

    void icache_enable(void)位于同一文本中。該函數首先調用s3c44b0_flush_cache(),通過(guò)向

    LRU RAM寫(xiě)0來(lái)刷新cpu cache。刷新cpu cache之后,icache_enale()函數再設置兩個(gè)非緩沖區域寄    存器NCACHBE0和NCACHBE1 。最后通過(guò)設置SYSCFG寄存器來(lái)開(kāi)啟cpu cache。

 int board_init(void):函數實(shí)現位于ubootoarddaveB2B2.c。依次為初始化GPIO和中斷,把cpu體系號傳    送給gd->bd->bi_arch_number,把要傳送給系統內核(uclinux)的參數的首地址給

    gd->bd-?bi_boot_params。完成后返回0。

 int interrupt_init(void):位于ubootcpus3c44b0interrupt.c

    初始化timer1相關(guān)寄存器,用于產(chǎn)生定時(shí)中斷信號。為什么是timer1呢??好像是timer5做為      uclinux的系統時(shí)鐘的。以后再研究吧

int env_init(void):該函數位于ubootcommonenv_flash.c。

    大概分為兩種情況:如果定義了CFG_ENV_ADDR_REDUND,即如果環(huán)境變量需要在SDRAM中有備    份的話(huà),是一種env_init(),如果不需要備份的話(huà),是另外一個(gè)env_init()。還是需要單列一篇記錄

 int init_baudrate(void):函數位于ubootlib_armoard.c

    如果參數中設置了波特率則利用參數用設置的波特率,否則利用默認的CONFIG_BAUDRATE(115200)

    CONFIG_BAUDRATE宏定義位于ubootincludeconfigsB2.h

    #define CONFIG_BAUDRATE 115200

 int serial_init(void):函數位于ubootcommonserial.c。

    調用 serial_setbrg ()設置串口相關(guān)寄存器,包括FIFO寄存器、控制寄存器、列控制寄存器和波特率    約數寄存器等

console_init_f():位于ubootcommonconsole.c。

    這個(gè)函數就這句:

            gd->have_console = 1

    就是設置了一下相關(guān)的數據

display_banner():位于ubootlib_arm_board.c

    用來(lái)打印當前的一些狀態(tài)

dram_init():位于ubootcpudaveB2B2.c

    設置RAM的起始地址和大小,依據板子硬件設置。設置文件為ubootincludeconfigsB2.h

    #define PHYS_SDRAM_1 0xc0000000 /* SDRAM Bank #1 */
    #define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */

 display_dram_config():位于ubootlib_armoard.c

    打印RAM的相關(guān)信息,相關(guān)的宏定義都位于ubootincludeconfigsB2.h,當然都是依據板子實(shí)際來(lái)定    義的。



關(guān)鍵詞: 代碼分

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>