JZ2440 Uboot 啟動過程分析續

2021-08-20 15:19:26 字數 2594 閱讀 4400

1、  uboot的第乙個啟動檔案為:cpu/arm920t/start.o

2、  連線指令碼/board/100ask24x0/u-boot.lds  連線位址為0x33f80000

下面開始分析start.s

.globl_start

_start:      b      reset

一、首先跳轉到 reset  

1、首先將mcu設定成 svc32模式

2、關閉看門狗

3、  遮蔽所有中斷

4、  初始化sdram

5、  初始化堆疊sp

6、  初始化時鐘

7、  將uboot**從flash(nor或者nand)中拷貝到sdram中的連線位址0x33f80000處

8、  清bss段

9、  _start_armboot執行該函式

二、通過對start_armboot函式的分析可知:

1、當uboot啟動過程倒計時時按下空格鍵時進入uboot選單命令

readline()讀入串列埠命令

run_command()解析並執行該命令

2、如果未按空格鍵當倒計時結束時將啟動核心

s=getenv("bootcmd")       獲取核心啟動命令

bootcmd=read.jffs  0x30007fc0  kernel  #從nand讀核心到sdram中

bootm=0x30007fc0   #啟動核心

linux核心uimage由兩部分組成 head(頭部64位元組)+真正核心

頭部包含兩個重要資訊:

乙個是核心的載入位址in_load:0x30008000

乙個是核心的入口位址in_load: 0x30007fc0 + 64=0x30008000

然後通過do_bootm_linux()函式來啟動核心

1、  該函式要告訴核心一些啟動引數

uboot在固定位址(0x30000100)按照固定格式存放引數

2、  通過執行下面函式啟動核心,該函式第二個引數為mach_type_s3c2440核心id

核心啟動時會根據該id來判斷核心是否支援該單板,即是否支援該mcu

在u-boot-1.1.6/board/100ask24x0目錄下100ask24x0.c中

第三個引數為核心啟動引數位址0x30000100

三、nand flash(256mb)和sdram(64mb)的內部分割槽

1、nand flash分割槽情況在/u-boot-1.1.6/include/configs/100ask24x0.h中進行定義

#define mtdparts_default"mtdparts=nandflash0:256k@0(bootloader)," \

"128k(params)," \

"2m(kernel)," \

"-(root)"

從0位址開始 256k存放bootloader

接下來128k存放 params 啟動時的引數

接下來2m存放核心

剩下的部分存放根檔案系統

3、  sdram分割槽

四、分析uboot的命令如何實現

命令結構體:

u_boot_cmd

串列埠輸入命令

最大引數個數

是否可重複 1表示可以 0代表不可以

該命令對應函式

短幫助資訊

長幫助資訊

根據上面格式自己新增乙個 hello命令建立cmd_hello.c到            u-boot-1.1.6/common目錄下,內容如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

intdo_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv)

int i;

printf ("helloworld,%d\n",argc);

for(i=0;iprintf("argv[%d]:%s\n",i,argv[i]);

return 0;

u_boot_cmd(

hello,        cfg_maxargs,       1,      do_hello,

"hello   - just for test!\n",

"hello   - long help fortest........................!\n"

然後修改u-boot-1.1.6/common目錄下的makefile 新增cmd_hello.o然後重新編譯uboot

然後燒到板子上 可以測試該hello命令

JZ2440 Uboot 啟動過程分析續

1 uboot的第乙個啟動檔案為 cpu arm920t start.o 2 連線指令碼 board 100ask24x0 u boot.lds 連線位址為0x33f80000 下面開始分析start.s globl start start b reset 一 首先跳轉到 reset 1 首先將mc...

u boot 啟動過程

u boot 分為兩個階段第一階段是彙編,入口是 arch arm cpu armv7 start.s,第二階段是 c 語言,入 口是 board.c 第一階段 1.異常向量表定義 2.設定 svc32 模式 arm 七種工作模式 3.呼叫 cpu init crit 進行 cpu 相關初始化 1 ...

u boot啟動過程 1

u boot的啟動過程 1.start.s檔案 此彙編檔案是u boot啟動的第乙個檔案,首先確定是冷啟動還是熱啟動,boot cold or boot warm 通過對r21寫0x01 cold or ox02 warm 完成。接著在boot warm中 1 判斷是否定義config cogent...