OPENOCD在线调试uboot2010.06, utu2440 (扬创2440v4.5)

本文介绍如何在Ubuntu 20.04环境下使用OpenOCD工具对Utu2440开发板进行调试。包括安装OpenOCD、配置openocd.cfg文件、通过telnet连接调试以及常见问题解决方案等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主机环境为ubuntu20.04,硬件环境为utu2440+jlinkv9。 安装openocd:

 sudo apt-get install openocd

openocd 需要配置自己的openocd.cfg,配置文件可以放在当前执行openocd的目录,也可以是用参数-f指定。创建自己的openocd.cfg, 文件内容如下:

 source [find interface/jlink.cfg]
 source [find board/utu2440.cfg]

其中utu2440.cfg 拷贝 /usr/share/openocd/scripts/board/mini2440.cfg,略做修改gp即可。

注释掉第124行

 #jtag interface

注释掉第141行,添加如下2行,能够自动识别nand flash型号。

 #nand device s3c2440 0
 set _NANDNAME $_CHIPNAME.nand
 nand device $_NANDNAME s3c2440 $_TARGETNAMEa) 

打开终端 openocd -f /YOUR_PATH/openocd.cfg, 提示能够正确识别s3c2440

打开另一终端:telnet localhost 4444,出现如下信息:

  tgni@B460:~$ telnet localhost 4444
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
  Open On-Chip Debugger
  \>

执行 > init_2440 ,该命令用来初始化S3C2440的时钟,SDRAM,以及GPIO配置等等,具体配置参考utu2440.cfg中init_2440函数。

执行> load_image /YOUR_PATH/u-boot.bin 0x33f80000 bin

执行> resume 0x33f80000,u-boot.bin就可以在SDRAM中直接运行。不需要烧写nandflash。 这里0x33f8000是u-boot中TEXT_BASE的地址,如要更改,TEXT_BASE也需要同步修改。

u-boot.bin 的制作:在u-boot的my2440.h中216行,打开宏

 #define CONFIG_SKIP_LOWLEVEL_INIT   1

注释宏:

 //#define CONFIG_S3C2440_NAND_BOOT    1

这两个宏,分别控制是否进行SDRAM配置,以及是否从NAND FLASH启动。

在调试过程中,会出现各种奇怪的现象,供大家参考:

a) 串口无任何输出,这个时候,点灯调试是最方便的,看看代码运行到了哪里,也可以用jlink进行单步测试。经过一系列折腾,发现是在board.c中只要一执行env_init就挂了。另外初始化波特率也不成功。非常怪异。经常跑飞。我一开始用的编译器是网上找的arm-linux-gcc 4.7.3, 后来换成友善官网的arm-linux-gcc4.4.3就没有这些问题了。

b) 有关时钟配置,init_2440脚本已经初始化了时钟,SDRAM, GPIO等等,在u-boot中再次进行时钟的配置是没有任何问题的,主要是不能跑从nandflash搬代码的那段代码。

c) ping挂死。在SDRAM中调试DM9000的时候,发现在SDRAM能够运行DM9000,并且能够ping通主机,但是如果放入nand flash中就不行,只要运行ping程序就直接挂死。

一开始怀疑nand flash中代码有问题,于是利用openocd中nand命令,把nandflash中代码读出来和烧进去的bin进行比较,发现一模一样。然后start.S中的搬代码,也会检查前4K的代码是否和local sram中的代码是否一致,一般情况下,不会出现该问题。那就只剩lowlevel init的差异了。在SDRAM中运行的uboot是不执行这段代码的。经过自己检查,发现DM9000的bank3的访问地址时序和init_2440的访问时序并不一致。修改board/samsung/my2440/lowlevel_init.S与init_2440一致,即可。

Enjoy!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值