TQ2440移植u-boot-2010.06-rc1---1调试的思路

发布者:MysticGarden最新更新时间:2018-04-15 来源: eefocus关键字:TQ2440  移植u-boo  调试 手机看文章 扫描二维码
随时随地手机看文章

硬件: 

   开发板: 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的数据


关键字:TQ2440  移植u-boo  调试 引用地址:TQ2440移植u-boot-2010.06-rc1---1调试的思路

上一篇:TQ2440移植u-boot-2010.06-rc1---2搭建框架
下一篇:TQ2440之uboot---7.start.S中关于bl指令的理解

推荐阅读最新更新时间:2024-03-16 16:00

STM32只开启SWD模式调试程序
由于IO口不足,需要将JTAG复用成IO口使用,保留SWD功能调试程序。设置如下: GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
[单片机]
使用泰克TDS3000C系列示波器调试电路
使用泰克TDS3000C系列示波器调试电路包括六款产品,型号分别为:TDS3012C、TDS3014C、TDS3032C、TDS3034C、TDS3052C、TDS3054C泰克TDS3000C系列示波器拥有高达500MHz的带宽,该紧凑的电池供电的设计中提供了经济的性能。这一流行的产品系列现在配有USB主机端口和PC连接软件,同时提供了熟悉的操作和简单的导航功能,您可以用更少的时间学习和重新学习怎样使用示波器,用更多的时间完成手头的任务。 1、如何调试数字定时问题数字设计人员必须迅速找到和分析各种电路定时问题。例如,竞争条件和瞬变可能会导致电路功能不当。TDS3000C系列的脉宽触发可以帮助调试这些情况,它在信号脉宽小于、大
[测试测量]
使用泰克TDS3000C系列示波器<font color='red'>调试</font>电路
泰克推出业内首个针对QSFP+产品的一致性测试和调试解决方案
泰克公司日前宣布,推出业内首个针对四通道 SFP接口 (QSFP+) 兼容产品的一致性测试和调试解决方案。新QSFP+解决方案基于泰克DPO/DSA/MSO70000示波器,包括用于设计、测试和验证QSFP+设计需要的所有组件、HCB夹具以及测试自动化和调试软件工具。 QSFP+是一种用于数据通信应用的紧凑型可热更换收发器。它将网络设备主板(如交换机、路由器、介质转换器或类似设备的主板)通过接口连接至光缆。SFF委员会发布的最新规范使数据传输速率达到4x10Gb/s并支持串行连接SCSI、40G以太网、20G/40G Infiniband和其他通信标准。与SFP+模块相比,QSFP+模块的端口密度增加了3-4倍。 “QSF
[测试测量]
适用于每个LabVIEW开发者的巧妙调试技巧
成为LabVIEW漏洞修复高手 如果您经常使用NI LabVIEW软件,当软件不能按照预期的情况运行时,您可能会有一个自己的调试技巧和技术工具箱。 这些技巧和技术有些是常用的,而剩下的可能是您自己摸索出来的。 图1.巧妙的调试方法能够清除漏洞。 (Brian Searle摄) 我们与JKI的LabVIEW程序架构师 ( Certified LabVIEW Architects, CLA ) 以及LabVIEW社区的朋友进行了交流,向他们学习一些快速识别、隔离和修复漏洞的“绝密”技巧。我们了解到以下几个巧妙的调试技巧。 利用探针 探针是LabVIEW调试的第一个也是最简单的工具,但它们却是非常强大的工具。您可极其轻松地
[测试测量]
适用于每个LabVIEW开发者的巧妙<font color='red'>调试</font>技巧
自制高灵敏度JJY授时信号接收系统 制作调试篇(一)
为了实现高灵敏度JJY信号接收系统,根据设计方案原理,需要从硬件和软件两个方面进行制作与调试。在硬件上,主要分为频带处理部分和基带处理部分。在软件上,主要完成对JJY信号的接收解码功能和电子时钟的功能。 硬件电路 1.接收天线 为了接收40kHz的低频授时信号,接收天线要采用磁棒天线,其和电容组成并联谐振回路作为输入回路。在铁氧体磁棒上绕上漆包线圈便可制成磁棒天线,根据经验值,其电感量应为mH级。磁棒选用导磁率2kH/m的锰锌铁氧体,尺寸为直径10mm,长度80mm的圆柱形磁棒,线圈采用直径0.25mm的单股漆包线,绕制成电感量约为4.8mH的磁棒天线(如图1所示),通过调整磁芯在线圈中的位置,可
[单片机]
自制高灵敏度JJY授时信号接收系统 制作<font color='red'>调试</font>篇(一)
STM32意外复位问题调试
最近在使用STM32座项目时遇到一个奇怪的问题。系统一开始运行很正常但是在长时间运行之后会随机的出现STM2单片机无故产生复位的问题。因为在调试的过程中收获颇多,所以打算记录一下这一次的调试过程。 首先做问题分析,既然单片机在运行一段时间之后会产生复位。那具体是什么原因引起的单片机复位呢?拍脑子一想会不会是没有及时喂狗导致看门狗溢出引起的复位。为了证明这一点我们查询了stm32的数据手册有关于复位源的介绍 由上面的描述我们可以知道在RCC_CSR中记录了单片机复位的类型。因此我们只要在单片机启动时去读取该寄存器中的对应状态位即可判断出单片机上一次是因为何种原因产生复位的。注意:RCC_CSR寄存器是需要软件清除的。如
[单片机]
STM32意外复位问题<font color='red'>调试</font>
Atmel发布具备先进功耗可视化功能的高性能调试工具
该创新型工具面向物联网、可穿戴和其它需要超低功耗的应用,可帮助开发人员在产品研发期间识别并消除峰值功耗 Atmel 公司 (纳斯达克股票交易代码:ATML)今日发布一款高精度调试工具,可在产品开发阶段将产品的功耗可视化。随着超低功耗成为下一代物联网(IoT)、可穿戴和电池供电型设备的一个关键因素,能够找出引发峰值功耗的代码对于实现总体设计的超低功耗至关重要。全新的Power Debugger是Atmel最新的开发工具,旨在调试和编制Atmel |SMART ARM Cortex -M MCU以及使用JTAG、SWD、PDI、debugWIRE、aWire、TPI或SPI目标接口的Atmel AVR MCU。
[嵌入式]
交流伺服电动机特点及调试方案
交流伺服电动机的结构主要可分为两部分,即定子部分和转子部分。其中定子的结构与旋转变压器的定子基本相同,在定子铁心中也安放着空间互成90度电角度的两相绕组。其中一组为激磁绕组,另一组为控制绕组,交流伺服电动机一种两相的交流电动机。 交流伺服电动机使用时,激磁绕组两端施加恒定的激磁电压Uf,控制绕组两端施加控制电压Uk。当定子绕组加上电压后,伺服电动机很快就会转动起来。 通入励磁绕组及控制绕组的电流在电机内产生一个旋转磁场,旋转磁场的转向决定了电机的转向,当任意一个绕组上所加的电压反相时,旋转磁场的方向就发生改变,电机的方向也发生改变。 为了在电机内形成一个圆形旋转磁场,要求激磁电压Uf和控制电压UK之间应有90度的相位差,常用的
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved