国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 9616|回復(fù): 10
打印 上一主題 下一主題

uboot移植到an2410全記錄

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2009-12-21 00:45:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: uboot , 記錄 , 移植
這段時(shí)間一直在學(xué)習(xí)uboot,從閱讀源代碼到開始動(dòng)手移植。這塊an2410跟smdk2410幾乎
一樣,所以移植起來參照include/configs/下的smdk2410.h,不會(huì)太復(fù)雜。移植成功后
再回頭看看原來的調(diào)試過程,才發(fā)現(xiàn)犯的錯(cuò)誤都挺離譜的。今天重新解壓了一份
開凈的u-boot源代碼移植到板子上,并將整個(gè)過程記錄下來,以供備忘,也給正在
an2410上移植uboot的朋友做個(gè)參考。


下面僅記錄移植步驟及改動(dòng)的地方,關(guān)于代碼細(xì)節(jié)可參考網(wǎng)上的相關(guān)文章。下面兩篇是我閱讀代碼的一點(diǎn)記錄
http://blog.chinaunix.net/u3/93566/showart_2097734.html
http://blog.chinaunix.net/u3/93566/showart_2097507.html

目標(biāo)板: an2410-ssb (阿南的板子)
移植重點(diǎn): 從nand flash啟動(dòng) k9f1208
          這塊板子上沒有nor flash
others: 網(wǎng)卡芯片 cs8900a
        sdram 64M 2塊ks562632

uboot版本 : u-boot-1.3.4

移植步驟:

1. 在board下建立an2410文件夾,這里直接將board/smdk2410 復(fù)制為 board/an2410

2. 在頂層的Makefile里添加如下兩行(可先搜索smdk2410,然后再其上添加)
        an2410_config:    unconfig
                @$(MKCONFIG) $(@:_config=) arm arm920t an2410 NULL s3c24x0
   同時(shí)搜索CROSS_COMPILE,并修改其下面arm對(duì)應(yīng)相的交叉編譯路徑

3. 將include/configs/smkd2410.h 復(fù)制為 include/configs/an2410.h

4. 修改cpu/arm920t/start.S,這個(gè)文件是uboot代碼的匯編部分,其中修改的有以下幾
個(gè)部分

(1)

====上面是設(shè)置時(shí)鐘分頻比====
    /*
     * we do sys-critical inits only at reboot,
     * not when booting from ram!
     */
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
這里加上下面三句,主要目的是調(diào)試的時(shí)候用,在調(diào)試的時(shí)候,是把uboot直接加載到
sdram上去,所以就不需要設(shè)置sdram,這里的3句會(huì)檢測(cè)是否是調(diào)試狀態(tài),若是則跳過
        adr     r0, _start /* 加載此時(shí)的啟始地址到r0 */
        ldr     r1, _TEXT_BASE /* 加載默認(rèn)的連接地址到r1 */
        cmp     r0, r1 /* 若r0與r1相等,則說明此時(shí)是在ram上,否則,是從
                        * nand上啟動(dòng),需要重新設(shè)定sdram
                        */
    blne    cpu_init_crit
#endif

(2) 緊接著上面,這里要先設(shè)置芯片的時(shí)鐘。在uboot里,原來設(shè)置cpu時(shí)鐘是在
start_armboot里,即board_init里。這里提前設(shè)置時(shí)鐘,cpu也會(huì)跑快些
由于設(shè)置時(shí)鐘用的C函數(shù),所以把堆棧的設(shè)置提前了
        /*
         * Setup the stack,下面調(diào)用C函數(shù)之前,先設(shè)置棧指針
         */
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 CFG_SKIP_LOWLEVEL_INIT
        bl      clock_init /* 現(xiàn)在就設(shè)置時(shí)鐘頻率 */
#endif

(3) 設(shè)置nand ,由于下面馬上就要從nand上copy代碼了,所以這里先設(shè)置nand,代碼參考
vivi中的head.S,這里加了一個(gè)預(yù)定義CFG_BOOT_FROM_NAND,所以在an2410.h中需要定義


#if CFG_BOOT_FROM_NAND
#define NAND_CTL_BASE 0x4e000000
#define oNFCONF 0x00
#define oNFCMD  0x04
#define oNFSTAT 0x10
        mov     r1, #NAND_CTL_BASE
        ldr     r2, =0xf830    @ configure nand flash
        str     r2, [r1, #oNFCONF]
        ldr     r2, [r1, #oNFCONF]
        bic     r2, r2, #0x800 @ enable chip
        str     r2, [r1, #oNFCONF]
        mov     r2, #0xff      @ reset command
        strb    r2, [r1, #oNFCMD]
        mov     r3, #0         @ wait
1:
        add     r3, r3, #0x1
        cmp     r3, #0xa
        blt     1b
2:
        ldr     r2, [r1, #oNFSTAT]
        tst     r2, #0x1      @ wait ready
        beq     2b
        ldr     r2, [r1, #oNFCONF]
        orr     r2, r2, #0x800  @ disable chip
        str     r2, [r1, #oNFCONF]
#endif

(3) 復(fù)制代碼,nand_read_ll同樣也是取自于vivi
其中需要有修改的地方,見patch
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
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     stack_setup */  /* 之前已經(jīng)設(shè)置了棧指針 */
        beq     clear_bss

    ldr    r2, _armboot_start
    ldr    r3, _bss_start
    sub    r2, r3, r2    /* r2 <- size of armboot */
#if CFG_BOOT_FROM_NAND
        bl      nand_read_ll    /* 將u-boot從nand復(fù)制到ram */
#else
    add    r2, r0, r2    /* r2 <- source end address */


5. 修改 board/an2410/lowlevel_init.S

#define B3_BWSCON        (DW16 + UBLB) /* CS8900A*/

#define REFCNT                  0x4f4 /* period=7.8125us, HCLK=100Mhz
                                         (2048 +1-7.8125*100) */

6. 添加board/an2410/nand_boot.c , 其中有兩個(gè)函數(shù) nand_read_ll, 這個(gè)是取自
vivi,用來復(fù)制代碼;另一個(gè)是clock_init, 用來初始化cpu時(shí)鐘
代碼見patch

7. 修改 board/an2410/Makefile ,去掉flash.o ,添加nand_boot.o

#COBJS    := smdk2410.o flash.o
COBJS    := smdk2410.o nand_boot.o

8. 由于clock_init已經(jīng)設(shè)置了時(shí)鐘,所以在board/an2410/smdk2410.c中的
board_init函數(shù)里去掉時(shí)鐘初始化相關(guān)部分

9. 修改an2410.h,其中有多處要修改的

增加下面幾行
#define CONFIG_JFFS2_CMDLINE 1
#define CONFIG_JFFS2_NAND 1
#define MTDIDS_DEFAULT "nand0=nandflash0"
#define MTDPARTS_DEFAULT ""

/* 下面增加幾個(gè)命令 */
#define CONFIG_CMD_JFFS2
#define CONFIG_CMD_NAND
#define CONFIG_CMD_REGINFO
#define CONFIG_CMD_PING

#define CONFIG_BOOTDELAY    3
#define CONFIG_BOOTARGS    "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0"
#define CONFIG_ETHADDR    08:00:3e:26:0a:5b
#define CONFIG_NETMASK          255.255.255.0
#define CONFIG_IPADDR        192.68.0.10
#define CONFIG_SERVERIP        192.168.0.100

參數(shù)taglist
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_CMDLINE_TAG 1
#define CONFIG_BOOTCOMMAND    "nand read.jffs2 0x30007fc0 kernel; bootm 0x30007fc0"

去掉flash
#define CFG_NO_FLASH 1
//#define CONFIG_AMD_LV400    1    /* uncomment this if you have a LV400 flash */
#if 0
#define CONFIG_AMD_LV800    1    /* uncomment this if you have a LV800 flash */
#endif

環(huán)境變量都保存在nand里
//#define    CFG_ENV_IS_IN_FLASH    1
#define    CFG_ENV_IS_IN_NAND      1
#define CFG_ENV_SIZE    0x10000    /* Total Size of Environment Sector */
#define CFG_ENV_OFFSET  0x40000

#define CFG_NAND_BASE   0
#define CFG_MAX_NAND_DEVICE 1
#define CFG_MAX_NAND_CHIP 1
#define CFG_BOOT_FROM_NAND 1



主要的修改就是上面的了,uboot的可移植非常好,所以只要幾步就可以移植到特定的開
方板上。啟動(dòng)信息如下(沒有開debug, 沒有內(nèi)核)

U-Boot 1.3.4 (Dec 21 2009 - 00:08:13)

DRAM:  64 MB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0

NAND read: device 0 offset 0x60000, size 0x200000

Reading data from 0x25fe00 -- 100% complete.
2097152 bytes read: OK
Wrong Image Format for bootm command
ERROR: can't get kernel image!
an2410 >


uboot.tar (160 KB)
patch.tar (50 KB)
沙發(fā)
 樓主| 發(fā)表于 2009-12-21 00:53:09 | 只看該作者
uboot.tar里是生成的u-boot.bin可燒到nand里

patch.tar是生成的patch,可在u-boot-1.3.4目錄里打patch

ps:怎么論壇里加了這么多的廣告!且篇幅很大!
板凳
發(fā)表于 2010-7-9 22:54:01 | 只看該作者
不錯(cuò)啊,偶正在移植u-boot,正好參考一下
地板
發(fā)表于 2010-9-25 22:02:50 | 只看該作者
不錯(cuò)啊
地下室
發(fā)表于 2010-9-29 19:23:28 | 只看該作者
學(xué)習(xí)學(xué)習(xí)!
6
發(fā)表于 2010-10-3 12:18:44 | 只看該作者
學(xué)習(xí)學(xué)習(xí)!
7
發(fā)表于 2011-4-26 10:30:39 | 只看該作者
謝謝
8
發(fā)表于 2011-4-26 10:31:09 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
9
發(fā)表于 2011-4-28 10:39:07 | 只看該作者
10
發(fā)表于 2012-2-25 11:15:08 | 只看該作者
瞧瞧了
11
發(fā)表于 2012-3-7 14:37:03 | 只看該作者
學(xué)習(xí)了

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎影视永久免费视频观看 | 国产精品久久久久久久毛片 | 91香蕉在线看私人影院 | 四虎影视884aa·com | 朋友的妻子 在线播放 | 久久精品加勒比中文字幕 | 精品欧美一区二区三区精品久久 | 天天插天天爽 | 亚洲黄色在线观看视频 | 毛片免费全部完整播放 | 有色视频在线观看免费高清 | 在线免费色视频 | 就操成人网 | 精品伊人久久久99热这里只 | 黄色在线看网站 | 男人的天堂在线免费视频 | 国产无限制自拍 | 精品久久久久久影院免费 | 男女爱爱视频免费看 | 久久99精品久久久久久 | 久久精品99 | 一区二区三区日韩 | 四虎在线播放免费永久视频 | 91果冻制片厂天美传媒 | 国产二区在线播放 | 91亚洲精品在看在线观看高清 | 四虎影视网 | 99热在这里只有精品 | 草莓视频丝瓜视频下载 | 成年美女黄网站色大片免费看 | 91免费视频网 | 亚洲一区二区三区不卡在线播放 | 精品国产精品 | 99久久er这里只有精品17 | fc2共享免费视频播放 | 无圣光私拍一区二区三区 | 国产在线91精品 | 1204曰韩欧美成人看片 | 天天夜夜狠狠 | 欧美自拍偷拍视频 | 亚洲婷婷综合网 |