U-Boot2010.06移植(2440)-----基本移植
2017-03-17 15:32
302 查看
1、修改顶层Makefile文件
(1)添加(第二行前面有个TAB):smdk2440_config :unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 samsung s3c24x0
(2)指定交叉编译器:
CROSS_COMPILE ?=arm-linux-
2、在board/samsung目录下新建smdk2440,并将board/samsung/smdk2410目录下的文件拷到smdk2440目录下,把smdk2410.c改名为smdk2440.c。
(1)修改board/samsung/smdk2440目录下的MakefileCOBJS :=smdk2440.o flash.o
3、在include/configs目录下创建开发板配置头文件,拷贝一份smdk2410.h,并改名为smdk2440.h
4、修改arch/arm/cpu/arm920t/start.S
(1)删掉LED部分/*
bl coloured_LED_init
bl red_LED_on
*/
(2)添加2440关闭中断
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
# if defined(CONFIG_S3C2440)
ldr r1, =0x7fff /*15个中断,根据2440手册*/
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
(3)定义MPLL寄存器
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014
# define MPLLCON 0x4C000004 /*2440特有的寄存器*/
# endif
(4)注释掉2410的时钟设置,并添加时钟设置
#if 0
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif
/*2440时钟设置*/
/* FCLK:HCLK:PCLK = 1:4:8 UCLK = UPLL*/
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]
/*2440不支持同步总线模式,所以要切换到异步总线模式*/
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
/*查看2440手册255页,405MHz的值为0x7f021*/
ldr r1, =MPLLCON
ldr r2, =0x5c011
str r2, [r1] @400mhz
5、修改include/configs/smdk2440.h
(1)添加:#define CONFIG_S3C2440 1
6、修改board/samsung/smdk2440/smdk2440.c
(1)注释掉clock宏定义代码#if 0
#define FCLK_SPEED 1
#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
#define USB_CLOCK 1
#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#endif
#endif
(2)添加时钟频率宏定义
//#define S3C2440_MPLL_405MHZ ((0x7f<<12)|(0x02<<4)|(0x01)) // 405MHz, 在手册中可以查到(255页)
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) // 400MHz
#define S3C2440_UPLL_48MHZ ((0x38<<12)|(0x02<<4)|(0x02)) // 48MHz
(3)修改board_init函数的时钟配置
clk_power->LOCKTIME = 0xFFFFFF;
clk_power->UPLLCON = S3C2440_UPLL_48MHZ;
delay (4000);
clk_power->MPLLCON = S3C2440_MPLL_400MHZ;
delay (8000);
*根据2440手册知道:当你设置MPLL 和UPLL 的值时,你必须首先设置UPLL 值再设置MPLL 值。(大约需要7 个NOP 的间隔)
(4)修改board_init函数的MACH_TYPE
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
*这个值要和内核的MACH_TYPE相同
7、修改arch/arm/cpu/arm920t/s3c24x0/speed.c
(1)修改get_PLLCLK函数(该函数会被设置波特率的函数调用)static ulong get_PLLCLK(int pllreg)
{
……………………
//return (CONFIG_SYS_CLK_FREQ *m) / (p << s); //2410
return (CONFIG_SYS_CLK_FREQ * m * 2) / (p <<s); //2440
}
(2)添加时钟分频宏定义
#define S3C2440_CLKDIVN_HDIVN_MASK (3<<1)
#define S3C2440_CLKDIVN_HDIVN_1 (0<<1)
#define S3C2440_CLKDIVN_HDIVN_2 (1<<1)
#define S3C2440_CLKDIVN_HDIVN_4_8 (2<<1)
#define S3C2440_CLKDIVN_HDIVN_3_6 (3<<1)
#define S3C2440_CAMDIVN_HCLK3_HALF (1<<8)
#define S3C2440_CAMDIVN_HCLK4_HALF (1<<9)
(3)修改get_HCLK函数
ulong get_HCLK(void)
{
struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
unsigned long clkdiv;
unsigned long camdiv;
int hdiv;
clkdiv = readl(&clk_power->CLKDIVN); //读取CLKDIVN寄存器的值
camdiv = readl(&clk_power->CAMDIVN); //读取CAMDIVN寄存器的值
//根据CLKDIVN寄存器的[2:1]来设置HCLK的分频值(查看2440手册258页)
switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {
case S3C2440_CLKDIVN_HDIVN_1:
hdiv = 1;
break;
case S3C2440_CLKDIVN_HDIVN_2:
hdiv = 2;
break;
case S3C2440_CLKDIVN_HDIVN_4_8:
hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;
break;
case S3C2440_CLKDIVN_HDIVN_3_6:
hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;
break;
}
//return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();
return get_FCLK() / hdiv;
}
8、修改arch/arm/include/asm/arch-s3c24x0/s3c24x0.h(寄存器声明头文件)
(1)添加CAMDIVN寄存器structs3c24x0_clock_power {
……………
u32 CLKDIVN;
u32 CAMDIVN;
};
9、修改board/samsung/smdk2440/lowlevel_init.S
(1)修改REFCNT
//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz,(2048+1-15.6*60) */#define REFCNT 0x4f5
10、修改arch/arm/cpu/arm920t/u-boot.lds
(1)添加lowlevel_init.S的目标文件加入到.text中,防止被放到4k的地址外.text :
{
arch/arm/cpu/arm920t/start.o (.text)
board/samsung/smdk2440/lowlevel_init.o (.text)
*(.text)
}
到此基本的移植已完成。
make smdk2440_config
make
现在只能烧录到NorFlash
相关文章推荐
- U-Boot2010.06移植(2440)-----添加MTD(NAND)分区
- U-Boot2010.06移植(2440)-----添加支持YAFFS2文件系统
- U-Boot2010.06移植(2440)-----移植NorFlash驱动
- U-Boot2010.06移植(2440)-----移植NandFlash驱动
- U-Boot2010.06移植(2440)-----移植网卡DM9000驱动
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(三)
- bootloader---22.u-boot-2010.06-rc1移植之2搭建框架
- 嵌入式驱动开发之2440/2410---uboot 移植
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(二)——让u-boot支持从nor flash 启动
- u-boot-2010.12移植到2440
- 基于qq2440开发平台的uboot移植(1)
- 移植u-boot2012.04.1 -》2440 (四)DM9000移植,环境变量设置
- 2440超详细uboot移植笔记(十五)------支持YAFFFS文件系统
- mini2440uboot移植-基本操作指令
- u-boot移植到2440
- u-boot2010.06的移植(5)——支持nandflash、分区及环境参数的设置
- [转]u-boot-2010.12移植到2440(五,yaffs2文件系统移植
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(四)
- U-Boot-2010.12移植到2440
- bootloader---23.u-boot-2010.06-rc1移植之3nand flash移植