Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225718
  • 博文数量: 86
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 256
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-12 15:39
文章分类

全部博文(86)

文章存档

2016年(20)

2015年(65)

2014年(1)

我的朋友

分类: LINUX

2016-08-01 17:52:17

转自:http://blog.csdn.net/reille/article/details/6568756

作者:reille

本博客网址:http://blog.csdn.net/reille/

开发环境:主机:Window XP SP2;linux:VMware7.01+ubuntu9.10;目标板:扬创utu2440-F开发板

交叉编译器:arm-linux-gcc4.3.2(一开始用的是编译内核的版本arm-linux-gcc3.4.1,但出现了软浮点问题,于是换成了现在用的版本,当然本人编译内核的时候还是用3.4.1版本)

详细描述了本人移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤,同时把移植过程中遇到的问题及其解决方法记录了下来,以供参考步骤

本节详细描述:在移植和调试u-boot启动第一阶段代码,特别是NAND FLASH部分和NAND FLASH启动部分时,使用AXD和JLINK来调试u-boot的方法与步骤

——————————————————————————————————————————————————————————————————

1. 前言

在移植u-boot过程中,其功能移植(即第二阶段代码)可在SDRAM中调试完成,但其第一阶段代码,特别是NAND FLASH部分和NAND FLASH启动部分的调试,却是不怎么方便。一方面,要把u-boot频繁烧写至NAND FLASH;另一方面,定位跟踪不方便。其实,针对u-boot的调试,可借助一些工具来实现方便的调试。根据网上资料介绍,说明下使用AXD和JLINK来调试u-boot的方法与步骤。

2. 使用AXD和JLINK来调试u-boot的方法与步骤

2.1 装好ADS1.2软件,连接JLINK,然后打开AXD Debugger,如下图

在System Output Monitor的RDI Log中可以看到连接信息。

2.2 如果是第一次打开AXD,则要配置下AXD,使其可用JLINK来调试。

进入AXD的Option—>Config Target..出现配置界面:

上面是配置好JLINK的了,如果没有,则单击Add按钮,选择  JLINKRDI.DLL(这个文件是在JLINK的安装目录下),然后重新打开AXD就可以看到图2.1中的信息。

2.3 编译带调试信息的u-boot.bin文件

2.3.1 修改u-boot源码根目录下的comfig.mk文件

先备份一份,调试完后再还源

config.mk修改部分:打红色部分

######################################################################### 

# Option checker (courtesy linux kernel) to ensure 
# only supported compiler options are used 

cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null / 
        > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)


# Include the make variables (CC, etc...) 

#AS    = $(CROSS_COMPILE)as 
AS    = $(CROSS_COMPILE)as --gdwarf-2 --gstabs --gen-debug -g 
LD    = $(CROSS_COMPILE)ld 
#CC    = $(CROSS_COMPILE)gcc 
CC    = $(CROSS_COMPILE)gcc #-Q -fprofile-arcs#-pg 
CPP    = $(CC) -E 
AR    = $(CROSS_COMPILE)ar 
NM    = $(CROSS_COMPILE)nm 
LDR    = $(CROSS_COMPILE)ldr 
STRIP    = $(CROSS_COMPILE)strip 
OBJCOPY = $(CROSS_COMPILE)objcopy 
OBJDUMP = $(CROSS_COMPILE)objdump 
RANLIB    = $(CROSS_COMPILE)RANLIB

#########################################################################

# Load generated board configuration 
sinclude $(OBJTREE)/include/autoconf.mk 
sinclude $(OBJTREE)/include/config.mk

# Some architecture config.mk files need to know what CPUDIR is set to, 
# so calculate CPUDIR before including ARCH/SOC/CPU config.mk files. 
# Check if arch/$ARCH/cpu/$CPU exists, otherwise assume arch/$ARCH/cpu contains 
# CPU-specific code. 
CPUDIR=arch/$(ARCH)/cpu/$(CPU) 
ifneq ($(SRCTREE)/$(CPUDIR),$(wildcard $(SRCTREE)/$(CPUDIR))) 
CPUDIR=arch/$(ARCH)/cpu 
endif

sinclude $(TOPDIR)/arch/$(ARCH)/config.mk    # include architecture dependend rules 
sinclude $(TOPDIR)/$(CPUDIR)/config.mk        # include  CPU    specific rules

ifdef    SOC 
sinclude $(TOPDIR)/$(CPUDIR)/$(SOC)/config.mk    # include  SoC    specific rules 
endif 
ifdef    VENDOR 
BOARDDIR = $(VENDOR)/$(BOARD) 
else 
BOARDDIR = $(BOARD) 
endif 
ifdef    BOARD 
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk    # include board specific rules 
endif

#########################################################################

ifneq (,$(findstring s,$(MAKEFLAGS))) 
ARFLAGS = cr 
else 
ARFLAGS = crv 
endif 
RELFLAGS= $(PLATFORM_RELFLAGS) 
#DBGFLAGS= -g # -DDEBUG 
DBGFLAGS= -gdwarf-2 #-feliminate-dwarf2-dups# -DDEBUG 
####modify guoyirong 2011.06.25 
#OPTFLAGS= -Os #-fomit-frame-pointer 
OPTFLAGS= -O0#-Os #-fomit-frame-pointer 
ifndef LDSCRIPT 
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug 
ifeq ($(CONFIG_NAND_U_BOOT),y) 
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds 
else 
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 
endif 
endif 
OBJCFLAGS += --gap-fill=0xff

2.3.2 重新编译u-boot

编译后把得到的u-boot.bin和u-boot放到一个盘符下(我是用Samba共享,映射出一个盘符Z来的)。

2.4 调试u-boot

编译出有调试信息的u-boot和AXD环境准备好后,就可以开始调试u-boot了。

2.4.1 制作一个AXD命令批处理文件:u-boot.txt,其内容如下:

loadbinary Z:/work/u-boot-2011.03/u-boot.bin 0x30000000 
loadsymbols Z:/work/u-boot-2011.03/u-boot.axf 
setpc 0x30000000 
run

把u-boot.txt放在E盘或其它盘根目录下

2.4.2 打开AXD,按下ALT+L,键盘输入:ob d:/u-boot.txt

如图

这样,就可以开始调试,如单步调试F10等

3. "unable to halt arm core"的解决办法

在使用JLINK过程中,出现了"unable to halt arm core"的错误,解决方法是:把JLINK的USB口拔掉,同时把板的电脑断掉,稍等片刻,然后再重新开始就可以了。

4. 参考资料

使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法:http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3228953

U-Boot调试环境搭建请教~~如何实现u-boot和内核的源码级调试:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3521744&bbs_page_no=1&bbs_id=1032

如何调试uboot中NAND FLASH 启动部分:http://blog.csdn.net/qiaoliang328/archive/2011/03/07/6229389.aspx

阅读(1336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~