U BOOT啟動流程之三

2021-06-05 20:14:55 字數 2212 閱讀 6139

u-boot

啟動**的第二階段 在

u-boot**啟動的

第二階段

,主要初始化一些與硬體相關的資訊

,比如串列埠

,lcd,flash,timer等。

這些硬體是根據自己的需要來初始化的

,過程如下

從這個圖中,可以看出第二階段的執行流程,裡面的函式也比較多。

**在lib_arm/board.c

(1) board_init

函式

01  int board_init (void)

02

這個函式主要是初始化開始板的資訊,比如mpll,一些gpio等,它還儲存了機器的id,及傳遞給kernel的引數位址。

(2)檢測記憶體對映

01 int dram_init (void)

02

3行為記憶體的開始位址

,這個要根據不同的開發板

,位址不相同

,mini2440

的為0x30000000. 第

4行為記憶體的大小

,這裡面為

0x400000000。

(3)nor flash

函式

01 ulong flash_init (void)

02 27 size += flash_info[i].size;

28 }

29 30 .........................

31 }

初始化函式

,主要是設定

nor flash

的大小,id,

每個扇區的開始位址等資訊

第10-12

行nor 

flash的id

的初始化.

第16行設定nor 

flash

的大小,

這裡面是

0x200000,

大小為2m

,根據自己開發板上

nor flash

的大小第

17行扇區的個數

,這個可以計算出來

,2m/4k=512 第

23-27

行分別設定每個扇區的起始位址

在對nor flash

的操作中

,除了這個函式,還有

flash_earse函式,

對flash

進行擦除.

(4)nand flash

初始化nand flash

初始化首先會呼叫

drivers/mtd/nand.c

中的nand_init函式,

在這個函式會呼叫

nand_itit_chip函式,

如果只有一塊

nand flash裝置,

只需要迴圈一次.在

nand_init_chip

函式中,

首先會把乙個

mtd的指標指向這個

nand

的位址,

然後對nand

的讀寫位址進行初始化。

01 int board_nand_init(struct nand_chip *nand)

02

第5行把

locktime

暫存器的位址賦給

clk_power指標第

11-14

行對nand flash

的時序進行初始化

.可以查手冊,設定

twrph0=4, twrph1 = 2; tacls = 0;

分別是twrph0=5

個hclk

時鐘,twrph1等於3

個hclk

時鐘,tacls=1

個時鐘週期.對於

s3c2440

的開發板

,還要設定

nfcont,

主要是使能

nand flash

等一些資訊。 第

20行設定

nand flash

的讀寫位址

,0x4e000010

這個位址是

nfdata

暫存器的位址

第22-24

行是對nand flash

結構體中的兩個函式指標初始化.

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...