氧化铁红厂家
免费服务热线

Free service

hotline

010-00000000
氧化铁红厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

Uboot2009.08移植TE2440II开发板在SDRAM中运行 软件编程OS 免费猫

发布时间:2020-02-17 13:35:42 阅读: 来源:氧化铁红厂家

U-boot-2009.08移植TE2440II开发板--在SDRAM中运行 - 软件编程/OS - 电子工程网

因为串口的波特率问题纠结了我2天,嘿嘿。

1.首先创建自己板子的目录

cd u-boot-2009.08

mkdir board/samsung/TE2440II

cp board/samsung/smdk2410/* board/samsung/TE2440II/

mv board/samsung/TE2440II/smdk2410.c board/samsung/TE2440II/TE2440II.c

2.添加配置文件

cp include/configs/smdk2410.h include/configs/TE2440II.h

在include/configs/smdk2410.h include/configs/TE2440II.h中添加

#define CONFIG_SKIP_LOWLEVEL_INIT???????? 1???

因为是先在SDRAM中运行,所以要跳过底层的初始化。暂时没有添加CONFIG_2440,用原来的CONFIG_2410,以提高移植速度。

注意暂时不要添加#define CONFIG_SKIP_RELOCATE_UBOOT??? 1

否则就要更改你的下载地址为0x33f80000,让他去搬运代码吧

3.修改board/samsung/TE2440II/ 目录下的Makefile,把COBJS := 修改为

COBJS??? := TE2440II.o flash.o

4.修改顶层Makefile

TE2440II_config : unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t TE2440II samsung s3c24x0

注意有个Tab键

5. 修改顶层Makefile文件,在CROSS_COMPILE ?=后面添加自己的交叉编译工具。

CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux-

6.完成这几步后编译一下

make TE2440II_config

make

下到SDRAM中,终端应该没有任何信息,需要设置波特率。

1.修改TE2440II.c文件

#elif FCLK_SPEED==1/* Fout = 405MHz */

#define M_MDIV0x7f

#define M_PDIV0x2

#define M_SDIV0x1

#endif

2.??? 修改cpu/arm920t/start.S

外部晶振为12MHz,通过MPLLCON设置MPLL为405M

#if defined(CONFIG_S3C2410)

#define MPLLCON 0x4C000004

#define UPLLCON 0x4c000008

#define LOCKTIME 0x4C000000

#define CAMDIVN? 0x4C000018

ldr r0,=LOCKTIME

ldr r1,=0xffffffff

str r1,[r0]

//清除摄像头分频寄存器的值

ldr r0,=CAMDIVN

mov r1,#0

str r1,[r0]

ldr r0, =CLKDIVN

mov r1, #5

str r1,[r0]

//手册说HDIVN不为0,加这个

mrc p15, 0, r1, c1, c0, 0//read ctrl register

orr r1, r1, #0xc0000000 //Asynchronous

mcr? p15, 0, r1, c1, c0, 0//write ctrl register

ldr r0, =UPLLCON//同时修改UPLLCON和MPLLCON需要先修??

ldr r1, =0x00038022//改UPLLCON,且之间要间隔至少7个nop

str r1,[r0]//手册有些

nop

nop

nop

nop

nop

nop

nop

nop

ldr r0, =MPLLCON

ldr r1, =0x0007f021

str r1,[r0]

#endif

3. 修改cpu/arm920t/s3c24x0/speed.c

由于S3C2440和S3C2410的MPLL计算公式改变了,所以要改一下。

get_PLLCLK改成这样

static ulong get_PLLCLK(int pllreg)

{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

ulong r, m, p, s;

if (pllreg == MPLL)

r = clk_power->MPLLCON;

else if (pllreg == UPLL)

r = clk_power->UPLLCON;

else

hang();

m = ((r 0xFF000) >> 12) + 8;

p = ((r 0x003F0) >> 4) + 2;

s = r 0x3;

if (pllreg == MPLL) //MPLL的算法和UPLL是不同的。这里m=2*m

{

m <<= 1;

}

p = ((r 0x003F0) >> 4) + 2;

s = r 0x3;

return ((CONFIG_SYS_CLK_FREQ * m) / (p << s));

}

get_HCLK改成这样

/* return HCLK frequency */

ulong get_HCLK(void)

{

??? S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

??? return get_FCLK()/4;

??? //return((clk_power->CLKDIVN 0x2) ? get_FCLK()/2 : get_FCLK());

}

get_PCLK改成这样

/* return PCLK frequency */

ulong get_PCLK(void)

{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

return get_HCLK()/2;

//return((clk_power->CLKDIVN 0x1) ? get_HCLK()/2 : get_HCLK());

}

4.??? 我出问题的地方是串口,显示的基本跟正常的一样,但是显示为乱码,是串口波特率的问题。在drivers/serial/serial_s3c24x0.c中,修改

uart->UBRDIV = 27;

我直接设定了,不用鸟u-boot再鸟算了,他自己怎么也算不对,我帮他。

5.??? make TE2440II_config

?????? make

下载到SDRAM中,哈哈。

方志敏的故事

早安正能量

烤箱菜谱