移植u-boot-2010.09到Tiny6410开发板

         

2013年4月9日11:21:46 

正在验证中,

移植u-boot-2010.09到Tiny6410开发板

                            Hyz

一、            开发环境

Fedora13、tiny6410开发板

二、            u-boot

1.        版本:u-boot-2010.09

2.        下载地址:www.denx.de/pub/u-boot/

三、            移植

(一)  首先需建立交叉编译环境

 

1.   将光盘Linux 目录中的arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz复制到Fedora9

某个目录下如tmp/,然后进入到该目录,执行解压命令:

#cd /tmp

#tar xvzfarm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /

注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change”的第一个字母,

在此是改变目录的意思。

如果你没有arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz请到我的QQ空间下载。

执行该命令,将把arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1目录。

2.   把编译器路径加入系统环境变量,运行命令

#gedit /root/.bashrc

编辑/root/.bashrc文件,注意“bashrc”前面有一个“.,修改最后一行为export

PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin注意路径一定要写对,否则将不会有效。

如图,保存退出。

重新登录系统(不必重启机器,开始->logout即可),使以上设置生效,在命令行输入

arm-linux-gcc–v,会出现如下信息,这说明交叉编译环境已经成功安装。

(二)  解压安装源代码

1.        首先创建工作目录

工作目录/opt/FriendlyARM/tiny6410/linux

执行命令:#mkdir–p /opt/FriendlyARM/Tiny6410/linux

2.        将源代码放到linux系统下(使用sharefoder等)

如:放到/mnt/hgfs/share下

3.        解压安装u-boot源代码

在工作目录/opt/FriendlyARM/Tiny6410/linux中执行:

#cd /opt/FriendlyARM/tiny6410/linux

#tarxvzf /mnt/hgfs/share/u-boot-2010.09.tar.gz

会自动生成u-boot-2010.09文件夹

(三)  对u-boot-2010.09源代码进行修改

1.        打开顶层目录下的Makefile,并在ARM1176处添加下面红色部分内容

 

#########################################################################

## ARM1176 Systems

#########################################################################

smdk6400_noUSB_config \

smdk6400_config : unconfig

@mkdir -p $(obj)include$(obj)board/samsung/smdk6400

@mkdir -p$(obj)nand_spl/board/samsung/smdk6400

@echo "#define CONFIG_NAND_U_BOOT"> $(obj)include/config.h

@echo "CONFIG_NAND_U_BOOT = y">> $(obj)include/config.mk

@if [ -z "$(findstringsmdk6400_noUSB_config,$@)" ]; then \

echo "RAM_TEXT = 0x57e00000">> $(obj)board/samsung/smdk6400/config.tmp;\

else \

echo "RAM_TEXT = 0xc7e00000">> $(obj)board/samsung/smdk6400/config.tmp;\

fi

@$(MKCONFIG) smdk6400 arm arm1176 smdk6400samsung s3c64xx

@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

tiny6410_noUSB_config  \

tiny6400_config :      unconfig

@mkdir -p $(obj)include $(obj)board/samsung/tiny6410

@mkdir -p $(obj)nand_spl/board/samsung/tiny6410

@echo "#define CONFIG_NAND_U_BOOT" >$(obj)include/config.h

@echo "CONFIG_NAND_U_BOOT = y" >>$(obj)include/config.mk

@if [ -z "$(findstring tiny6410_noUSB_config,$@)"]; then                       \

echo "RAM_TEXT = 0x57e00000" >>$(obj)board/samsung/tiny6410/config.tmp;\

else                                                                           \

echo "RAM_TEXT = 0xc7e00000" >>$(obj)board/samsung/tiny6410/config.tmp;\

fi

@$(MKCONFIG) tiny6410 arm arm1176 tiny6410 samsung s3c64xx

@echo "CONFIG_NAND_U_BOOT = y" >>$(obj)include/config.mk

2.        arch/arm/cpu/arm1176/s3c64xx/cpu_init.S

bne     check_dmc1_ready

        nop

#if defined(CONFIG_TINY6410)

#define SROM_BC1_REG_Tacs       (0x0) // 0clk address set-up

#define SROM_BC1_REG_Tcos       (0x4) // 4clk chip selection set-up

#define SROM_BC1_REG_Tacc       (0xE) // 14clk access cycle

#define SROM_BC1_REG_Tcoh       (0x1) // 1clk chip selection hold

#define SROM_BC1_REG_Tah        (0x4) // 4clk address holding time

#define SROM_BC1_REG_Tacp       (0x6) // 6clk page mode access cycle

#define SROM_BC1_REG_PMC        (0x0) // normal(1data)page modeconfiguration

#define SROM_BW_REG_DATA        ((1<<7) | (1<<6) |(1<<4))

#define SROM_BW_REG_BC1         (0xf << 4)

#define SROM_BC1_REG_DATA       ((SROM_BC1_REG_Tacs << 28) | \

                               (SROM_BC1_REG_Tcos << 24) | \

                               (SROM_BC1_REG_Tacc << 16) | (SROM_BC1_REG_Tcoh << 12) | \

                                (SROM_BC1_REG_Tah <<8) | (SROM_BC1_REG_Tacp << 4) | \

                               (SROM_BC1_REG_PMC))

        ldrr0, =ELFIN_SROM_BASE

        ldrr1, [r0, #SROM_BW_REG_DATA]

        movr2, #(~SROM_BW_REG_BC1)

        andr1, r1, r2

        movr2, #SROM_BW_REG_DATA

        orrr1, r1, r2

        strr1, [r0, #INDEX_SROM_BW_REG]

        ldrr1, =SROM_BC1_REG_DATA

        strr1, [r0, #INDEX_SROM_BC1_REG]

#endif

 

        mov     pc, lr

3.        arch\arm\cpu\arm1176\s3c64xx\Makefile增加红色部分

COBJS-$(CONFIG_S3C6400) += cpu_init.o speed.o

COBJS-$(CONFIG_S3C6410) +=cpu_init.o speed.o

COBJS-y += timer.o

4.        arch\arm\include\asm\arch-s3c64xx\s3c64x0.h

#ifndef __S3C64XX_H__

#define __S3C64XX_H__

 

/*#if defined(CONFIG_SYNC_MODE) &&defined(CONFIG_S3C6400) */

 

#if defined(CONFIG_SYNC_MODE)&& defined(CONFIG_S3C6400) ||defined(CONFIG_S3C6410)

5.        arch\arm\include\asm\arch-s3c64xx\s3c6400.h添加红色部分

#define ELFIN_SROM_BASE         0x70000000

 

#define SROM_BW_REG    __REG(ELFIN_SROM_BASE + 0x0)

#define SROM_BC0_REG   __REG(ELFIN_SROM_BASE + 0x4)

#define SROM_BC1_REG   __REG(ELFIN_SROM_BASE + 0x8)

#define SROM_BC2_REG   __REG(ELFIN_SROM_BASE + 0xC)

#define SROM_BC3_REG   __REG(ELFIN_SROM_BASE + 0x10)

#define SROM_BC4_REG   __REG(ELFIN_SROM_BASE + 0x14)

#define SROM_BC5_REG   __REG(ELFIN_SROM_BASE + 0x18)

#define INDEX_SROM_BW_REG 0x0

#define INDEX_SROM_BC0_REG 0x4

#define INDEX_SROM_BC1_REG 0x8

#define INDEX_SROM_BC2_REG 0xC

#define INDEX_SROM_BC3_REG 0x10

#define INDEX_SROM_BC4_REG 0x14

#define INDEX_SROM_BC5_REG 0x18

6.        在board\samsung建立tiny6410的文件夹,并把smdk6400文件的所有文件复制过去

进入board\samsung\tiny6410\lowlevel_init.S

/* LED on only #8 */

      #if 0

        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]

        #endif

wakeup_reset:

 

        /* Clearwakeup status register */

        ldr     r0, =(ELFIN_CLOCK_POWER_BASE +WAKEUP_STAT_OFFSET)

        ldr     r1, [r0]

        str     r1, [r0]

 

        /* LED test */

        #if 0

        ldr     r0, =ELFIN_GPIO_BASE

        ldr     r1, =0x3000

        str     r1, [r0, #GPNDAT_OFFSET]

        #endif

上面两处红色部分屏蔽掉。

添加一个标志定义!defined(CONFIG_S3C6410)

/*#ifndef CONFIG_S3C6400*/

#if !defined(CONFIG_S3C6400) &&!defined(CONFIG_S3C6410)

        ldr     r1, [r0, #OTHERS_OFFSET]

        bic     r1, r1, #0xC0

        orr     r1, r1, #0x40

        str     r1, [r0, #OTHERS_OFFSET]

 

wait_for_async:

        ldr     r1, [r0, #OTHERS_OFFSET]

        and     r1, r1, #0xf00

        cmp     r1, #0x0

        bne     wait_for_async

#endif

下面同样也是

/* #elif !defined(CONFIG_S3C6400)              */

#elif !defined(CONFIG_S3C6400)&&!defined(CONFIG_S3C6410)

        /* According to661558um_S3C6400X_rev10.pdf 0x20 is reserved */

        ldr     r1, [r0, #OTHERS_OFFSET]

        bic     r1, r1, #0x20

        str     r1, [r0, #OTHERS_OFFSET]

#endif

        mov     pc,lr

board\samsung\Tiny6410\Makefile中添加

COBJS-y := smdk6400.o

COBJS-y := tiny6410.o

SOBJS   := lowlevel_init.o

屏蔽掉下面三处红色部分:这个在smdk6400.c中

#include <common.h>

#include <netdev.h>

#include <asm/arch/s3c6400.h>

/*

static void cs8900_pre_init(void)

{

        SROM_BW_REG&= ~(0xf << 4);

        SROM_BW_REG|= (1 << 7) | (1 << 6) | (1 << 4);

       SROM_BC1_REG = ((CS8900_Tacs << 28) + (CS8900_Tcos << 24) +

                       (CS8900_Tacc << 16) + (CS8900_Tcoh << 12) +

                       (CS8900_Tah << 8) + (CS8900_Tacp << 4) + CS8900_PMC);

}

*/

int board_init(void)

{

        DECLARE_GLOBAL_DATA_PTR;

 

               /*cs8900_pre_init();*/

      

        /* NOR-flash in SROM0 */

 

        /* Enable WAIT */

        SROM_BW_REG |= 4 | 8 | 1;

 

        gd->bd->bi_arch_number= MACH_TYPE;

        gd->bd->bi_boot_params= PHYS_SDRAM_1 + 0x100;

 

        return 0;

}

修改如下部分:

int checkboard(void)

{

        /*printf("Board:   SMDK6400\n");*/

       printf("Board:  TINY6410\n");

        return 0;

}

 

#ifdef CONFIG_ENABLE_MMU

/*

ulong virt_to_phy_smdk6400(ulong addr)

{

        if((0xc0000000 <= addr) && (addr < 0xc8000000))

               return addr - 0xc0000000 + 0x50000000;

        else

                printf("do not support thisaddress : %08lx\n", addr);

 

        returnaddr;

}*/

ulong virt_to_phy_tiny6410(ulong addr)

{

        if((0xc0000000 <= addr) && (addr < 0xc8000000))

               return addr - 0xc0000000 + 0x50000000;

        else

               printf("do not support this address : %08lx\n", addr);

 

        returnaddr;

}

#endif

 

/*

ulong board_flash_get_legacy (ulong base, int banknum,flash_info_t *info)

{

        if (banknum== 0) {     // non-CFI boot flash

               info->portwidth = FLASH_CFI_16BIT;

               info->chipwidth = FLASH_CFI_BY16;

               info->interface = FLASH_CFI_X16;

               return 1;

        } else

               return 0;

}

*/

 

#ifdef CONFIG_CMD_NET

/*

int board_eth_init(bd_t *bis)

{

        int rc = 0;

#ifdef CONFIG_CS8900

        rc =cs8900_initialize(0, CONFIG_CS8900_BASE);

#endif

        return rc;

}

*/

int board_eth_init(bd_t *bi)

{

        int rc = 0;

        #ifdefined(CONFIG_DRIVER_DM9000)

                rc= dm9000_initialize(bi);

        #endif

        return rc;

}

#endif

 

7.        drivers\net\dm9000x.c增加红色部分

DM9000_ior(DM9000_MRCMDX);      /* Dummy read */

 

                /*Get most updated data,

                  only look at bits 0:1, See application notes DM9000 */

               rxbyte = DM9000_inb(DM9000_DATA) & 0x03;

                    #if 1

                       u8 temp;

                       temp=DM9000_ior(DM9000_MRRH);

                        temp=DM9000_ior(DM9000_MRRL);

                         #endif

8.        drivers\usb\host\ohci-hcd.c增加红色部分

 

#if defined(CONFIG_ARM920T) || \

   defined(CONFIG_S3C24X0) || \

   defined(CONFIG_S3C6400) || \

    defined(CONFIG_S3C6410)|| \

   defined(CONFIG_440EP)   || \

   defined(CONFIG_PCI_OHCI)|| \

   defined(CONFIG_MPC5200) || \

    defined(CONFIG_SYS_OHCI_USE_NPS)

9.        include\configs\tiny6410.h(这个是smdk6400修改的吗)

//#define CONFIG_S3C6400        1      /* in a SAMSUNG S3C6400 SoC     */

#define CONFIG_S3C6410          1       /* in a SAMSUNG S3C6400 SoC     */

#define CONFIG_S3C64XX          1       /* in a SAMSUNG S3C64XX Family  */

#define CONFIG_SMDK6400         1      /* on a SAMSUNG SMDK6400 Board  */

#define CONFIG_TINY6410        1

 

//#define MACH_TYPE             1270

#define MACH_TYPE               2520

把cs8900网卡换掉

#if 0

#define CONFIG_NET_MULTI

#define CONFIG_CS8900                   /* we have a CS8900on-board    */

#define CONFIG_CS8900_BASE              0x18800300

#define CONFIG_CS8900_BUS16             /* follow the Linux driver    */

#endif

 

#define CONFIG_NET_MULTI                1

#define CONFIG_DRIVER_DM9000            1

#define CONFIG_DM9000_NO_SROM           1

#define CONFIG_DM9000_USE_16BIT         1

#define CONFIG_DM9000_BASE              0x18000300

#define DM9000_IO                       CONFIG_DM9000_BASE

#define DM9000_DATA                     (CONFIG_DM9000_BASE+4)

 

#define CONFIG_ETHADDR 12:34:56:78:90:01

#define CONFIG_NETMASK 255.255.255.0

#define CONFIG_IPADDR 192.168.40.122

#define CONFIG_SERVERIP 192.168.40.22

#define CONFIG_GATEWAYIP 192.168.40.1

 

#define CONFIG_CMD_PING

#define CONFIG_CMD_ELF

#define CONFIG_CMD_FAT

#define CONFIG_CMD_EXT2

#undef CONFIG_CMD_IMLS

/#define CONFIG_BOOTDELAY        3

 

//#define CONFIG_SYS_PROMPT            "SMDK6400 # "   /*Monitor Command Prompt     */

改成你自己喜欢的提示字符这里是"TINY6410 # "

#define CONFIG_SYS_PROMPT               "TINY6410 # "   /* Monitor Command Prompt     */

 

提高主频

Setting        SYNC    ASYNC

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

 667_133_66      X       O

 533_133_66      O       O

 400_133_66      X       O

 400_100_50      O       O

 **********************************/

#define CONFIG_CLK_667_133_66

//#define CONFIG_CLK_533_133_66

 

换掉这句

#define CONFIG_AMD_LV800

//#define CONFIG_SYS_FLASH_CFI         1       /* Use CFI parameters(needed?) */

#define CONFIG_SYS_NO_FLASH          1       /* Use CFI parameters (needed?) */

 

屏蔽下面的

#if 0

/* Use drivers/cfi_flash.c, even though the flash is notCFI-compliant  */

#define CONFIG_FLASH_CFI_DRIVER 1

#define CONFIG_SYS_FLASH_CFI_WIDTH     FLASH_CFI_16BIT

#define CONFIG_FLASH_CFI_LEGACY

#define CONFIG_SYS_FLASH_LEGACY_512Kx16

 

/* timeout values are in ticks */

#define CONFIG_SYS_FLASH_ERASE_TOUT    (5 * CONFIG_SYS_HZ) /* Timeoutfor Flash Erase  */

#define CONFIG_SYS_FLASH_WRITE_TOUT     (5 * CONFIG_SYS_HZ) /* Timeout for Flash Write */

#endif

#define CONFIG_ENV_SIZE        0x4000  /* Total Size ofEnvironment Sector */

 

/*

 * SMDK6400 board specific data

 */

这句也要改

//#define CONFIG_IDENT_STRING    " for SMDK6400"

#define CONFIG_IDENT_STRING     " for TINY6410"

10.    include\common.h

添加红色部分

#ifdef CONFIG_4xx

ulong  get_OPB_freq (void);

ulong  get_PCI_freq (void);

#endif

#if defined(CONFIG_S3C24X0) || \

   defined(CONFIG_LH7A40X) || \

   defined(CONFIG_S3C6400) || \

   defined(CONFIG_S3C6410) || \

        defined(CONFIG_EP93XX)

11.    顶层的MAKEALL

添加一句

#########################################################################

## ARM11 Systems

#########################################################################

LIST_ARM11="                    \

        cp1136                  \

       omap2420h4              \

       apollon                 \

       imx31_litekit           \

        imx31_phycore           \

       imx31_phycore_eet       \

       mx31ads                 \

       mx31pdk                 \

       mx31pdk_nand            \

        qong                    \

       smdk6400                \

       tnetv107x_evm           \

            tiny6410                \

12.    顶层的MAINTAINERS

Alex Züpke <azu@sysgo.de>

 

        lart            SA1100

       dnp1110         SA1110

       hyz<hyz@126.com>

        TINY6410 ARM1176JZF-S (S3C6410)

 

13.    nand_spl\board\samsung\Tiny6410\config.mk

修改为红色部分

Alex Züpke <azu@sysgo.de>

 

       lart            SA1100

       dnp1110         SA1110

        hyz<hyz@126.com>

        TINY6410 ARM1176JZF-S (S3C6410)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值