Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98164
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 384
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-06 16:52
文章分类

全部博文(38)

文章存档

2014年(38)

我的朋友

分类: 嵌入式

2014-04-06 17:11:54

环境:ubuntu13.10 arm-linux-gcc4.4.1 OK6410(256M RAM ,1G SLS NAND)

1.修改U-boot-2013.04目录下的Makefile文件

    1.1 在CROSS_COMPILE ?=这里修改:

    CROSS_COMPILE =/usr/local/arm/4.4.1/bin/arm-linux-

    1.2 把makefile里面的6400全部替换成6410


2.文件的复制和修改

     2.1 拷贝board/samsung/smdk6400目录里的所有文件 到board/samsung/smdk6410目录中

            更改board/samsung/smdk6410目录下smdk6400.c 为smdk6410.c ,

            更改board/samsung/smdk6410目录下smdk6400_nand_spl.c为smdk6410_nand_spl.c

            修改board/samsung/smdk6410目录下所有文件,将所有文件中的6400替换为6410

            修改board/samsung/smdk6410目录下u-boot-nand.lds文件,把文件中小写的align改成大些ALIGN

            修改board/samsung/smdk6410目录下lowlevel_init.S文件225行ldr r1, =0x200203为ldr r1, =0x80200203

            修改board/samsung/smdk6410目录下lowlevel_init.S文件,参考OK6410的管脚设置把

点击(此处)折叠或打开

  1. /* LED on only #8 */
  2. ldr r0, =ELFIN_GPIO_BASE
  3. ldr r1, =0x55540000
  4. str r1, [r0, #GPNCON_OFFSET]
  5. ldr r1, =0x55555555
  6. str r1, [r0, #GPNPUD_OFFSET]
  7. ldr r1, =0xf000
  8. str r1, [r0, #GPNDAT_OFFSET]
  9. 修改为
  10. /* LED on only #8 */
  11. ldr r0, =ELFIN_GPIO_BASE
  12. ldr r1, =0x00001111
  13. str r1, [r0, #GPMCON_OFFSET]
  14. ldr r1, =0x00000055
  15. str r1, [r0, #GPMPUD_OFFSET]
  16. ldr r1, =0x000f
  17. str r1, [r0, #GPMDAT_OFFSET]

            再把

点击(此处)折叠或打开

  1. /* LED test */
  2. ldr r0, =ELFIN_GPIO_BASE
  3. ldr r1, =0x3000
  4. str r1, [r0, #GPNDAT_OFFSET]
  5. 修改为
  6. /* LED test */
  7. ldr r0, =ELFIN_GPIO_BASE
  8. ldr r1, =0x0003
  9. str r1, [r0, #GPMDAT_OFFSET]


    2.2 拷贝nand_spl/board/samsung/smdk6400目录里的所有文件 到 nand_spl/board/samsung/smdk6410目录中

            修改nand_spl/board/samsung/smdk6410目录下所有文件,将所有文件中的6400替换为6410

            修改nand_spl/board/samsung/smdk6410目录下Makefile文件,40行修改为SOBJS = start.o cpu_init.o lowlevel_init.o crt0.o

            修改nand_spl/board/samsung/smdk6410目录下Makefile文件,在

点击(此处)折叠或打开

  1. $(obj)start.S:
  2.     @rm -f $@
  3.     @ln -s $(TOPDIR)/arch/arm/cpu/arm1176/start.S $@
  4. 后添加
  5. $(obj)crt0.S:
  6.     @rm -f $@
  7.     @ln -s $(TOPDIR)/arch/arm/lib/crt0.S $@

                                注意@前为tab键

            修改arch/arm/crt0.S 文件,把

点击(此处)折叠或打开

  1. bl coloured_LED_init
  2. bl red_led_on
  3. 修改为
  4. #ifndef CONFIG_NAND_SPL
  5. bl coloured_LED_init
  6. bl red_led_on
  7. #endif


    2.3 把arch/arm/include/arch-s3c64xx目录里的s3c6400.h拷贝一份到当前目录,并重命名为s3c6410.h

            把s3c6410.h中的所有6400替换成6410

            把820行开始的

点击(此处)折叠或打开

  1. #define DMC1_MEM_CFG 0x00010012 /* burst 4, 13-bit row, 10-bit col */
  2. #define DMC1_MEM_CFG2 0xB45
  3. #define DMC1_CHIP0_CFG 0x150F8 /* 0x5000_0000~0x57ff_ffff (128 MiB) */
  4. #define DMC_DDR_32_CFG 0x0 /* 32bit, DDR */
  5. 修改成
  6. #define DMC1_MEM_CFG 0x0001001a /* burst 4, 13-bit row, 10-bit col */
  7. #define DMC1_MEM_CFG2 0xB45
  8. #define DMC1_CHIP0_CFG 0x150F0 /* 0x5000_0000~0x6000_0000 (256 MiB) */
  9. #define DMC_DDR_32_CFG 0x0 /* 32bit, DDR */

                    用以支持256MB内存

    2.4 把arch/arm/cpu/arm1176/s3c64xx/Makefile 中的COBJS-$(CONFIG_S3C6400)改为COBJS-$(CONFIG_S3C6410)

            修改arch/arm/cpu/arm1176/s3c64xx目录下所有文件,将所有文件中的#include 替换为

点击(此处)折叠或打开

  1. #ifdef CONFIG_S3C6400
  2. #include <asm/arch/s3c6400.h>
  3. #else
  4. #include <asm/arch/s3c6410.h>
  5. #endif


    2.5 把include/目录下的common.h文件的第644行 defined(CONFIG_S3C6400) || \ 下添加defined(CONFIG_S3C6410) || \

            把drivers/usb/host目录下的ohci-hcd.c文件的第69行 defined(CONFIG_S3C6400) || \ 下添加defined(CONFIG_S3C6410) || \


    2.6 进入drivers/usb/host目录, 把s3c64xx-hcd.c中的#include 都改为#include

            进入drivers/mtd/nand目录, 把s3c64xx.c中的#include 都改为#include

            进入drivers/serial目录, 把s3c64xx.c中的#include 都改为#include


    2.7 在arch/arm/cpu/arm1176/s3c64xx/目录下建立s3c6410_sdboot.c文件,内容为

点击(此处)折叠或打开

  1. #include <common.h>
  2. #include <asm/io.h>
  3. #ifdef CONFIG_MMC_CHANNEL
  4. #define MMC_CHANNEL CONFIG_MMC_CHANNEL
  5. #else
  6. #define MMC_CHANNEL 0
  7. #endif
  8. #define ELFIN_HSMMC_BASE (0x7C200000 + MMC_CHANNEL*0x10000)
  9. #define HM_CONTROL4 (ELFIN_HSMMC_BASE+0x8C)
  10. #define globalBlockSizeHide *((volatile unsigned int*)(0x0C004000-0x4))
  11. #define globalSDHCInfo *((volatile unsigned int*)(0x0C004000-0x8))
  12. #define LAST_BLKPOS (globalBlockSizeHide - 2)
  13. #define BLK_SIZE 512
  14. #define BL1_SIZE (1024*8)
  15. #define BL2_SIZE (300*1024)
  16. #if 0
  17. #define ENV_SIZE CONFIG_ENV_SIZE
  18. #else
  19. #define ENV_SIZE (16*1024)
  20. #endif
  21. #define BL1_BLKCNT (BL1_SIZE/BLK_SIZE)
  22. #define BL2_BLKCNT (BL2_SIZE/BLK_SIZE)
  23. #define ENV_BLKCNT (ENV_SIZE/BLK_SIZE)
  24. #define STARTBLKADDR (LAST_BLKPOS - BL1_BLKCNT - BL2_BLKCNT - ENV_BLKCNT)
  25. #define DESTADDR CONFIG_SYS_PHY_UBOOT_BASE
  26. #define CopyMMCtoMem(a,b,c,d,e) (((int(*)(int, uint, ushort, uint *, int)) \
  27. (*((uint *)(0x0C004000 + 0x8))))(a,b,c,d,e))
  28. int BootCopyMMCtoMem()
  29. {
  30. writel(readl(HM_CONTROL4) | (0x3 << 16), HM_CONTROL4);
  31. return CopyMMCtoMem(0, STARTBLKADDR, BL2_BLKCNT, (uint *)DESTADDR, 0);
  32. }


    2.8 修改 arch/arm/cpu/arm1176/s3c64xx/目录下的Makefile的COBJS-$(CONFIG_S3C6410) += cpu_init.o speed.o下面添加

                                                                                            COBJS-$(CONFIG_BOOT_SD) += s3c6410_sdboot.o

            修改 arch/arm/cpu/arm1176/目录下的Start.S,把

点击(此处)折叠或打开

  1. bl lowlevel_init
  2. bl _main
  3. 修改为
  4. bl lowlevel_init /* go setup pll,mux,memory */
  5. #if defined(CONFIG_BOOT_SD) && !defined(CONFIG_NAND_SPL)
  6. ldr sp, =CONFIG_SYS_INIT_SP_ADDR
  7. bl BootCopyMMCtoMem
  8. cmp r0, #0
  9. copyerror:
  10. beq copyerror
  11. ldr pc, =_main
  12. #else
  13. bl _main
  14. #endif

   
     2.9 修改board/samsung/smdk6410目录下u-boot-nand.lds文件 ,在 arch/arm/cpu/arm1176/start.o (.text)下添加

                                                             board/samsung/smdk6410/libsmdk6410.o (.text)


    2.10 把include/configs目录里的smdk6400.h拷贝一份到当前目录,并重命名为smdk6410.h
            在smdk6410.h的41行下添加#define CONFIG_BOOT_SD

            把smdk6410.h中的所有6400替换成6410

            166行改为#define PHYS_SDRAM_1_SIZE 0x10000000 /* 256 MB in Bank #1 */

3.编译和结果

    执行make distclean

    执行make smdk6410_config

    执行make all

    把编译出的u-boot.bin通过SD-write软件烧写到SD卡,开发板拨到SD卡启动,DNW显示如下

阅读(2272) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

ymseven2014-05-08 14:33:55

naiveboy520:请问U-boot2013.04 哪有 board/samsung/smdk6400文件夹呀.

确实有这个文件夹,你仔细看看

回复 | 举报

naiveboy5202014-05-01 21:50:32

请问U-boot2013.04 哪有 board/samsung/smdk6400文件夹呀.