bootloader---21.u-boot-2010.06-rc1移植之调试的思路

原创 2016年08月30日 11:12:23
硬件: 
   开发板: TQ2440
   仿真器: openJtag
软件:
   系统: XP + vmware虚拟ubuntu_10.10
   编译: ubuntu_10.10下/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/
   调试环境: XP + eclipse + OpenOCD_GUI
   u-boot版本: u-boot-2010.06-rc1
一. 调试环境
用openjtag调试与烧到nand_flash中运行基本相同,就是有两点不一样: 一是跳过了memory初始化过程 二是跳过了从flash中读取数据到内存

1.1 用openjtag调试时,需要把arch/arm/cpu/arm920t/start.S中的
  1. #ifndef CONFIG_SKIP_LOWLEVEL_INIT
  2. #if 0
  3.     bl    cpu_init_crit
  4. #endif
  5. #endif
  6. cpu_init_crit注掉。

1.2 同时在 board/samsung/smdk2410/config.mk 中将改TEXT_BASE为:
TEXT_BASE=0x33000000
这会导致arch/arm/cpu/arm920t/start.S跳过从nand_flash中读取uboot到memory的过程。
因为当前运行地址为0x33000000, 程序的链接地址TEXT_BASE=0x33000000
程序的加载地址与运行地址是相等的, 所以 
adr r0, _start /* r0 <- current position of code   */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug         */
beq clear_bss
都是在memory中,就不执行从nand_flash中读取uboot了.

1.3 在config.mk中
  1. 153 DBGFLAGS= -g3 # -DDEBUG
  2. 154 OPTFLAGS= -O0 #-fomit-frame-pointer
  3. 说明:
    1. -glevel:
    Level 1输出最少量的信息,仅够在不打算调试的程序段内backtrace.包括函数和外
    部变量的描述,但是 没有局部变量和行号信息.

    Level 3包含更多的信息,如程序中出现的所有宏定义.当使用-g3选项的时候,某些
    调试器支持 宏扩展.
    2. 将-Os改为-O0:
    不去掉-Os,如果在调试时,函数会乱跳,但还不是出错的乱跳,出现这种令人抓乱的情况时,就需要考虑是不是优化的太多了,把-Os改为-O0重新编译一下就ok了!

1.4 但是对于1.3中改DBGFLAGS= -g3,会引起u-boot.lds生成不正常
需要在Makefile中做一点小小的处理,将CPPFLAGS中的-g3替换成-g,生成新的CPPFLAGS
  1.  273 TEMPCPPFLAG=$(subst g3,g, $(CPPFLAG))

  2.  368 $(obj)u-boot.lds: $(LDSCRIPT)
  3.  369 $(CPP) $(TEMPCPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
1.5 重新编译之后,将虚拟机中的u-boot复制到windows下的目录里,就可以利用openjtag在eclipse里面进行单步调试了.(具体的设置方法请参见)

二.测试代码: 
网上有很多移植的教程,按照教程一步步来做肯定会移植好u-boot的,但是如果在移植过程中出现了错误如何定位呢?下面给出一些测试代码来验证功能是否正常.
1. 测试内存正常的代码
  1.     /*write 0x12345678 to 0x30000000*/
  2.     ldr r0, =0x30000000
  3.     ldr r1, =0x12345678
  4.     str r1, [r0]

  5.     /*read from 0x30000000 && compare*/
  6.     ldr r2, =0x30000000
  7.     ldr r0, [r2]
  8.     cmp r1, r0
  9.     bne ledon

  10. deadloop:
  11.     b deadloop

  12. ledon:
  13.     ldr r0, =0x56000010
  14.     ldr r1, =0x15400
  15.     str r1, [r0]

  16.     ldr r0, =0x56000014
  17.     ldr r1, =0x160
  18.     str r1, [r0]
  19. deadloop2:
  20.     b deadloop2
使用说明: u-boot移植过程中,一般要进行memory初始化,初始化好memory之后,拿上面这一段代码测试一下。如果led灯亮,说明有错误。
思路: 向内存的起始地址0x30000000写一个数0x12345678,然后读取出来,若相等,则说明memory初始化正常。
注意:arm好像没有直接读取内存到寄存器的指令,mov r3, #0 然后再用ldr  ldr r3, [r3]

2. 测试nand flash 读写正常

  1. SMDK2410 # nand write 0x30000000 0x40000 0x10000

  2. NAND write: device 0 offset 0x40000, size 0x10000
  3.  65536 bytes written: OK
  4.  SMDK2410 # nand read 0x30000000 0x40000 0x100

  5.  NAND read: device 0 offset 0x40000, size 0x100
  6.   256 bytes read: OK
  7.  SMDK2410 # md.b 0x30000000 0x10
  8.  30000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
需要用到u-boot的命令(nand read 与 nand write 和md)
nand write: 将数据从memory的0x30000000长度0x10000写入到nand的0x40000处
nand read:  将数据从nand的0x40000长度为0x10000写入到memory的0x30000000处
md.b     :  按字节显示memory的0x30000000长度为0x10的数据
版权声明:本文为博主原创文章,转载请注明出处。

Zynq-Linux移植学习笔记之二-知识点

在zynq上进行Linux的移植并基于Linux进行驱动开发需要涉及到很多东西,用一张图说明要掌握哪些知识: 如上图所示,对开发驱动的人来说,既要懂软件也要懂硬件,软件上需要对操作系统结构和接...
  • jj12345jj198999
  • jj12345jj198999
  • 2017年01月18日 22:53
  • 1393

Map实现分拣思路

package guwa; public class Letter { private String name; private int count; public Letter() { ...
  • chunxiaqiudong5
  • chunxiaqiudong5
  • 2016年10月10日 12:50
  • 232

物联网核心之MQTT移植

在上一篇文章中,只是讲了MQTT的主要内容,至于怎么移植到STM32上,怎么使用才是最重要的关键。这里使用的平台是RT8711的WIFI SOC,使用的LWIP跟FreeRTOS,移植使用跟STM...
  • mzwhhwj
  • mzwhhwj
  • 2017年09月11日 23:01
  • 831

友善之臂 tslib一线触摸完美移植

开发板:友善之臂 mini210   博主曾耗费两三天移植tslib,都没有成功,各种失败,各种报错。 经过本人对 友善之臂 /etc/init.d/rcS (PS:该文件是文件系统初始化文件) 严格...
  • ESD1406
  • ESD1406
  • 2015年01月30日 16:29
  • 331

三国佚事——巴蜀之危(错排公式)

Problem Description 话说天下大势,分久必合,合久必分。。。却道那魏蜀吴三国鼎力之时,多少英雄豪杰以热血谱写那千古之绝唱。古人诚不我欺,确是应了那句“一将功成万骨枯”。  是夜,...
  • zhj9579
  • zhj9579
  • 2018年01月23日 15:23
  • 8

Zynq-Linux移植学习笔记之六-netperf网络测试

这一篇讲一讲在zynq开发板上面的进行网络测试。1、netperf安装目前linux下主流的网络测试工具是netperf,完全可以在zc706上运行的linux内加入netperf网络测试工具,然后用...
  • jj12345jj198999
  • jj12345jj198999
  • 2017年02月13日 14:30
  • 1121

程序调试的一般思路

每个程序员的很多时间都在和bug打交道,而debug的过程总不那么令人高兴。本人在调试过程中总结了几点调试程序的一般方法,写出来和大家分享,能力有限,欢迎各位大神批评指正! 1.单步调试 从问题程...
  • cyfcsd
  • cyfcsd
  • 2016年02月21日 21:38
  • 405

递推递归练习H - 三国佚事——巴蜀之危

Description 话说天下大势,分久必合,合久必分。。。却道那魏蜀吴三国鼎力之时,多少英雄豪杰以热血谱写那千古之绝唱。古人诚不我欺,确是应了那句“一将功成万骨枯”。    是夜,明月高悬...
  • July_xunle
  • July_xunle
  • 2017年03月25日 09:58
  • 127

Java中的河内之塔算法

作为一个小萌新,刚刚接触Java,如果有写的错误跟不好的地方请各位大神指正 河内之塔的介绍: 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的...
  • AquileCarr
  • AquileCarr
  • 2017年07月23日 21:14
  • 184

移植Qt4.7到友善之臂mini6410开发板全过程

pc系统:ubuntu14.04 材料:qt-everywhere-opensource-src-4.7.0.tar.gz 交叉编译环境:arm-linux-gcc 首先在/opt路径下创建min...
  • pillarzheng
  • pillarzheng
  • 2016年10月06日 16:09
  • 509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bootloader---21.u-boot-2010.06-rc1移植之调试的思路
举报原因:
原因补充:

(最多只允许输入30个字)