移植u-boot-2010.09到Tiny6410开发板
2013-04-09 11:16
176 查看
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)
正在验证中,
移植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)
相关文章推荐
- fl2440 移植u-boot-2010.09全纪录3----------DM9000网卡支持
- u-boot 2010.09 移植 (二)Makefile详解
- 移植u-boot-2010.09到三星SC32442平台(一):时钟和nand启动
- FL2440的U-boot-2010.09移植
- fl2440 移植u-boot-2010.09全纪录4---------u-boot支持从nandflash启动
- 移植u-boot-2010.09到三星SC32442平台(二):nand读写和ax88180以太网支持
- u-boot 2010.09 移植 (三)工程移植与汇编修改
- FL2440的u-boot-2010.09移植(一)
- 移植u-boot-2010.09到三星SC32442平台(三):yaffs2文件系统写入支持
- 移植u-boot-2010.09到S3C2440(一)——硬件初始化与测试
- FL2440的u-boot-2010.09移植(二)
- 七、uboot2010.09移植 (2011-03-13 21:58)
- FL2440的U-boot-2010.09移植(一)-- (七)
- u-boot移植总结(四)u-boot-2010.09框架分析
- fl2440的U-boot-2010.09移植(六)NAND Flash启动支持
- 移植u-boot-2010.09到S3C2440(二)——ARM汇编中的LDR及ADR的区别及其在U-BOOT中的应用 (SDRAM)
- 移植u-boot-2010.09到S3C2440(三)——判断NAND还是NOR启动的汇编代码
- u-boot移植总结(四)u-boot-2010.09框架分析
- fl2440的U-boot-2010.09移植(七)LCD的支持
- <2012 12 05> FL2440开发板的U-boot-2010.09版本移植(四)Nor Flash启动支持