1捎拯、U-boot-1.16 基于s3c6410 start.S 流程分析

u-boot-1.1.6 Start.S 流程分析 基于S3c6410

start.S 文件位于srcPath/cpu/s3c64xx/ 目錄
作為uboot運(yùn)行的第一段程序剪验,它做了一些具體的初始化流程待牵,具體工作如下:

1.設(shè)置中斷向量表

.globl _start
_start: b   reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq

_undefined_instruction:
    .word undefined_instruction
_software_interrupt:
    .word software_interrupt
_prefetch_abort:
    .word prefetch_abort
_data_abort:
    .word data_abort
_not_used:
    .word not_used
_irq:
    .word irq
_fiq:
    .word fiq
_pad:
    .word 0x12345678 /* now 16*4=64 */
.global _end_vect

_end_vect:

.balignl 16,0xdeadbeef  @deadbeef 壞的牛肉

2.uboot相關(guān)段定義

/*在 /board/samung/mini6410/config.mk 定義次慢,代碼運(yùn)行時(shí)的地址

_TEXT_BASE:

    .word   TEXT_BASE   

/*
 * Below variable is very important because we use MMU in U-Boot.
 * Without it, we cannot run code correctly before MMU is ON.
 * by scsuh.
 */
_TEXT_PHY_BASE:
    .word   CFG_PHY_UBOOT_BASE   

.globl _armboot_start
_armboot_start:
    .word _start

/*
 * These are defined in the board-specific linker script.
 */
.globl _bss_start
_bss_start:
    .word __bss_start

.globl _bss_end
_bss_end:
    .word _end
    

#ifdef CONFIG_USE_IRQ
/* IRQ stack memory (calculated at run-time) */
.globl IRQ_STACK_START
IRQ_STACK_START:
    .word   0x0badc0de   @badcode 壞代碼

/* IRQ stack memory (calculated at run-time) */
.globl FIQ_STACK_START
FIQ_STACK_START:
    .word 0x0badc0de @badcode 壞代碼
#endif

3.設(shè)置cpu的工作模式為SVC32

 * set the cpu to SVC32 mode
 
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0

4旁涤、刷新I/D Cache

    /*
 * flush v4 I/D caches
 */
mov r0, #0
mcr p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
mcr p15, 0, r0, c8, c7, 0   /* flush v4 TLB */

5、關(guān)閉MMU與Cache

/*
 * disable MMU stuff and caches
 */
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
orr r0, r0, #0x00000002 @ set bit 2 (A) Align
orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
mcr p15, 0, r0, c1, c0, 0

6迫像、設(shè)置外圍基地址

/* Peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)

7劈愚、跳轉(zhuǎn)到 lowlevel_init.S (/src/board/samsung/mini6410/lowlevel_init.S)

下面的動(dòng)作均是在lowlevel_init.s 中所做:

  • 1.點(diǎn)亮led
    /* LED on only #8 */
    ldr r0, =ELFIN_GPIO_BASE
    ldr r1, =0x55540000
    str r1, [r0, #GPNCON_OFFSET]

      ldr r1, =0x55555555
      str r1, [r0, #GPNPUD_OFFSET]
    
      ldr r1, =0xf000
      str r1, [r0, #GPNDAT_OFFSET]
    
      ldr r0, =ELFIN_GPIO_BASE
      ldr r1, =0x1
      str r1, [r0, #GPECON_OFFSET]
      ldr r1, =0x0
      str r1, [r0, #GPEDAT_OFFSET]
    
      ldr r0, =ELFIN_GPIO_BASE
      ldr r1, =0x2A5AAAAA
      str r1, [r0, #GPPCON_OFFSET]
      ldr r1, =0x0
      str r1, [r0, #GPPDAT_OFFSET]
    
      ldr r1, =0x55555555
      str r1, [r0, #MEM1DRVCON_OFFSET]
    
  • 2.關(guān)閉看門狗
    ldr r0, =0x7e000000 @0x7e004000
    orr r0, r0, #0x4000
    mov r1, #0
    str r1, [r0]

  • 3.清楚外部中斷
    @ External interrupt pending clear
    ldr r0, =(ELFIN_GPIO_BASE+EINTPEND_OFFSET) /EINTPEND/
    ldr r1, [r0]
    str r1, [r0]

      ldr r0, =ELFIN_VIC0_BASE_ADDR   @0x71200000
      ldr r1, =ELFIN_VIC1_BASE_ADDR   @0x71300000
    
  • 4.關(guān)閉所有中斷
    @ Disable all interrupts (VIC0 and VIC1)
    mvn r3, #0x0
    str r3, [r0, #oINTMSK]
    str r3, [r1, #oINTMSK]

  • 5.設(shè)置所有中斷為IRQ
    @ Set all interrupts as IRQ
    mov r3, #0x0
    str r3, [r0, #oINTMOD]
    str r3, [r1, #oINTMOD]

  • 6、清零所有中斷掛起狀態(tài)
    @ Pending Interrupt Clear
    mov r3, #0x0
    str r3, [r0, #oVECTADDR]
    str r3, [r1, #oVECTADDR]

  • 7闻妓、系統(tǒng)時(shí)鐘初始化
    bl system_clock_init

  • 8菌羽、串口初始化
    bl uart_asm_init

  • 9、NandFlash初始化
    bl nand_asm_init

  • 10由缆、內(nèi)存初始化
    bl mem_ctrl_asm_init

  • 11注祖、判斷是否為休眠喚醒
    ldr r0, =(ELFIN_CLOCK_POWER_BASE+RST_STAT_OFFSET)
    ldr r1, [r0]
    bic r1, r1, #0xfffffff7
    cmp r1, #0x8
    beq wakeup_reset

  • 12猾蒂、返回Start.S
    ldr r0, =ELFIN_UART_BASE
    ldr r1, =0x4b4b4b4b
    str r1, [r0, #UTXH_OFFSET]

      mov lr, r12
      mov pc, lr
    

8、拷貝代碼到內(nèi)存

#ifdef CONFIG_BOOT_NAND
mov r0, #0x1000   @4K
bl  copy_from_nand
#endif

9.使能MMU開關(guān)

#ifdef CONFIG_ENABLE_MMU
enable_mmu:
/* enable domain access */
ldr r5, =0x0000ffff
mcr p15, 0, r5, c3, c0, 0       @ load domain access register

/* Set the TTB register */
ldr r0, _mmu_table_base
ldr r1, =CFG_PHY_UBOOT_BASE
ldr r2, =0xfff00000
bic r0, r0, r2
orr r1, r0, r1
mcr p15, 0, r1, c2, c0, 0

/* Enable the MMU */
mmu_on:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #1          /* Set CR_M to enable MMU */
mcr p15, 0, r0, c1, c0, 0
nop
nop
nop
nop
#endif

10是晨、設(shè)置堆棧

stack_setup:
#ifdef CONFIG_MEMORY_UPPER_CODE
ldr sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0xc)
#else

11肚菠、清零BSS段

clear_bss:
ldr r0, _bss_start      /* find start of bss segment        */
ldr r1, _bss_end        /* stop here                        */
mov     r2, #0x00000000     /* clear                            */

clbss_l:
str r2, [r0]        /* clear loop...                    */
add r0, r0, #4
cmp r0, r1
ble clbss_l

12、跳轉(zhuǎn)到start_armboot()

ldr pc, _start_armboot

_start_armboot:
.word start_armboot
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罩缴,一起剝皮案震驚了整個(gè)濱河市蚊逢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箫章,老刑警劉巖烙荷,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檬寂,居然都是意外死亡终抽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門桶至,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昼伴,“玉大人,你說我怎么就攤上這事镣屹∧堵耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵野瘦,是天一觀的道長。 經(jīng)常有香客問我飒泻,道長鞭光,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任泞遗,我火速辦了婚禮惰许,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘史辙。我一直安慰自己汹买,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布聊倔。 她就那樣靜靜地躺著晦毙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耙蔑。 梳的紋絲不亂的頭發(fā)上见妒,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音甸陌,去河邊找鬼须揣。 笑死盐股,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耻卡。 我是一名探鬼主播疯汁,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卵酪!你這毒婦竟也來了幌蚊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤凛澎,失蹤者是張志新(化名)和其女友劉穎霹肝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塑煎,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沫换,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了最铁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讯赏。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冷尉,靈堂內(nèi)的尸體忽然破棺而出漱挎,到底是詐尸還是另有隱情,我是刑警寧澤雀哨,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布磕谅,位于F島的核電站,受9級(jí)特大地震影響雾棺,放射性物質(zhì)發(fā)生泄漏膊夹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一捌浩、第九天 我趴在偏房一處隱蔽的房頂上張望放刨。 院中可真熱鬧,春花似錦尸饺、人聲如沸进统。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽螟碎。三九已至,卻和暖如春馋辈,著一層夾襖步出監(jiān)牢的瞬間抚芦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叉抡,地道東北人尔崔。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像褥民,于是被迫代替她去往敵國和親季春。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容