1.找到入口:cd arch/arm/cpu/arm1176 vim start.s _start就是開始
b 跳轉指令
bl 帶返回跳轉
bx 帶狀態切換的跳轉指令
blx 帶返回跳轉和狀態切換的跳轉指令
2.復位:設定cpu 為svc32模式
mrs r0, cpsr cpsr狀態暫存器的值取出儲存在r0
bic r0, r0, #0x3f 將r0的 0x3f(為1的位)清0 xx000000
orr r0, r0, #0xd3 或運算 11010011
msr cpsr, r0 將r0的值付給cpsr cpsr=11010011
cpsr 7 6 5 4 3 2 1 0
i f t m4 m3 m2 m1 m0
i=1,禁止irq中斷
f=1,禁止fiq中斷
t=1,執行thumb指令;t=0,執行arm指令
m[4:0]=0x13 管理模式
3.caches初始化
mov r0, #0
mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ cache失效
mcr p15, 0, r0, c8, c7, 0 /* flush v4 tlb */ tlb失效
關閉mmu
4.外設基位址初始化
#ifdef config_periport_remap
/* peri port setup */
ldr r0, =config_periport_base
orr r0, r0, #config_periport_size
mcr p15,0,r0,c15,c2,4
#endif
5.單板初始化 bl lowlevel_initcd board/samsung/smdk6410 vim lowlevel_init.s(這裡貼出的僅僅是修改後的**,只貼了**開始的解釋的表示沒有修改)
/* led on only #8 */ led初始化
ldr r0, =elfin_gpio_base
ldr r1, =0x00001111
str r1, [r0, #gpmcon_offset]
ldr r1, =0x00000055
str r1, [r0, #gpmpud_offset]
ldr r1, =0x000f
str r1, [r0, #gpmdat_offset]
134行:
/* led test */ led測試
ldr r0, =elfin_gpio_base
ldr r1, =0x0003 亮2個燈
str r1, [r0, #gpndat_offset]
/* disable watchdog */不使能看門狗
/* external interrupt pending clear */ 清除外部中斷標誌位
/* disable all interrupts (vic0 and vic1) */不使能所有中斷
/* set all interrupts as irq */ 設定所有中斷為irq
/* pending interrupt clear */ 清除中斷
/* init system clock */ 初始化系統時鐘
bl system_clock_init 151行
225行修改:
/* fout of epll is 96mhz */
ldr r1, =0x80200203
/* for uart */ 初始化串列埠
bl uart_asm_init
/* ****** init for nand */初始化nandflash
bl nand_asm_init
/* memory subsystem address 0x7e00f120 */ 記憶體初始化
bl mem_ctrl_asm_init cd /arch/arm/cpu/arm1176/s3c64xx vim cpu_init.s
/* wakeup support. don't know if it's going to be used, untested. */ 喚醒復位初始化
/* jump to kernel (sleep-s3c6400.s) */ 進入main函式
mov pc, r1 cd arch/arm/lib/ vim crt0.s _main
blboard_init_f 功能:
清空gd_t指向的結構體、填充結構體、
board_init_r
最後進入main_loop()u-boot 啟動管理函式
紅色標註的函式都是c語言寫的,很重要。
使uboot支援S3C6410的SD啟動
這裡使用的uboot並非uboot官方發布的uboot 而是為三星定製的乙個uboot版本s3c u boot 1.1.6,其 作者就包括了三星的程式設計師與denx的員工。這個版本支援sd啟動,不過預設是nand啟動,使它支援uboot需要做以下事情 1 雖然支援uboot啟動,但是uboot 裡...
S3C6410 SD卡啟動uboot分析(詳細)
6410的手冊上說,可以從nandflash onenand sd卡啟動,沒有專用的燒錄工具的情況下,只有sd卡啟動是可以考慮 的。手冊上看到,sd卡啟動,實際上是先執行片內irom中的一段程式,該程式從sd卡中讀取 寫到stepping stone 中,stepping stone是位於0x0c0...
使uboot支援S3C6410的SD啟動
一直以來都不知道sd卡中的uboot和nandflash中的uboot有什麼區別?今天終於看到一篇文章,介紹了一下兩者的區別,和如何用原生uboot製作sd卡uboot,記錄下來以供後面查閱。找到了原出處 6410的手冊上說,可以從nandflash onenand sd卡啟動,沒有專用的燒錄工具的...