偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.
全部博文(1748)
分类: Android平台
2013-10-23 16:24:40
摘要:在中,介绍了使用JLINK间接烧写NAND FLASH的方法,保证了烧写我们移植的u-boot镜像到NAND FLASH后启动失败时有方法可恢复正常u-boot的启动。在这个保证前提下,详细介绍在移植和调试u-boot启动第一阶段代码,特别是NAND FLASH部分和NAND FLASH启动部分时,如何使用AXD和JLINK来调试u-boot的方法与步骤。
在移植u-boot过程中,其功能移植(即第二阶段代码)可在SDRAM中调试完成,但其第一阶段代码,特别是NAND FLASH部分和NAND FLASH启动部分的调试,却是不怎么方便。一方面,要把u-boot频繁烧写至NAND FLASH;另一方面,定位跟踪不方便。其实,针对u-boot的调试,可借助一些工具来实现方便的调试。根据网上资料介绍,说明下使用AXD和JLINK来调试u-boot的方法与步骤。
在System Output Monitor的RDI Log中可以看到连接信息。
进入AXD的Option—>Config Target..出现配置界面:
上面是配置好JLINK的了,如果没有,则单击Add按钮,选择 JLINKRDI.DLL(这个文件是在JLINK的安装目录下),然后重新打开AXD就可以看到图2.1中的信息。
先备份一份,调试完后再还源
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
编译后把得到的u-boot.bin和u-boot放到一个盘符下(我是用Samba共享,映射出一个盘符Z来的)。
编译出有调试信息的u-boot和AXD环境准备好后,就可以开始调试u-boot了。
loadbinary Z:\work\u-boot-2011.03\u-boot.bin 0×30000000
loadsymbols Z:\work\u-boot-2011.03\u-boot.axf
setpc 0×30000000
run
把u-boot.txt放在E盘或其它盘根目录下
如下图:
这样,就可以开始调试,如单步调试F10等
在使用JLINK过程中,出现了”unable to halt arm core”的错误,解决方法是:把JLINK的USB口拔掉,同时把板的电脑断掉,稍等片刻,然后再重新开始就可以了。
使用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