历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | TQ2440移植u-boot-2010.06-rc1---1调试的思路

2018-04-15 来源:eefocus

硬件: 

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


推荐阅读

史海拾趣

Captive Fastener公司的发展小趣事

随着环保意识的日益增强,Captive Fastener公司积极响应国家环保政策,推动生产方式的绿色转型。公司引进先进的环保生产设备和技术,减少生产过程中的污染排放。同时,公司还研发出可回收再利用的紧固件产品,为电子行业的可持续发展做出了贡献。

EMLSI公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。EMLSI公司深知这一点,因此始终将品质管理放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把关。同时,EMLSI还注重与客户的沟通和反馈,及时解决客户在使用过程中遇到的问题。这种对品质的执着追求让EMLSI赢得了客户的信任和忠诚。

ANADIGICS公司的发展小趣事

在电子行业的早期,虚构的EMLSI公司就以其对技术的深刻理解和不懈追求而脱颖而出。公司创始人敏锐地察觉到了半导体技术的巨大潜力,并投入大量资源进行研发。经过数年的努力,EMLSI成功开发出了一款具有划时代意义的半导体芯片,极大地提升了电子设备的性能和效率。这一创新不仅为公司赢得了市场的认可,也为整个电子行业树立了新的标杆。

FREESCALE (NXP)公司的发展小趣事

随着环保意识的不断提高,电子行业也开始面临环保压力。EMLSI公司积极响应环保号召,致力于开发绿色环保产品。公司投入大量资源进行环保技术研发,成功推出了一系列低能耗、低排放的电子产品。这些产品不仅满足了客户的需求,也为公司赢得了良好的社会声誉。

Amulet Technologies公司的发展小趣事

在电子行业的早期,虚构的EMLSI公司就以其对技术的深刻理解和不懈追求而脱颖而出。公司创始人敏锐地察觉到了半导体技术的巨大潜力,并投入大量资源进行研发。经过数年的努力,EMLSI成功开发出了一款具有划时代意义的半导体芯片,极大地提升了电子设备的性能和效率。这一创新不仅为公司赢得了市场的认可,也为整个电子行业树立了新的标杆。

AIRPAX公司的发展小趣事

随着技术的不断进步,AIRPAX在传感器和电气保护领域取得了重大突破。其研发的全新传感器技术大大提高了测量精度和响应速度,为汽车、家电等行业提供了更高效、更安全的解决方案。这一技术突破使得AIRPAX的产品开始在更广泛的行业中得到应用,公司也逐渐发展成为电气保护领域的领军企业。

问答坊 | AI 解惑

【一个快速查找datasheet 的小工具来自datasheet5.com】

本帖最后由 paulhyde 于 2014-9-15 04:21 编辑 一个很好的下载datasheet的小工具,避免大赛的时候到处找资料 不到1M,但功能超强,基本所有的资料都可以下载到哦 datasheet5.com  …

查看全部问答>

虚拟机的问题,古怪!

写了个SHELL,如下: #!/bin/bash hello=\"$(dirname ./configure)\" echo  $hello 运行结果为:空行 在终端下输入 hello=\"$(dirname ./configure)\" echo $hello 运行结果为:. 奇怪的是:shell下结果是错误的,终端下是正确的 ...…

查看全部问答>

tornado2.2 for arm 用不了了!!!!

一段时间没用,结果再用的时候提示 下面图片的情况 error:simulator failed to initialize before timeout 重装也没有用:(郁闷死了 是什么原因啊? [s:6]…

查看全部问答>

请教一个arm语法的问题

比如下面这段代码,请问“b”是什么意思? ExceptionVec         b                 ResetHandler         b             &nb ...…

查看全部问答>

OCxN_EN是什么输出信号?

    参考手册 表37 带刹车功能的互补输出通道 OCx 和 OCxN 的控制位中    当MOE,OSSI,OSSR,CCxE,CCxNE = 1,X,0,0,0时,OCx=CCxP, OCxN=CCxNP ...…

查看全部问答>

MSP430 时钟设置疑问

刚开始学些,有个问题总没有搞清楚,请教各位大侠。 <<<<< >>>>>>> 部分为不清楚的地方,恳请指教一下。多谢了 #include<msp430x14x.h> /* REGISTER: BCSCTL1 XT2OFF XTS DIVA.1 DIVA.0 ...…

查看全部问答>

pic单片机 RA口和RB口区别

pic单片机 RA口和RB口区别在那里呢?  RB口可以作为键控端,可RA口却不能。(是仿真得出的结论)谁能说说是为什么?欢迎交流!…

查看全部问答>

求助 求助 急需各位大神帮助看一下程序

中断出来的PWM怎么没有时间差啊 祈求各位大神帮助#include <msp430x14x.h>#include <math.h>#define uint unsigned int#define uchar unsigned char  #define ulong  unsigned long#define keyin    (P1IN & 0x ...…

查看全部问答>

串口通讯

发送没有问题,但是接受有问题。断点中断一直停在此处,if(UARTCharsAvail(UART1_BASE))?是电路问题,还是串口配置可能有误/求解!!!!!!!!!!!!!…

查看全部问答>

晒心得+初识STM32F0-Discovery

STM32F0-Discovery是ST意法半导体公司推出的最新一款开发板探索套件。Discovery探索套件是ST开发的系列低成本开发评估板,通常集成了微控制器的最小系统和板载的仿真工具,形成一个完整的开发平台。这次收到的STM32F0-Discovery是最新的基于ARM Cor ...…

查看全部问答>