Chinaunix首页 | 论坛 | 博客
  • 博客访问: 276937
  • 博文数量: 95
  • 博客积分: 2047
  • 博客等级: 大尉
  • 技术积分: 1022
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 16:18
文章分类

全部博文(95)

文章存档

2013年(1)

2011年(94)

我的朋友

分类: 嵌入式

2011-08-14 19:17:25

今天尝试制作一个可以jtag加载的u-boot版本。

首先要做到事情是用u-boot来加载u-boot,在这基础上再考虑直接用仿真器加载u-boot,两者的区别在于前者会初始化所以内容:

1)尝试加载普通的u-boot,用go运行,不可以执行,卡死在go处
注意,u-boot加载的地址是board目录config.mk文件中定义的
TEXT_BASE = 0x30700000


U-Boot 1.3.3 (Jul 21 2009 - 19:19:37)

DRAM:  32 MB
Flash:  2 MB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial
Set the MAC successful!
SEP4020=>tftp 30700000 u-boot.bin
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'u-boot.bin'.
Load address: 0x30700000
Loading: ###########################
done
Bytes transferred = 135132 (20fdc hex)
SEP4020=>go 30700000
## Starting application at 0x30700000 ...▲

2)修改代码,C代码应该都是一样的,在哪里运行应该都没有问题,主要是启动时的汇编和一些配置文件。
比如上面的0x30700000,编写ram启动的u-boot应该使用其他地址避免冲突,我这选用0x30100000

首先来看汇编(主要是start.s的内容),对于SEP4020,涉及到4个关键内容:
cpu_init_crit 初始化CPU及串口

lowlevel_init 初始化EMI(主要是SDRAM)

remap 0地址重映射

relocate 从norflash搬运u-boot

3)用u-boot来加载u-boot,以上四个方面可以全部注释掉,因为已经做过了。
加载效果如下,注意看u-boot的编译日期,新的是ram版本的u-boot:
U-Boot 1.3.3 (Jul 21 2009 - 19:19:37)

DRAM:  32 MB
Flash:  2 MB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial
Set the MAC successful!
Hit any key to stop autoboot:  0 
SEP4020=>tftp 31f00000 u-boot-r.bin
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'u-boot-r.bin'.
Load address: 0x30100000
Loading: ###########################
done
Bytes transferred = 134868 (20ed4 hex)
SEP4020=>go 30100000
## Starting application at 0x30100000 ...


U-Boot 1.3.3 (Oct 23 2009 - 10:59:31)

DRAM:  32 MB
Flash:  2 MB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0 
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'zimage'.
Load address: 0x30008000
Loading: *

再启动时网络功能不能使用,因为重复初始化,估计出了问题。


4)下面尝试用JTAG直接加载u-boot,此时汇编中部分内容需要保留。
我首先保留了
cpu_init_crit 初始化CPU及串口
lowlevel_init 初始化EMI(主要是SDRAM)

编译好的u-boot用AXD加载,load memory到30100000出,手动修改pc指针为30100000,go!
可是发现有问题,调试器死掉了,停不下来。

仔细想想可能是配置SDRAM出了问题,程序本身就在SDRAM运行,此时再去配置EMI的SDRAM控制器,程序就跑飞了。

如果去掉lowlevel_init 初始化EMI(主要是SDRAM),SDRAM不配置只能使用2MB。。不过也可以用(所以地址我用了0x30100000)

最终版本只保留了cpu_init_crit 初始化CPU及串口,用JTAG加载到0x30100000出,手动修改pc指针,go,成功运行。

By the way,网络也可以正常运行,因为前面没有初始化过网络了,可惜可用内存太小,无法加载linux内核。。。。再想办法吧。

U-Boot 1.3.3 (Oct 23 2009 - 10:59:31)

DRAM:  32 MB
Flash:  2 MB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial
Set the MAC successful!
SEP4020=>tftp 30008000 zimage
TFTP from server 192.168.0.1; our IP address is 192.168.0.2
Filename 'zimage'.
Load address: 0x30008000
Loading: #################################################################
         #################################################################
         ######################################


阅读(1153) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~