基于ICE仿真器和OpenOCD平台的UBoot加载实现
2016-12-19魏方正
魏方正,施 展
(上海理工大学 光电信息与计算机工程学院,上海 200093)
基于ICE仿真器和OpenOCD平台的UBoot加载实现
魏方正,施 展
(上海理工大学 光电信息与计算机工程学院,上海 200093)
嵌入式开发在各个阶段对系统开发环境均有较高的要求,目前在嵌入式开发过程中趋向于开发周期短,开发效率高的模式。针对开发环境软硬件搭建问题,文中在基于Linux操作系统的开发环境下,给出了一种加载UBoot的平台构建方案,并对方案中关键部分做了详细介绍。通过此平台实现了对UBoot进行快速高效的加载。
嵌入式开发平台;UBoot;加载
目前嵌入式系统技术主要应用在包括电子产品、交通管理、工业控制、机器人等多个领域。具有多功能、灵活性、安全性、低开发成本等优点。
本文基于Linux操作系统的开发环境下进行的,全部操作均是在命令行下进行,因此需要开发者对Linux系统的基本操作和工作原理有一定的了解。通过对UBoot的烧录来了解嵌入式开发环境的建立和开发的过程,从而给出一个高效快速简单的UBoot的烧录模式。
UBoot(Universal Bootloade,通用引导加载程序)是遵循GPL条款的开源软件项目[1]。UBoot源码基本均是Linux内核源程序的简化,其目录框架、编译形式都是从Linux演化而来的,支持NFS挂载,同时支持多种版本的Linux操作系统。UBoot本身就是在操作系统内核运行之前运行的一段程序,其是开发板上电后运行的第一段代码,功能和PC机中的BIOS程序类似。通过这段程序可完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的软硬件环境设置成一个合适的工作状态,为加载操作系统内核做好准备[2]。嵌入式系统中UBoot所有的运行方式主要有两种:分别对应于嵌入式系统产品阶段和开发阶段的运行,也是嵌入式系统开发阶段必要的辅助手段[1]。UBoot经过编译后会生成u-boot.bin、u-boot.ldr、u-boot.srec等格式的文件。在此要用到的是u-boot.ldr格式文件以及编译产生的UBoot可执行代码。
1 开发系统环境构成概要
由于目标板的内存资源有限,通常在开发过程中,首先在一台计算机上进行开发环境的搭建包括建立交叉编译工具链,编译和调试程序[3]。在主机上编译生成所要求的可执行程序和其他所需文件。调试时将主机通过并串口和网络连接,借助通信协议将可执行代码下载到目标板Flash的指定地址处。
开发板是硬件环境中最主要的设备,这里采用SC58X系列开发板,其是一款基于ARM cortex处理器的开发板,具有超高集成度、低功耗的特点,接口包括常用的以太网接口、高速USB接口包括USB OTG, USB HS, UART,此外还有移动存储SD卡槽、CAN和音频选项接口。此开发板支持高速JTAG仿真器(ICE-1000/2000),便于开发、测试和调试高级应用程序,这些硬件配置可帮助打造出灵活而精简的系统设计。
图1 开发系统框图
2 OpenOCD功能解析与安装配置
OpenOCD是一种开源的调试源码,支持当前主流的处理器,尤其是对ARM的支持较多。OpenOCD能支持各种商用的JTAG硬件接口,支持并口JTAG调试和USB高速JTAG调试,其与GDB一起对源码级远程调试,支持Telent命令行界面调试[4]。在调试过程中OpenOCD充当调试的守护进程始终保持运行,起到监测的作用。
软硬件结合的实现方式虽一定程度上增加硬件复杂度,但其功能强大分析结果也更为精确[5]。OpenOCD与ICE硬件调试器二者结合使用即能远程调试又能实现对处理器的仿真调试。将仿真器功能作用范围扩大。由此在保证实现调试功能正常的同时还最大程度地保护了处理器数据通路的独立性,将对目标板处理器芯片的损害几率降到最低水平[6]。主机OpenOCD的安装配置流程:
(1)运行源码目录下的bootstrap,命令如下:
$ cd openocd ,$ ./bootstrap
此目录下将生成一些autotool文件和配置文件,以及jimtcl模块;
(2)配置并指定安装路径 :
$./configure-prefix=/install/path-enable-ft2232_libftdi-enable-ice-1000-enable-maintainer-mode;
(3)编译安装:$ make,$ make install;
(4)启动 OpenOCD。
OpenOCD 需要针对不同的JTAG 工具和不同的目标芯片配置一个配置文档,在运行 OpenOCD 时可用-参数来指定一个或多个配置文档[7]。确保执行路径的准确性。其启动操作命令如下:
$sudo ./openocd -f ../tcl/interface
-f ../tcl/target/adspsc58x.cfg
此时终端命令行将打印出如下信息:
Open On-Chip Debugger
0.7.0-dev-00202-ge3fefb0-dirty(2013-02-27-14:33)
............
Info:griffin.cpu:hardware has 3 breakpoints, 2 watchpoints
OpenOCD作为守护进程不断接收来自调试器的实时状态信息,并利用自身的错误反馈机制,给出调试故障信息,方便快速定位错误及时修改。
3 ICE调试器的功能解析
系统调试方法有很多种大致分为两类:硬件调试和软件调试[8]。例如:基于主机调试、代理调试、在线仿真器调试(ICE)等。本文采用最直接的硬件在线调试方式,其具有实时监控能力,在应用程序中加载、运行、步进、停止和设置断点,读写数据和程序内存,读写内核和外设寄存器。所有的调试方法本质上均是利用主机来控制目标板的芯片,在调试时主机和目标板经过特定的接口进行通信,JTAG是最常使用的调试接口,通过JTAG接口可直接访问处理器内部结构以及执行相应命令操作。
通过ICE仿真器进行在线实时仿真,不占用系统资源和CPU时间,仿真和实际运行同步进行。用户可轻松修改寄存器、存储器、设置观察窗口、程序下载及实时调试。是进行硬件开发、驱动程序调试、应用软件开发的必备工具[9]。
仿真器实际上起到了协议转换的作用:调试器发出的调试命令和数据经仿真器转换为JTAG协议规定的格式后发送到目标机上,以监控目标机的工作状态,并控制其运行,而后从目标机读出的数据和状态信息经过仿真器转换为调试器可识别的格式。仿真器上级通过串口或USB接口与开发主机连接,仿真器下级通过专用连接线与目标板的JTAG口相接。
4 平台环境下UBoot的加载过程实现
通过对UBoot的加载实现再次证明了此平台的稳定性和可行性。图2为平台环境下的实物连接图。在保证OpenOCD正常工作的环境下,以下为具体的UBoot加载过程:
(1)启动gdb
$arm-none-eabi-gdb u-boot(确保路径准确性)
(gdb) target remote :3333
Remote debugging using :3333 0x200bfff0 in ?? ()
(2)下载初始文件
(gdb)load
arch/arm/cpu/armv7/sc58x/init.elf
(gdb) c
Ctrl + C (这句命令的含义是暂停,中止)
(gdb) load u-boot
Loading section .text, size 0x2e59c lma 0x89200000
......
(gdb) c
以上操作成功后可打开串口终端minicom或者kermit来查看,此时看到minicom中出现打印信息。这些信息主要包括处理器,串并联端口和网络端口的状态信息。此时UBoot并未加载到指定的Flash地址内,而是借助守护进程和仿真器在开发板的内存中成功启动了UBoot。
在此使用网络加载模式需将UBoot.ldr文件复制到/tftpboot/目录中备用,以方便下载到目标板上[10]。/tftpboot充当服务器,在加载时通信协议向/tftpboot索要加载文件。
在已启动的UBoot下使用UBoot命令设置文件下载地址,同时也可设置开发板IP地址和主机网卡IP地址,如下:
#dhcp(动态分配IP地址)
#run update(此处将UBoot文件更新到Flash内)
图2 平台实物图
图3 UBoot加载成功信息图
此时UBoot的文件被成功加载到指定的Flash地址处如图3所示。加载成功后能通过UBoot下的命令来设置开发板,并做一些物理资源分配。为后续系统的进一步开发提供软件环境。
5 结束语
通过对UBoot的加载实现,给出了一种嵌入式平台开发环境的整体框架。从嵌入式开发硬件和软件两个方面进行了详细介绍,为后续系统内核级别开发,包括网络开发、驱动开发以及上层应用程序的开发提供了平台。此开发环境稳定可靠且周期短,适合企业级应用。
[1] 张晨曦,韩超,沈立,等.嵌入式系统教程[M].北京:清华大学出版社,2013.
[2] 司浩乐.基于Windows CE的显示控制手柄设计[D].西安:西安电子科技大学,2008.
[3] 张磊,温阳东.基于ARM和Linux交叉开发环境的搭建[J].仪器仪表用户,2009,16(3):65-67.
[4] 段富刚,施展.基于Openocd的嵌入式软件开发平台的研究和设计[J].计算机测量与控制,2010,18(2):470-472,478.
[5] 高瑛珂,王琪,李泉泉,等.一种基于JTAG接口的片上调试与性能分析方法[J].微电子学与计算机,2012,29(7):68-71.
[6] 肖铁军,史顺波,沈建.基于JTAG的计算机硬件实验系统的设计与实现[J].数据通信,2013(2):24-28.
[7] 黄子晨,李德华.基于Openocd和JTAG的嵌入式交叉开发环境[J].仪器仪表用户,2012,19(1):73-75.
[8] 李善平,刘文峰,王焕龙.Linux与嵌入式系统[M].2版.北京:清华大学出版社,2006.
[9] 雷旭.嵌入式Linux操作系统的研究与开发[D].西安:长安大学,2005.
[10] 苏艳苹,姜凌.基于ARM9_2410EP的嵌入式Linux的研究和移植[J].数字技术与应用,2010(2):24-25.
Implementation of UBoot Loading Based on ICE Debugger and Openocd Platform
WEI Fangzheng,SHI Zhan
(School of Optical-Electrical and Computer Engineering,University of Shanghai for Science and Technology,Shanghai 200093, China)
Embedded development has very high requirements at each stage of the system development environment. At present ,embedded development process tends to the mode of the short cycle and high efficiency. For the question of software and hardware building , this paper presents a platform construction scheme of loading UBoot,which is based on the development environment of Linux operating system.It gives a detailed introduction to the key part of the program .And it realizes the UBoot loading with a fast way and high efficiency under the platform.
embedded development platform; UBoot; loading
2016- 01- 16
魏方正(1993-),男,研究研究生。研究方向:传感器和精密测试技术。施展(1963-) ,女,博士,副教授。研究方向:传感器和精密测试技术。
10.16180/j.cnki.issn1007-7820.2016.11.027
TP
A