今天尝试制作一个可以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: #################################################################
#################################################################
######################################
阅读(1163) | 评论(0) | 转发(0) |