Tel: 13538088657 Email:sales6@foxice.net
FoxICE For ARM仿真器简介
Brief introduction
C o p y r i g h t © 深 圳 市 伽 罗 华 科 技 开 发 有 限 公 司 foxice.net
FoxICE仿真器是自主研发的新一代百兆网口高速实时在线仿真器,支持ARM7、
ARM9、ARM9E系列ARM处理器,可用于开发调试包含JTAG接口的ARM目标板。
采用高速网口极大地提高了程序的下载和调试速度(200K - 400KBytes/S),使团 队共享和远程调试成为可能。内置的仿真器自动搜索及开放、可扩充的Flash编程 功能为开发人员提供了极大的便利,是广大从事嵌入式开发的工程师不可或缺的 开发利器。
技术优势
Technical advantage
高速程序代码下载速度 调试下载速度可达200K - 400KBytes/S,是Multi-ICE兼容类仿真器的2倍以上,单步 调试速度:40- 60步/秒。
硬件逻辑完成底层调试命令与JTAG之间的并串转换,充分利用JTAG的带宽,避免浪费FoxICE For ARM仿真 器主控处理器的处理能力。
FoxICE For ARM仿真器采用200MHz的处理器,控制与调试主机的通讯及仿真调试。以支持调试过程中的高 速下载上传;调试处理的逻辑下移到200MHz的处理器执行,既减轻了调试主机的负担,也使得调试仿真的速 度不受主机任务负荷轻重的影响;实时响应、快速处理目标板的调试事件。
JTAG速度可配置 FoxICE仿真器JTAG时钟速度最低2.441KHz,最高可达10MHz,以满足不同调试对象的要 求。
高速以太网口与主机通讯 通过10/100M以太网络与主机通讯。支持团队网络共享、远程调试,支持自适应 10M/100M的全双工、半双工以太网。
超低、超宽电压的处理器调试 支持5V类处理器的调试。目标范围为:0.65~5.5V,这是目前为止支持电压最 宽的仿真器。
提供符合RDI 1.5.1标准的FoxICE驱动程序。
支持GDB调试器及Eclipse集成开发环境 GDB debugger & Eclipse IDE
FoxICE仿真器内置对于GDB Remote Serial Protocol协议支持 GDB调试器可以直接与FoxICE仿真器连接,控制目标板,中间不必 经过其他转换程序。
FoxICE仿真器完美支持GDB的File IO扩展协议 目标板程序可以通 过FoxICE仿真器,把调试、测试的结果输出到调试主机上,或者是 保存到调试主机的文件中,方便观察、比较。与调试串口相比,File IO的读写速度更快;不需要调试串口相关的硬件;不需要目标板与 调试主机之间通过串口线连接,方便用户可以远程调试。
免费赠送Eclipse for ARM V3.2.1集成开发环境 包括Eclipse及其 中文语言支持包、GNU for ARM交叉编译调试工具、GNU工具用户 手册等。全部的软件工具已经经过测试、打包,通过标准的Windows 安装程序即可完成安装。《 FoxICE用户手册 》提供了详细的介绍,
用户可以快速掌握在Eclipse环境进行ARM软件开发的技术。
w w w . f o x i c e . n e t
Tel: 13538088657 Email:sales6@foxice.net
在Eclipse环境调试ARM目标板上的程序
人性化的设计 Humanizing Design
仿真器自动搜索功能
版 权 所 有 第 1 页 共 2 页所
w w w . f o x i c e . n e t
Tel: 13538088657 Email:sales6@foxice.net
用户在不能确定仿真器IP地址的情况下,通过控制台程序FoxConsole,即可自动搜索网络上的FoxICE仿真器。
支持对仿真器IP地址等通讯参数的修改,不需要专用的IP设置工具。
开放、可扩充的Flash编程
允许用户自行编写Flash编程算法来扩充支持新的flash芯片。内置了SST、AMD、ATMEL、Macronix、Intel 等公司的flash编程算法。内置了Samsung NAND Flash(S3C2410,S3C2440)的编程算法。提供编程算法源 代码,供用户作为模板,生成支持新的Flash芯片编程算法。
在线Flash烧写功能
支持用户通过控制台程序FoxConsole对目标板的flash进行编程。可省去通用编程器,不需要专用烧写软件。
便捷的ARM内核选择
收集整理了数百种ARM内核的处理器,方便用户在仿真调试时,直接指定处理器的芯片型号。
支持20针JTAG插座的目标板; 提供14转20的转接小板,支持14针JTAG插座的目标板,具有JTAG防反插设 计,保护用户系统和仿真器。
自动搜索网络上的FoxICE仿真器 Flash编程界面(Board)
更大的扩展升级空间
More flexible architecture for future upgrade
可扩展可升级的软硬件设计。FoxICE For ARM仿真器预留了主控处理器50%的处理能力及数倍于目前的固件 程序存储空间。为将来的FoxICE For ARM仿真器的升级,新功能的扩展,新的ARM处理器的支持,预留了充 足的硬件资源。
在线Firmware升级,支持最新ARM类型。
其他特性
Other Typical Specifications
支持JTAG口上的自适应时钟(RTCK)。
支持ARM公司的AXD、RealView、ADW以及其他所有符合RDI1.51规范的第三方调试开发工具如Multi2000,
EWARM等。
自主供电,不需要目标板供电,减小对目标系统的影响。
支持semihosting功能。
支持对CP15寄存器、Embedded-ICE寄存器的访问。
支持多种操作系统:Windows95/98/NT/Me/2000/XP。
采用JTAG口的菊花链级联方式,支持同一ASIC内多个不同类型的ARM核。
LED指示运行状态。
体积轻巧,性能稳定。
支持的ARM内核
ARM Core supported by FoxICE
ARM7系列 ARM70DI, ARM7DMI, ARM7TDI-S, ARM7TDMI, ARM7TDMI-S, ARM7EJ-S, ARM710T, ARM720T R0-3, ARM720T R4, ARM740T
ARM9TDMI, ARM920T, ARM922T, ARM925T, ARM940T ARM9系列
ARM9E-S, ARM9EJ-S, ARM926EJ-S, ARM946E-S, ARM966E-S, ARM968E-S ARM9E系列
FoxICE for ARM 仿真器--100M 以太网口、内置 GDB 调试支持 http://www.foxice.net
用 U-BOOT 构建嵌入式系统的引导装载程序
来源:单片机及嵌入式系统应用 作者:曾宏安 齐 尧 焦振强 殷洪军
摘 要:BootLoader(引导装载程序)是嵌入式系统软件开发的第一个环节,它把操作系统和硬 件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要,在整个开发中也占有相当大 的比例。U-BOOT 是当前比较流行、功能强大的 BootLoader,可以支持多种体系结构。LH7A400 是 Sharp 公司生产的一款基于 ARM922T 内核的 32 位 RISC 芯片,本文详细介绍 U-BOOT 的 功能、特点以及在 LH7A400 处理器上的移植过程。
关键词:BootLoader U-BOOT 移植 LH7A400 ARM922T
引 言:
本文以 U-BOOT 为例,介绍了如何在 ARM9 开发板上移植 BootLoader 的过程。LH7A400 学习板是旋极公司推出的一款高性能嵌入式开发板,其采用的处理器 LH7A400 是 Sharp 公司 生产的一款基于 ARM922T 内核的 32 位 RISC 芯片。该芯片集成了高性能的 32 位 RISC 处理 器核 ARM922T(运算速度 200MHz,总线速度 100MHz) ,能使处理速度达到每秒 220 百万条 指令(MIPS),能耗为 1.33mW/MIPS,可以在低电压状态下工作(核心 1.8V,输入/输出 3.3 V),
片内带有锁相回路(PLL)和低能耗核心。此外该芯片还包括: 16KB 高速缓存(Cache), 存储器 管理单元(MMU), 80KB 静态存储器(SRAM), 彩色液晶显示控制器(LCD), 直接存储控制 器(10 通道 DMA), 异步串行口控制器(UART), 同步串行口控制器(SSP), PCMCIA 控制 器, AC97 声音控制器, 智能卡控制器, 多媒体卡控制器, 电池控制器, USB 控制器和时 钟/供电管理器。值得一提的是,LH7A400 是一款宽温芯片,其工作温度范围为-40℃~+85
℃(降低时钟频率),可广泛应用于无线手持设备、智能电话、PDA、家庭娱乐控制器、PocketPC 及各种工控设备。
该学习板还包括如下硬件:由 2 片 16 位 Flash (32MB)和 2 片 16 位的 SDRAM(64M)构成 32 位宽的高速存储器结构;10/100M 自适应网络芯片 DM9000;Sharp 3.5’TFT LCD 彩屏;触 摸屏;USB Host/Device;CF 卡插槽;全功能 JTAG 接口等。
1 U-BOOT 简介
U-BOOT 是由德国的工程师 Wolfgang Denk 从 8XXROM 代码发展而来的,它支持很多 处理器,比如 PowerPC、ARM、MIPS 和 x86。目前,U-BOOT 源代码在 sourceforge 网站的 社区服务器中,Internet 上有一群自由开发人员对其进行维护和开发,它的项目主页是 http://sourceforge.net/projects/U-BOOT。U-BOOT 的最新版本源代码可以在 Sourceforge 的 CVS 服务器中匿名获得。
#cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/U-BOOT login
#cvs -z6 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/U-BOOT \ co -P modulename
1.1 U-BOOT 源代码目录结构
http://www.foxice.net 第 1 页 共 6 页
◆ board:和一些已有开发板有关的文件,比如 Makefile 和 u-boot.lds 等都和具体开发板的硬 件和地址分配有关。
◆ common:与体系结构无关的文件,实现各种命令的 C 文件。
◆ cpu:CPU 相关文件,其中的子目录都是以 U-BOOT 所支持的 CPU 为名,比如有子目录 arm926ejs、mips、mpc8260 和 nios 等,每个特定的子目录中都包括 cpu.c 和 interrupt.c,start.S。
其中 cpu.c 初始化 CPU、设置指令 Cache 和数据 Cache 等;interrupt.c 设置系统的各种中断和 异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S 是 U-BOOT 启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入 C 程序奠 定基础。
◆ disk:disk 驱动的分区处理代码。
◆ doc:文档。
◆ drivers:通用设备驱动程序,比如各种网卡、支持 CFI 的 Flash、串口和 USB 总线等。
◆fs:支持文件系统的文件,U-BOOT 现在支持 cramfs、fat、fdos、jffs2 和 registerfs。
◆ include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支 持的文件。
◆ net:与网络有关的代码,BOOTP 协议、TFTP 协议、RARP 协议和 NFS 文件系统的实现。
◆ lib_arm:与 ARM 体系结构相关的代码。
◆ tools:创建 S-Record 格式文件 和 U-BOOT images 的工具。
1.2 U-BOOT 的特点
U-BOOT 支持 SCC/FEC 以太网、OOTP/TFTP 引导、IP 和 MAC 的预置功能,这一点和 其它 BootLoader(如 BLOB 和 RedBoot 等)类似。但 U-BOOT 还具有一些特有的功能。
◆ 在线读写 Flash、DOC、IDE、IIC、EEROM、RTC,其它的 BootLoader 根本不支持 IDE 和 DOC 的在线读写。
◆ 支持串行口 kermit 和 S-record 下载代码,U-BOOT 本身的工具可以把 ELF32 格式的可执 行文件转换成为 S-record 格式,直接从串口下载并执行。
◆ 识别二进制、ELF32、uImage 格式的 Image,对 Linux 引导有特别的支持。U-BOOT 对 Linux 内核进一步封装为 uImage。封装如下:
#{CROSS_COMPILE}-objcopy -O binary -R.note -R.comment -S vmlinux \ linux.bin
#gzip -9 linux.bin
#tools/mkimage -A arm -O linux -T kernel -C gzip -a 0xc0008000 -e\
0xc0008000 -n “Linux-2.4.20” -d linux.bin.gz /tftpboot/uImage
即在 Linux 内核镜像 vmLinux 前添加了一个特殊的头,这个头在 include/image.h 中定义,包 括目标操作系统的种类(比如 Linux,VxWorks 等)、目标 CPU 的体系机构(比如 ARM、PowerPC 等)、映像文件压缩类型(比如 gzip、bzip2 等)、加载地址、入口地址、映像名称和映像的生成 时间。当系统引导时,U-BOOT 会对这个文件头进行 CRC 校验,如果正确,才会跳到内核 执行。如下所示:
WT-ARM9# bootm 0xc1000000
## Checking Image at 0xc100000 ...
Image Name: Linux-2.4.20
Created: 2004-07-02 22:10:11 UTC
Image Type: ARM Linux Kernel Image (gzip compressed)
FoxICE for ARM 仿真器--100M 以太网口、内置 GDB 调试支持 http://www.foxice.net
Data Size: 550196 Bytes = 537 kB = 0 MB Load Address: 0xc0008000
Entry Point: 0xc0008000 Verifying Checksum ... OK
Uncompressing Kernel Image ……… OK
◆ 单任务软件运行环境。U-BOOT 可以动态加载和运行独立的应用程序,这些独立的应用程 序可以利用 U-BOOT 控制台的 I/O 函数、内存申请和中断服务等。这些应用程序还可以在没 有操作系统的情况下运行,是测试硬件系统很好的工具。
◆ 监控(minitor)命令集:读写 I/O,内存,寄存器、内存、外设测试功能等
◆ 脚本语言支持(类似 BASH 脚本)。利用 U-BOOT 中的 autoscr 命令,可以在 U-BOOT 中运 行“脚本”。首先在文本文件中输入需要执行的命令,然后用 tools/mkimage 封装,然后下载 到开发板上,用 autoscr 执行就可以了。
① 编辑如下的脚本 example.script。
echo
echo Network Configuration:
echo --- echo Target:
printenv ipaddr hostname echo
echo Server:
printenv serverip rootpath echo
② 用 tools/mkimage 对脚本进行封装。
# mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n "autoscr example script" -d example.scr ipt /tftpboot/example.img
Image Name: autoscr example script Created: Wes Sep 8 01:15:02 2004
Image Type: ARM Linux Script (uncompressed) Data Size: 157 Bytes = 0.15 kB = 0.00 MB Load Address: 0x00000000
Entry Point: 0x00000000 Contents:
Image 0: 149 Bytes = 0 kB = 0 MB
③ 在 U-BOOT 中加载并执行这个脚本。
WT-ARM9# tftp 100000 /tftpboot/example.img ARP broadcast 1
TFTP from server 10.0.0.2; our IP address is 10.0.0.99 Filename ’/tftpboot/TQM860L/example.img’.
Load address: 0x100000 Loading: #
done
Bytes transferred = 221 (dd hex) WT-ARM9# autoscr 100000
## Executing script at 00100000
http://www.foxice.net 第 3 页 共 6 页
Network Configuration:
--- Target:
ipaddr=10.0.0.99 hostname=arm Server:
serverip=10.0.0.2 rootpath=/nfsroot WT-ARM9#
◆ 支持 WatchDog、LCD logo 和状态指示功能等。如果系统支持 splash screen,U-BOOT 启 动时,会把这个图像显示到 LCD 上,给用户更友好的感觉。
◆ 支持 MTD 和文件系统。U-BOOT 作为一种强大的 BootLoader,它不仅支持 MTD,而且可 以在 MTD 基础上实现多种文件系统,比如 cramfs、fat 和 jffs2 等。
◆ 支持中断。由于传统的 BootLoader 都分为 stage1 和 stage2,所以在 stage2 中添加中断处理 服务十分困难,比如 BLOB;而 U-BOOT 是把两个部分放到了一起,所以添加中断服务程序 就很方便。
◆ 详细的开发文档。由于大多数 BootLoader 都是开源项目,所以文档都不是很充分。U-BOOT 的维护人员意识到了这个问题,充分记录了开发文档,所以它的移植要比 BLOB 等缺少文档 的 BootLoader 方便。
2 对 U-BOOT-1.1.0 的修改
为了使 U-BOOT-1.1.0 支持新的开发板,一种简便的做法是在 U-BOOT 已经支持的开发 板中选择一种接近的进行修改。由于 U-BOOT-1.10 不支持 ARM-922T 内核,所以选择基于 ARM-920T 内核的 smdk2400 为模板。相关的源代码在 board/smdk2400/下。
2.1 支持 ARM-922T 内核的代码修改
修改以下代码,使 U-BOOT 支持 arm-922t 内核。
① 在 include/目录下新建文件 arm922t.h,内容如下:
#ifndef __ARM922T_H__
#define __ARM922T_H__
#endif
② 在 include/目录下新建文件 wt-arm9.h,该文件描述了 ARM922T 中 Timer、UART 等寄存 器的结构及若干宏定义。具体内容要参考相关处理器手册。
③ 在 cpu/目录下新建目录 arm922t,将目录 arm920t 下的内容复制后,参考手册分别修改 cpu.c、
interrupts.c 和 serial.c,其它文件不修改。
2.2 开发板的支持
建立自己开发板的目录和相关文件。
① 在 include/configs 目录中添加头文件 lh7a400.h。这个文件是 lh7a400 开发板的配置文件,
它包括开发板的 CPU、系统时钟、RAM、Flash 系统及其它相关的配置信息。其格式可参考 include/configs/smdk2400.h。
FoxICE for ARM 仿真器--100M 以太网口、内置 GDB 调试支持 http://www.foxice.net
② 在 board/目录下新建 wt-arm9 目录,创建如下文件:flash.c、lhmemsetup.c、wt- arm9.c、
Makefile 和 u-boot.lds。
◆ flash.c。U-BOOT 读、写和删除 Flash 设备的源代码文件。由于不同开发板中 Flash 存储器 的种类各不相同,所以,修改 flash.c 时需参考相应的 Flash 芯片手册。它包括如下几个函数:
unsigned long flash_init (void ),Flash 初始化;
void flash_print_info (flash_info_t *info),打印 Flash 信息;
int flash_erase (flash_info_t *info, int s_first, int s_last),Flash 擦除;
volatile static int write_dword (flash_info_t *info, ulong dest, ulong data),Flash 写入;
int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt),从内存复制数据。
◆ lhmemsetup.c。初始化时钟、SMC 控制器和 SDRAM 控制器。
◆ wt-arm9.c。设置各种总线时钟,打开数据 Cache 和指令 Cache,并设置相关内存参数。
◆ Makefile。直接拷贝 board/smdk2400/Makefile,作如下修改:
OBJS := wt-arm9.o flash.o lhmemsetup.o
◆ u-boot.lds 。 设 置 U-BOOT 中 各 个 目 标 文 件 的 连 接 地 址 , 直 接 拷 贝 board/smdk2400/u-boot.lds,作如下修改:
.text {
cpu/arm922t/start.o (.text)
*(.text) }
2.3 添加网口设备控制程序
在 drivers/目录中添加网口设备控制程序 dm9000.c 和 dm9000.h,其中 dm9000.c 主要包 括以下函数:
int eth_init (bd_t *bd),初始化网络设备;
void eth_halt (void),关闭网络设备;
int eth_send (volatile void *packet,int len),发送数据包;
int eth_rx (void) 接收数据包。
用中断方式处理数据包的收发,因此还定义了另外两个函数:
void InitInterrupt (void) ,中断初始化;
void dm9000_irq (void) ,中断处理。
以上两个函数在 cpu/arm922t/interrupts.c 中被调用,最后在 drivers/Makefile 中加入 dm9000.o。
2.4 修改 Makefile
在 u-boot-1.1.0/Makefile 中加入 lh7a400_config : unconfig
@./mkconfig $(@:_config=) arm arm922t wt-arm9
其中“arm”是 CPU 的种类, arm922t 是 ARM CPU 对应的代码目录,wt-arm9 是自己开发板 对应的目录。
交叉编译器安装在/opt/arm/3.3/bin/目录下,所以把 CROSS_COMPILE 设置成相应的路径:
export CROSS_COMPILE = /opt/arm/3.3/bin/arm-elf-
http://www.foxice.net 第 5 页 共 6 页
2.5 生成目标文件
先运行 make clean,
[zeng@localhost u-boot-1.1.0]$make clean 然后运行 make lh7a400_config,
[zeng@localhost u-boot-1.1.0]$ make lh7a400_config Configuring for lh7a400 board...
再运行 make,
[zeng@localhost u-boot-1.1.0]$make 之后会生成三个文件:
u-boot——ELF 格式的文件,可以被大多数 Debug 程序识别;
u-boot.bin——二进制 bin 文件,纯粹的 U-BOOT 二进制执行代码,不保存 ELF 格式和调试信 息。这个文件一般用于烧录到用户开发板中;
u-boot.srec——Motorola S-Record 格式,可以通过串行口下载到开发板中。
2.6 测 试
通过 JTAG 口将 u-boot.bin 烧写到 Flash 的零地址,复位后执行 u-boot。若运行正常,会 从串口返回如下信息:
U-Boot 1.1.0 (Aug 21 2004 ?18:44:37)
U-BooT code: C3F80000 -> C3FA51A0 BSS: -> C3FA96EC IRQ Stack: c3f1ff7c
FIQ Stack: c3f1ef7c RAM Configuration:
Bank #0: c0000000 8 MB Bank #1: c1000000 8 MB
……
Flash: 32 MB In: serial Out: serial Err: serial WT-ARM9 #
输入 help 得到所有命令列表,help command 列出该命令的功能。紧接着测试 Flash 和网 卡,如果都正常工作的话,表明移植 U-BOOT 的工作基本完成,可以接着调试内核和文件系 统。
结 语
BootLoader 是操作系统和硬件的枢纽,它为操作系统内核的启动提供了必要的条件和参 数。在移植过程中,开发人员除了要掌握 BootLoader 的结构和工作流程外,还要对相关硬件 有一定的了解。目前,笔者移植的 U-BOOT 已经能够稳定地运行在开发板上,而且可以通过 Flash 和网络加载内核和文件系统,为后续开发,特别是驱动程序的开发奠定了良好的基础。