新闻中心

EEPW首页>嵌入式系统>设计应用> minis3c2440移植之uboot移植

minis3c2440移植之uboot移植

作者: 时间:2016-11-24 来源:网络 收藏
U-boot移植
(以下步骤适用于s3c2440开发板)
1、修改Makefile文件:
a.修改交叉编译宏(CROSS_COMPILE?=)修改为(CROSS_COMPILE?=arm-linux-);
b.将._LIBS:后的两个变量交换位置(line289)
c.添加tocore2440_config Make文件(line2997)
tocore2440_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t tocore2440 tocores3c24x0
包含六个参数:$1. tocore2440 表示在include/configs/目录下必须包含tocore2440.h文件;$2. arm表示在主目录下包含lib_arm目录,在include/目录下包含asm_arm目录;$3.arm920t表示CPU型号,在cpu目录下包含arm920t目录;$4.tocore2440芯片型号;$5.厂商目录(if($5!=NULL),则在board目录下有$5/$4目录,else,则在board目录下有$4目录);$6. s3c24x0表示在include/asm_arm/包含arch_ s3c24x0目录;
d.以上部分表示在移植U-boot前首先要添加开发板自己的配置头文件,并在board目录下建立自己的开发板目录,修改s3c24x0(cpu/arm920t/s3c24x0,include/asm_arm/archs3c24x0)文件,改为支持2440开发板,修改过程如下:
1)修改inperrupts.c文件,添加宏定义:#defined(CONFIG_S3C2440)( line36)。
2)修改speed.c文件:a.添加宏定义:#defined (CONFIG_S3C2440) ( line33);b.在get_PLLCLK()函数中添加2440支持,具体修改方式如下:在return返回值前添加#if defined(CONFIG_S3C2440)
if (pllreg == MPLL)
return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s)); //得到2440开发板的频率
else if (pllreg == UPLL)
#endif
c.将get_HCLK()函数修改为2440支持,将原函数返回改为:
//该函数为读取当前系统时钟
#if defined(CONFIG_S3C2440)
if (clk_power->CLKDIVN & 0x6)
{
if ((clk_power->CLKDIVN & 0x6)==2) return(get_FCLK()/2);
if ((clk_power->CLKDIVN & 0x6)==6) return((clk_power->CAMDIVN & 0x100) ? get_FCLK()/6 : get_FCLK()/3);
if ((clk_power->CLKDIVN & 0x6)==4) return((clk_power->CAMDIVN & 0x200) ? get_FCLK()/8 : get_FCLK()/4);
return(get_FCLK());
}
else return(get_FCLK());
#else
return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());
#endif
d.修改time.c文件,添加宏定义#defined (CONFIG_S3C2440)(line33)
2、添加配置文件
a.将smdk2410.h复制为tocore2440.h,其文件修改如下:
1)添加宏#undef CONFIG_SKIP_LOWLEVEL_INIT(line40)
2)注释2410宏定义:
//#defineCONFIG_S 3C24101
//#define CONFIG_SBC2410X1
3)添加2440宏定义:
#define CONFIG_S3C24401
#define CONFIG_TOCORE24401
#define CONFIG_TOCORE2440_LED1//添加点灯宏定义
#define CONFIG_S3C2440_NAND_BOOT1 //Nandflash启动
4)注释CS8900网卡宏定义(在line72添加#if 0,在line76 添加#endif),添加DM9000网卡宏定义:
#define CONFIG_DRIVER_DM90001
#define CONFIG_DM9000_USE_16BIT1
#define CONFIG_DM9000_BASE0x20000300
#define DM9000_IO0x20000300
#define DM9000_DATA0x20000304
#define CONFIG_DM9000_NO_SROM1
#undef CONFIG_DM9000_DEBUG
#define CONFIG_NET_MULTI
5)在命令行宏定义中添加如下宏定义:
#define CONFIG_CMD_ASKENV
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_PING
#define CONFIG_CMD_NAND
#define CONFIG_CMD_SAVEENV

#define CONFIG_BOOTDELAY3//设置系统启动等待时间
#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/nfs "
"nfsroot=192.168.2.199:/fs "
"ip=192.168.2.69:"//NFS支持
#define CONFIG_ETHADDR08:00:3e:26:0a:5b//打开MAC
#define CONFIG_IPADDR192.168.2.69//定义自身IP
#define CONFIG_SERVERIP192.168.2.105//定义服务器IP
#define CONFIG_BOOTCOMMAND"dhcp; bootm"//打开DHCP
//line154之后添加如下宏定义
#define CONFIG_SYS_PROMPT"[tocore2440 ]# "//修改启动标识
#define CONFIG_SYS_LOAD_ADDR0x31000000//下载地址
#define CONFIG_ENV_ADDR0x060000//断电保存地址
#define CONFIG_ENV_IS_IN_NAND 1//Nandflash
#define CONFIG_ENV_OFFSET0X60000//整个寄存器偏移地址
#define CONFIG_ENV_SIZE0x20000//ENV分区大小
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:384k(bootloader),"
"128k(params),"
"5m(kernel),"
"-(root)"//Nandflash默认设置

#define NAND_MAX_CHIPS 1//Nandflash最大个数
#define CONFIG_MTD_NAND_VERIFY_WRITE//校验
#if defined(CONFIG_TOCORE2440_LED)//点灯宏定义


#define GPIO_CTL_BASE 0x56000000
#define oGPIO_B 0x10
#define oGPIO_CON 0x0
#define oGPIO_DAT 0x4
#define oGPIO_UP 0x8
#endif
#define STACK_BASE 0x33f00000
#define STACK_SIZE 0x10000

6)对Nandflash的相关设置修改如下:
添加LV800支持宏定义,注释掉如下宏定义
//#define CONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE + 0x0F0000)
//#define CONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE + 0x070000)
//#defineCONFIG_ENV_IS_IN_FLASH1
//#define CONFIG_ENV_SIZE0x10000
添加Nandflash设置:
#if defined(CONFIG_CMD_NAND)
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_MAX_NAND_DEVICE1
#endif
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG
#define CONFIG_SYS_HUSH_PARSER
#define CONFIG_SYS_PROMPT_HUSH_PS2"> "
#define CONFIG_CMDLINE_EDITING
#ifdef CONFIG_CMDLINE_EDITING
#undef CONFIG_AUTO_COMPLETE
#else
#define CONFIG_AUTO_COMPLETE
#endif

#define CONFIG_SYS_NAND_BASE 0x4E000000
#define NAND_CTL_BASE 0x4E000000
#define bINT_CTL(Nb) __REG(INT_CTL_BASE + (Nb))


#define oNFCONF 0x00
#if defined(CONFIG_S3C2440)
#define CONFIG_S3C2440_NAND_BOOT 1

#define oNFCONT 0x04
#define oNFCMD 0x08
#define oNFADDR 0x0c
#define oNFDATA 0x10
#define oNFSTAT 0x20
#define oNFECC 0x2c
#define rNFCONF (*(volatile unsigned int *)0x4e000000)
#define rNFCONT (*(volatile unsigned int *)0x4e000004)
#define rNFCMD (*(volatile unsigned char *)0x4e000008)
#define rNFADDR (*(volatile unsigned char *)0x4e00000c)
#define rNFDATA (*(volatile unsigned char *)0x4e000010)
#define rNFSTAT (*(volatile unsigned int *)0x4e000020)
#define rNFECC (*(volatile unsigned int *)0x4e00002c)
#endif
#if defined(CONFIG_S3C2410)
#define CONFIG_S3C2410_NAND_BOOT 1

#define oNFCONF 0x00
#define oNFCMD 0x04
#define oNFADDR 0x08
#define oNFDATA 0x0c
#define oNFSTAT 0x10
#define oNFECC 0x14
#define rNFCONF (*(volatile unsigned int *)0x4e000000)
#define rNFCMD (*(volatile unsigned char *)0x4e000004)
#define rNFADDR (*(volatile unsigned char *)0x4e000008)
#define rNFDATA (*(volatile unsigned char *)0x4e00000c)
#define rNFSTAT (*(volatile unsigned int *)0x4e000010)
#define rNFECC (*(volatile unsigned int *)0x4e000014)
#define rNFECC0 (*(volatile unsigned char *)0x4e000014)
#define rNFECC1 (*(volatile unsigned char *)0x4e000015)
#define rNFECC2 (*(volatile unsigned char *)0x4e000016)
#endif
至此tocore2440.h文件修改完毕
b.建立目录/board/tocore/tocore2440,将/board/samsung/smdk2440下的文件拷贝至/board/tocore/tocore2440下,拷贝nand_read.c(开发板自带)文件至该目录下。修改Makefile文件(line28)
COBJS:=tocore2440.o nand_read.oflash.o
c.修改lowlevel_init.S文件,添加如下支持2440代码:
#if defined(CONFIG_S3C2440)
#define Trp0x2
#define REFCNT1012
#else
#define Trp0x0
#define REFCNT0x0459
#endif
d.修改tocore2440.c文件:
在#elif FCLK_SPEED==1之后添加:
#if defined(CONFIG_S3C2440)
#define M_MDIV0x7f
#define M_PDIV0x2
#define M_SDIV0x1
#endif
#endif
在#elif USB_CLOCK==1之后修改为:
//#define U_M_MDIV0x48
//#define U_M_PDIV0x3

#if defined(CONFIG_S3C2440)
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#endif
修改board_init()函数:
将gpio->GPGCON的值改为 0xFF95FF3A;
将gpio->GPHCON 的值改为 0x0016FAAA
在gpio->GPHUP = 0x000007FF之后添加一下宏定义:
gpio->EXTINT0=0x22222222;
gpio->EXTINT1=0x22222222;
gpio->EXTINT2=0x22222222;

在dcache_enable()函数之后添加以下低昂等操作代码:
#if defined(CONFIG_TOCORE2440_LED)
gpio->GPBDAT = 0x181;
#endif

在board_init()函数之后添加以下函数:
#ifdef CONFIG_DRIVER_DM9000
int board_eth_init(bd_t *bis)
{
return dm9000_initialize(bis);
}
#endif
至此tocore2440.c文件修改完毕
e.修改start.S文件:
1)注释掉以下代码:
//bl coloured_LED_init
//bl red_LED_on
在#if defined (CONFIG_S3C2400) || defined (CONFIG_S3C2410)之后添加2440的支持:|| defined(CONFIG_S3C2440)
2)在line146之后添加对时钟设置代码:
#define CLK_CTL_BASE0x4C000000
#define MDIV_4050x7f<<12
#define PSDIV_4050x21
#define MDIV_2000xa1<<12
#define PSDIV_2000x31
#endif
在line163之后添加工作频率设置汇编代码
#if defined(CONFIG_S3C2440)

上一页 1 2 下一页

评论


技术专区

关闭