NetVideo-bootloader(1)

u-boot-1.1.6版本

-----------------------

參照網上的一些資料,自己打算一步步移植,現在將每一階段記錄下來

第一階段:

1.修改Makefile

其實就是在Makefile中添加你需要的config條目

-----------------------------------------------------

mini2440_config :   unconfig

                       (MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

----------------------------------------------------

對於這個條目是如何起作用的,主要可以看看$(topdir)config.mk這個文件

 

2.based on smdk2410

打算基於smdk2410的基礎上移植,所以我們將include/smdk2410/ -->include/mini2440/;

include/configs/smdk2410.h -->include/configs/mini2440.h

 

到這裏可以make mini2440_config,然後編譯通過,但是這其實就是smdk241的uboot,並無差異。

 

3.下面才涉及到修改代碼的問題

cpu/arm920t/start.S 這是個u-boot第一階段的彙編代碼,包括關閉看門狗和中斷等,以及初始化clock和複製自己到ram中,爲第二階段做準備

 

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
    ldr     r0, =pWTCON
    mov     r1, #0x0
    str     r1, [r0]

    /*
     * mask all IRQs by setting all bits in the INTMR - default
     */
    mov r1, #0xffffffff
    ldr r0, =INTMSK
    str r1, [r0]
# if defined(CONFIG_S3C2410)
    ldr r1, =0x7fff /* changed from 0x7ff to 0x7fff, only for s3c2440 */
    ldr r0, =INTSUBMSK
    str r1, [r0]
# endif

---------------------------------------------------------------------------

#if 0   /* clock_init later */
    /* FCLK:HCLK:PCLK = 1:2:4 */
    /* default FCLK is 120 MHz ! */
    ldr r0, =CLKDIVN
    mov r1, #3
    str r1, [r0]
#endif

/*這裏把時鐘初始化註釋掉了,因爲後面調用了clock_init函數來初始化*/
-------------------------------------------------------------------


 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
    adr r0, _start
    ldr r1, _TEXT_BASE
    cmp r0, r1
    blne    cpu_init_crit
#endif

    /* Set up the stack                         */
stack_setup:
    ldr r0, _TEXT_BASE      /* upper 128 KiB: relocated uboot   */
    sub r0, r0, #CFG_MALLOC_LEN /* malloc area                      */
    sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
#ifdef CONFIG_USE_IRQ
    sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
    sub sp, r0, #12     /* leave 3 words for abort-stack    */

#ifndef CONFIG_SKIP_LOWLEVEL_INIT   /*added by zhenghao, for clock initialize*/
    bl  clock_init
#endif

/*因爲要調用c程序,所以需要準備棧空間*/

-----------------------------------------------

relocate:               /* relocate U-Boot to RAM       */
    adr r0, _start      /* r0 <- current position of code   */
    ldr r1, _TEXT_BASE      /* test if we run from flash or RAM */
    cmp     r0, r1                  /* don't reloc during debug         */
    beq     clear_bss

    ldr r2, _armboot_start
    ldr r3, _bss_start
    sub r2, r3, r2      /* r2 <- size of armboot            */
#if 1
    bl  CopyCode2Ram            /*r0:source r1:dest r2:size     */

/*這個程序也是調用board/mini2440/boot_init.c中自己編寫的一個程序。上電的時候需要把自己拷貝到ram中*/

----------------------------------------------------

#ifdef CONFIG_LED_MINI2440
#define GPIO_BASE   0x56000000
#define oGPIO_B     0x10
#define oGPIO_CON   0x0
#define oGPIO_DAT   0x4
#define oGPIO_UP    0x8
    mov     r1, #GPIO_BASE
    add     r1, r1,#oGPIO_B
    ldr     r2, =0x155aa
    str     r2,[r1, #oGPIO_CON]

    mov     r2, #0xff
    str     r2,[r1, #oGPIO_UP]

    mov     r2, #0x1c0
    str     r2, [r1, #oGPIO_DAT]
#endif
    ldr pc, _start_armboot

_start_armboot: .word start_armboot

/*點亮第一個led,表示第一階段完成*/
-----------------------------------------------------------

 

在board/mini2440/ 中添加boot_init.c文件,裏面包含了第一階段相關調用的函數

 

編譯成功,運行時候可以完成第一階段

發佈了31 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章