亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1809 | 回復(fù): 0
打印 上一主題 下一主題

移植u-boot1.3.3到Davinci DM6446平臺筆記 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-06-19 17:59 |只看該作者 |倒序瀏覽

                                相信做此工作的都對板子和u-boot有一定的理解,廢話省略。寫這個筆記以記錄這段時間研究這個東西的一些心得,供以后參考。這個文檔很不完善,畫的圖也變形了,郁悶!當(dāng)然我工作也還沒有結(jié)束,隨著更深入的工作我會慢慢完善這個筆記。分析的方式我參考以前閱讀的一位以pxa270目標(biāo)平臺的文獻(xiàn)資料,但具體位置已不記得了,在此說明。
首先,u-boot已經(jīng)提供了對davinci處理器的支持,目前1.3.3版本中有三個davinci目標(biāo)板子,分別為:TI的dv-evm,另外兩個schmoogie和sonata我也不大清楚是哪個公司的產(chǎn)品,總之我沒有見過更沒有用過。
板子概況:
處理器:Davinci DM6446(ARM926EJS + DSP64X+)
SDRAM:MT47H64M16BT 256M
NAND FLASH:K9F1208
網(wǎng)卡:BCM5221
下載u-boot-1.3.3.tar.bz2,解壓后
修改頂極的Makefile,添加自己交叉編譯器的名稱,當(dāng)然首先要導(dǎo)出該交叉編譯工具鏈的環(huán)境變量。
板子的名稱在該Makefile中已有,所以直接使用。
在/board/davinci/dv-evm目錄下即為目標(biāo)板子的相關(guān)代碼文件。
CPU相關(guān)的代碼在/cpu/arm926ejs以及/cpu/arm926ejs/davinci目錄
在/include/configs/目錄下有板子相關(guān)的定義文件davinci_dvevm.h,對著自己板子的具體情況修改就是。
做完這些工作,現(xiàn)測試一下,看是不是修改的能夠通過:
#make davinci_dvevm_config
#make
通過,表明前期工作正常。
開始深入u-boot研究。
涉及到的目錄和文件列表為:
啟動第一階段(stage 1,主要為匯編語言):
1、/cpu/arm926ejs/start.S
2、/board/davinci/dv-evm/u-boot.lds
3、/cpu/arm926ejs/davinci/lowlevel_init.S
4、/include/asm-arm/arch-davinci/
5、/include/configs/davinci/davinci_dvevm.h
6、/board/davinci/da-evm/config.mk
啟動第二階段(stage 2,主要為C語言):
1、/lib_arm/board.c
2、/board/davinci/dv-evm/dv_board.c
通過查看/board/davinci/dv-evm/u-boot.lds可知,u-boot入口函數(shù)為_start,該函數(shù)定義于/cpu/arm926ejs/start.S文件
.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
在ARM體系結(jié)構(gòu)中,0x0為異常向量表地址,上電執(zhí)行的第一條指令是跳轉(zhuǎn)到reset復(fù)位處理程序;
reset:
    /*
     * set the cpu to SVC32 mode  
     */
//note:Bootloader中沒有必要支持中斷的實現(xiàn),這屬于內(nèi)核機(jī)制以及設(shè)備驅(qū)動管理的管理范疇;SVC模式是系統(tǒng)的一種保護(hù)模式,這樣就可以進(jìn)行一些只能在SVC模式下的操作,例如一些特定寄存器訪問操作。
    mrs    r0,cpsr
    bic    r0,r0,#0x1f
    orr    r0,r0,#0xd3
    msr    cpsr,r0
    /*
     * we do sys-critical inits only at reboot,
     * not when booting from ram!
     */
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
    bl    cpu_init_crit
#endif
一般情況下,不定義CONFIG_SKIP_LOWLEVEL_INIT,那么接下來跳轉(zhuǎn)到cpu_init_crit處執(zhí)行,
cpu_init_crit:
    /*
     * 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 */
    /*
     * disable MMU stuff and caches
     */
//note:MMU必須關(guān)閉,原因為Bootloader中所有對地址的操作都是使用物理地址,是實在的實地址,不存在虛擬地址,因此MMU必須關(guān)閉。
    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
//note:數(shù)據(jù)cache必須關(guān)閉;原因為Bootloader主要是裝載內(nèi)核鏡像,鏡像數(shù)據(jù)必須真實寫回SDRAM中,所以數(shù)據(jù)cache必須關(guān)閉;
指令cache可以關(guān)閉也可以開啟;對于指令cache,不存在強(qiáng)制性的規(guī)定,但是一般情況下,推薦關(guān)閉指令 cache。
    /*
     * Go setup Memory and board specific bits prior to relocation.
     */
    mov    ip, lr        /* perserve link reg across call */
    bl    lowlevel_init    /* go setup pll,mux,memory */
    mov    lr, ip        /* restore link */
    mov    pc, lr        /* back to my caller */
如上描述,程序跟著進(jìn)入lowlevel_init執(zhí)行,該函數(shù)定義于/cpu/arm926ejs/davinci/lowlevel_init.S
此函數(shù)主要用來初始化各種寄存器,各種寄存器定義可以參閱TMS320DM6446 Digital Media System-on-Chip手冊。
其中,寄存器在/include/asm-arm/arch-davinci/中定義,當(dāng)然該目錄下一些數(shù)據(jù)類型的定義還要參閱/include/asm-arm/arch-arm926ejs/sizes.h
寄存器的初始值定義于/include/configs/davinci/davinci_dvevm.h.
按照程序的執(zhí)行流程,從cpu_init_crit執(zhí)行完畢后返回,緊接著執(zhí)行relocate:
relocate:                /* relocate U-Boot to RAM        */
    adr    r0, _start        /* r0 |---------------------------------|                  -------------|
|          ......                 |                               |
|---------------------------------| SDRAM
|                                 |                               |
|         GLB_DATA_SIZE           | Flash
|                                 |                      |
|        u-boot image             |                      |
|---------------------------------|
start_armboot函數(shù)定義于/lib_arm/board.c.
               
               
               
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/27691/showart_1005629.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP