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