u-boot-2012.04.01移植笔记——时钟、SDRAM、UART
2014-08-08 15:36
337 查看
首先我们通过分析得知源代码的机制:
它的链接地址设置在了0地址处,而且只支持norflash启动,还会进行代码重定位!既然链接地址就在0地址处,为什么还要代码重定位呢?这是因为norflash可以向内存一样读,但是不可以向内存一样写,所以有些变量和函数需要重定位到内存里面去!我们需要在连接时使用-pie选项,这样旧的地址就会保存在某个段里面,我们就可以这个段里面的内容将旧的地址修改为重定位后的地址!重定位函数是:relocate_code(addr_sp, id, addr);
addr_sp=0x34000000-(一部分空间):作为栈使用
addr指向上一行所说的“一部分空间”中某一块,用来放重定位的代码
下面我们来修改u-boot源码:
1、新建单板:
cd board/samsung
cp smdk2410 smdk2440 -rf
2、增加配置文件:
cd include/configs/首先我们通过分析得知源代码的机制:
它的链接地址设置在了0地址处,而且只支持norflash启动,还会进行代码重定位!既然链接地址就在0地址处,为什么还要代码重定位呢?这是因为norflash可以向内存一样读,但是不可以向内存一样写,所以有些变量和函数需要重定位到内存里面去!我们需要在连接时使用-pie选项,这样旧的地址就会保存在某个段里面,我们就可以这个段里面的内容将旧的地址修改为重定位后的地址!重定位函数是:relocate_code(addr_sp, id, addr);
addr_sp=0x34000000-(一部分空间):作为栈使用
addr指向上一行所说的“一部分空间”中某一块,用来放重定位的代码
下面我们来修改u-boot源码:
1、新建单板:
cd board/samsung
cp smdk2410 smdk2440 -rf
2、增加配置文件:
cd include/configs/
cp smdk2410.h smdk2440.h
3、增加配置选项:
vi boards.cfg
加入下面一行:
smdk2440 arm arm920t - samsung s3c24x0
4、修改时钟参数:
在board/samsung/smdk2440/smdk2410.c的board_early_init_f函数里面,注释掉以下几行:
/* to reduce PLL lock time, adjust the LOCKTIME register */
//writel(0xFFFFFF, &clk_power->locktime); /* configure MPLL */
//writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
// &clk_power->mpllcon);
在arch/arm/cpu/arm920t/start.S里面将:
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr
r0, =CLKDIVN
mov
r1, #3
str
r1, [r0]
修改为:
ldr r0 , =0x4C000014
mov r1 , #5
str r1 , [r0]
mrc
p15, 0, r0, c1, c0, 0
orr
r1, r1, #0xc0000000
mcr
p15, 0, r0, c1, c0, 0
ldr r0 , =0x4C000004
ldr r1 , =((0x5c<<12)|(0x01<<4)|(0x01))
str r1 , [r0]
5、开启icache:
在时钟设置代码的下面加入如下代码:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #(1<<12)
mcr
p15, 0, r0, c1, c0, 0
6、修改内存配置:
在board/samsung/smdk2440/lowlevel_init.S文件里面
将如下代码:
.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
.word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
.word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
.word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
.word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
.word 0x32
.word 0x30
.word 0x30
修改为如下代码:
.long 0x22011110 @ BWSCON
.long 0x00000700 @ BANKCON0
.long 0x00000700 @ BANKCON1
.long 0x00000700 @ BANKCON2
.long 0x00000700 @ BANKCON3
.long 0x00000700 @ BANKCON4
.long 0x00000700 @ BANKCON5
.long 0x00018005 @ BANKCON6
.long 0x00018005 @ BANKCON7
.long 0x008C07A3 @ REFRESH
.long 0x000000B1 @ BANKSIZE
.long 0x00000030 @ MRSRB6
.long 0x00000030 @ MRSRB7
7、串口配置:
在include/configs/smdk2440.h中将
CONFIG_S3C2410
改为
CONFIG_S3C2440
我们可以编译下,可以看到串口正常输出!
编译出现错误:忘记是什么了,反正是说s3c2440_nand.c文件有什么没有定义
解决方法:将#define CONFIG_CMD_NAND注释掉
再次编译,出现错误:
fs/yaffs2/libyaffs2.o: In function `yaffs_StartUp':
/home/share/jz2440/source/u-boot/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info'
解决方法:将#define CONFIG_YAFFS2注释掉
cp smdk2410.h smdk2440.h
3、增加配置选项:
vi boards.cfg
加入下面一行:
smdk2440 arm arm920t - samsung s3c24x0
4、修改时钟参数:
在board/samsung/smdk2440/smdk2410.c的board_early_init_f函数里面,注释掉以下几行:
/* to reduce PLL lock time, adjust the LOCKTIME register */
//writel(0xFFFFFF, &clk_power->locktime); /* configure MPLL */
//writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
// &clk_power->mpllcon);
在arch/arm/cpu/arm920t/start.S里面将:
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr
r0, =CLKDIVN
mov
r1, #3
str
r1, [r0]
修改为:
ldr r0 , =0x4C000014
mov r1 , #5
str r1 , [r0]
mrc
p15, 0, r0, c1, c0, 0
orr
r1, r1, #0xc0000000
mcr
p15, 0, r0, c1, c0, 0
ldr r0 , =0x4C000004
ldr r1 , =((0x5c<<12)|(0x01<<4)|(0x01))
str r1 , [r0]
5、开启icache:
在时钟设置代码的下面加入如下代码:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #(1<<12)
mcr
p15, 0, r0, c1, c0, 0
6、修改内存配置:
在board/samsung/smdk2440/lowlevel_init.S文件里面
将如下代码:
.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
.word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
.word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
.word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
.word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
.word 0x32
.word 0x30
.word 0x30
修改为如下代码:
.long 0x22011110 @ BWSCON
.long 0x00000700 @ BANKCON0
.long 0x00000700 @ BANKCON1
.long 0x00000700 @ BANKCON2
.long 0x00000700 @ BANKCON3
.long 0x00000700 @ BANKCON4
.long 0x00000700 @ BANKCON5
.long 0x00018005 @ BANKCON6
.long 0x00018005 @ BANKCON7
.long 0x008C07A3 @ REFRESH
.long 0x000000B1 @ BANKSIZE
.long 0x00000030 @ MRSRB6
.long 0x00000030 @ MRSRB7
7、串口配置:
在include/configs/smdk2440.h中将
CONFIG_S3C2410
改为
CONFIG_S3C2440
我们可以编译下,可以看到串口正常输出!
编译出现错误:忘记是什么了,反正是说s3c2440_nand.c文件有什么没有定义
解决方法:将#define CONFIG_CMD_NAND注释掉
再次编译,出现错误:
fs/yaffs2/libyaffs2.o: In function `yaffs_StartUp':
/home/share/jz2440/source/u-boot/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info'
解决方法:将#define CONFIG_YAFFS2注释掉
它的链接地址设置在了0地址处,而且只支持norflash启动,还会进行代码重定位!既然链接地址就在0地址处,为什么还要代码重定位呢?这是因为norflash可以向内存一样读,但是不可以向内存一样写,所以有些变量和函数需要重定位到内存里面去!我们需要在连接时使用-pie选项,这样旧的地址就会保存在某个段里面,我们就可以这个段里面的内容将旧的地址修改为重定位后的地址!重定位函数是:relocate_code(addr_sp, id, addr);
addr_sp=0x34000000-(一部分空间):作为栈使用
addr指向上一行所说的“一部分空间”中某一块,用来放重定位的代码
下面我们来修改u-boot源码:
1、新建单板:
cd board/samsung
cp smdk2410 smdk2440 -rf
2、增加配置文件:
cd include/configs/首先我们通过分析得知源代码的机制:
它的链接地址设置在了0地址处,而且只支持norflash启动,还会进行代码重定位!既然链接地址就在0地址处,为什么还要代码重定位呢?这是因为norflash可以向内存一样读,但是不可以向内存一样写,所以有些变量和函数需要重定位到内存里面去!我们需要在连接时使用-pie选项,这样旧的地址就会保存在某个段里面,我们就可以这个段里面的内容将旧的地址修改为重定位后的地址!重定位函数是:relocate_code(addr_sp, id, addr);
addr_sp=0x34000000-(一部分空间):作为栈使用
addr指向上一行所说的“一部分空间”中某一块,用来放重定位的代码
下面我们来修改u-boot源码:
1、新建单板:
cd board/samsung
cp smdk2410 smdk2440 -rf
2、增加配置文件:
cd include/configs/
cp smdk2410.h smdk2440.h
3、增加配置选项:
vi boards.cfg
加入下面一行:
smdk2440 arm arm920t - samsung s3c24x0
4、修改时钟参数:
在board/samsung/smdk2440/smdk2410.c的board_early_init_f函数里面,注释掉以下几行:
/* to reduce PLL lock time, adjust the LOCKTIME register */
//writel(0xFFFFFF, &clk_power->locktime); /* configure MPLL */
//writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
// &clk_power->mpllcon);
在arch/arm/cpu/arm920t/start.S里面将:
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr
r0, =CLKDIVN
mov
r1, #3
str
r1, [r0]
修改为:
ldr r0 , =0x4C000014
mov r1 , #5
str r1 , [r0]
mrc
p15, 0, r0, c1, c0, 0
orr
r1, r1, #0xc0000000
mcr
p15, 0, r0, c1, c0, 0
ldr r0 , =0x4C000004
ldr r1 , =((0x5c<<12)|(0x01<<4)|(0x01))
str r1 , [r0]
5、开启icache:
在时钟设置代码的下面加入如下代码:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #(1<<12)
mcr
p15, 0, r0, c1, c0, 0
6、修改内存配置:
在board/samsung/smdk2440/lowlevel_init.S文件里面
将如下代码:
.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
.word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
.word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
.word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
.word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
.word 0x32
.word 0x30
.word 0x30
修改为如下代码:
.long 0x22011110 @ BWSCON
.long 0x00000700 @ BANKCON0
.long 0x00000700 @ BANKCON1
.long 0x00000700 @ BANKCON2
.long 0x00000700 @ BANKCON3
.long 0x00000700 @ BANKCON4
.long 0x00000700 @ BANKCON5
.long 0x00018005 @ BANKCON6
.long 0x00018005 @ BANKCON7
.long 0x008C07A3 @ REFRESH
.long 0x000000B1 @ BANKSIZE
.long 0x00000030 @ MRSRB6
.long 0x00000030 @ MRSRB7
7、串口配置:
在include/configs/smdk2440.h中将
CONFIG_S3C2410
改为
CONFIG_S3C2440
我们可以编译下,可以看到串口正常输出!
编译出现错误:忘记是什么了,反正是说s3c2440_nand.c文件有什么没有定义
解决方法:将#define CONFIG_CMD_NAND注释掉
再次编译,出现错误:
fs/yaffs2/libyaffs2.o: In function `yaffs_StartUp':
/home/share/jz2440/source/u-boot/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info'
解决方法:将#define CONFIG_YAFFS2注释掉
cp smdk2410.h smdk2440.h
3、增加配置选项:
vi boards.cfg
加入下面一行:
smdk2440 arm arm920t - samsung s3c24x0
4、修改时钟参数:
在board/samsung/smdk2440/smdk2410.c的board_early_init_f函数里面,注释掉以下几行:
/* to reduce PLL lock time, adjust the LOCKTIME register */
//writel(0xFFFFFF, &clk_power->locktime); /* configure MPLL */
//writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
// &clk_power->mpllcon);
在arch/arm/cpu/arm920t/start.S里面将:
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr
r0, =CLKDIVN
mov
r1, #3
str
r1, [r0]
修改为:
ldr r0 , =0x4C000014
mov r1 , #5
str r1 , [r0]
mrc
p15, 0, r0, c1, c0, 0
orr
r1, r1, #0xc0000000
mcr
p15, 0, r0, c1, c0, 0
ldr r0 , =0x4C000004
ldr r1 , =((0x5c<<12)|(0x01<<4)|(0x01))
str r1 , [r0]
5、开启icache:
在时钟设置代码的下面加入如下代码:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #(1<<12)
mcr
p15, 0, r0, c1, c0, 0
6、修改内存配置:
在board/samsung/smdk2440/lowlevel_init.S文件里面
将如下代码:
.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
.word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
.word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
.word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
.word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
.word 0x32
.word 0x30
.word 0x30
修改为如下代码:
.long 0x22011110 @ BWSCON
.long 0x00000700 @ BANKCON0
.long 0x00000700 @ BANKCON1
.long 0x00000700 @ BANKCON2
.long 0x00000700 @ BANKCON3
.long 0x00000700 @ BANKCON4
.long 0x00000700 @ BANKCON5
.long 0x00018005 @ BANKCON6
.long 0x00018005 @ BANKCON7
.long 0x008C07A3 @ REFRESH
.long 0x000000B1 @ BANKSIZE
.long 0x00000030 @ MRSRB6
.long 0x00000030 @ MRSRB7
7、串口配置:
在include/configs/smdk2440.h中将
CONFIG_S3C2410
改为
CONFIG_S3C2440
我们可以编译下,可以看到串口正常输出!
编译出现错误:忘记是什么了,反正是说s3c2440_nand.c文件有什么没有定义
解决方法:将#define CONFIG_CMD_NAND注释掉
再次编译,出现错误:
fs/yaffs2/libyaffs2.o: In function `yaffs_StartUp':
/home/share/jz2440/source/u-boot/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info'
解决方法:将#define CONFIG_YAFFS2注释掉
相关文章推荐
- 【Linux 移植 】——3、移植 u-boot-2012.04.01 之 修改代码(时钟,SDRAM,UART)
- u-boot2010.06的移植(2)—— 时钟、SDRAM、UART
- u-boot-2012.04.01移植笔记——支持NAND启动
- u-boot移植(五)---代码修改---时钟修改、SDRAM
- u-boot-2016.05移植:(2)、修改时钟 初始化sdram 重定位u-boot 配置smdk2440.h 修改u-boot.lds
- 【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
- u-boot-2012.04.01移植到TQ2440(二):修改时钟
- 韦东山老师讲解移植uboot-2012.04.01的笔记总结
- 移植u-boot学习笔记4-----修改代码之建新板_时钟
- 【TINY4412】U-BOOT移植笔记:(5)时钟分析
- u-boot-2012.04.01移植笔记——支持NAND启动
- U-Boot-2009-03移植笔记(第二阶段:时钟!)
- U-boot移植笔记(一)
- u-boot-2012.04.01移植到TQ2440(六):支持NAND FLASH启动
- u-boot-2012.04.01移植到TQ2440(三):移植NOR FLASH
- u-boot-2012.04.01移植到TQ2440(八):支持烧写yaffs文件系统
- u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统
- 移植u-boot-2010.09到S3C2440(六)—— SDRAM地址与容量的计算(转)
- u-boot-2009.08移植笔记二,平台TQ2440
- u-boot-2012.04.01移植到TQ2440(一):建立自己的开发板