开放源代码ROM监控器RedBoot的功能特点及调试技巧分析

开放源代码rom监控器redboot的功能特点以及配置方法,它可以提供一种下载调试环境,且体积非常小巧。redboot也称作红帽(red hat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器,任何人都可以从互联网上下载具有红帽ecos公共许可证的redboot源代码。虽然redboot使用的是源于ecos实时操作系统(rtos)的软件模块,并且常用于嵌入式linux系统,但它与这两种操作系统完全无关,redboot能够用于任何操作系统或rtos,甚至没有操作系统也行。
redboot自带一个gdb“存根进程(stub)”,可提供目标端通信软件,允许用户通过标准gdb协议命令进行远端调试,这样设计师就能利用redboot与运行gnu调试器的主机通过串口或网络连接起来调试设计的嵌入式软件。redboot支持多种处理器架构和硬件平台,包括arm、日立shx、mips、powerpc、sparc以及x86等。
结构配置
redboot可以在多种不同配置下运行,但一般都是从目标平台的闪存引导区或引导rom启动。redboot设计为系统上电启动,能提供完整的处理器初始化和设备设置,使设计人员能够迅速开始与系统通信。
redboot可设为用串口或以太网口(通过telnet)进行通信,当从某个端口收到第一条命令后,那么随后所有的redboot通信都将从那个端口进行,直到系统重新启动。
利用以太网口与redboot通信时,一定要清楚目标平台是如何得到其ip地址的。设置目标平台ip地址有两种方法,分别是动态法和静态法。在静态方式下,目标平台的ip地址在编译redboot映像前设置(后文还会详细讨论这方面内容),也可通过串口命令设置。
redboot还可以采用bootp协议动态分配ip地址,bootp协议是目前许多网络广泛支持的动态主机配置协议(dhcp)的一个子集,与静态法一样,可在编译时或通过串口命令,使目标平台使用动态网络配置。当然,为了取得ip地址,目标设备必须连到能够访问bootp或dhcp服务器的网络上。
当装载的应用软件本身需要ip地址时,切记redboot映像不能使用动态ip地址,否则会在以太网端口的ip地址配置中引起冲突,从而造成与redboot或应用软件通信错误。在这种情况下,最好给不在动态网络配置协议范围内的redboot设置静态ip地址。
redboot还能根据与bootp响应一起收到的配置信息,用一般文件传输协议(tftp)自动下载应用软件代码,此时在主机上同样需要tftp服务器以提供软件映像访问。
命令行语句
redboot通过命令行接口(cli)输入命令,在最小模式下,redboot命令行接口建立在目标平台硬件串口上,当有多个串口时,redboot可以用其中任何一个建立通信。redboot还能利用telnet协议在以太网端口建立cli(默认情况下redboot将端口9000用于telnet,不过可以用下面讲到的fconfig命令改变端口号)。
cli输出的redboot初始化信息如图1所示,这些信息提供了有关redboot映像的信息,包括映像建立日期、目标硬件平台以及可供redboot使用的资源等。当显示出提示符:redboot> 后,就表明cli已经准备好,用户可以开始输入命令。
图1cli输出的redboot初始化信息
redboot命令的基本格式是:
命令 [-选项1] [-选项2 参数值] 操作符
命令格式中的选项1和选项2代表可以加到某些命令中的可选参数,用于指示一些特定动作或附加信息,在选项2中还包括一个数值。操作符定义了某些特殊命令所需的附加信息。命令也可以缩写成最短的无歧义字符串,如dump、dum、du和d都是dump命令的有效写法。
redboot用load命令下载应用软件映像,映像可以用tftp协议、x/y调制解调器协议或直接从目标硬件下载。映像成功下载到目标平台后,就可以用go命令运行软件。
在redboot提示符下可键入help命令显示所有可用命令列表,并不是所有命令都能用于各种redboot映像,命令是否可用取决于目标平台的资源状况,例如有些命令就不适合用于没有闪存的硬件平台。
首字符是“$”的命令代表执行后会在redboot映像中调用gdb stub,一旦进入gdb模式,redboot就会一直保持这种模式直到系统重新启动。
有几条redboot命令需要在这里重点提一下。首先是闪存映像系统(fis)命令,当硬件平台上配有闪存时,redboot提供fis命令作为基本文件系统,这些命令主要用来管理文件系统映像。
另一个有用的命令是基于闪存的配置和控制命令fconfig。图2给出了用fconfig命令查询的输出信息,从中可以看出,配置命令可以设置redboot启动顺序。启动配置包括是否在初始化期间运行引导脚本、是否用bootp协议获取ip地址以及是否用gdb telnet端口进行调试等。
图2 用fconfig命令查询
redboot也支持引导脚本,因此允许用户在上电过程完成后执行所需命令。在产品测试阶段采用redboot装载应用软件映像时引导脚本很有好处,用户还可以设置超时参数,在引导脚本执行前按下ctrl+c中断执行。引导脚本可用fconfig命令进行设置。
构建redboot
能够自己重新构建redboot对用户来说非常重要,因为随时都可能需要进行代码更新和缺陷更正;如果用户希望定制redboot,那么也需要重建redboot,比如增加自己的命令或与它的接口。
重建redboot映像的第一步是建立主机开发环境,建立redboot映像的工具要能运行在windows或linux主机平台上。主机开发工具包括gnu二进制应用程序(常称为binutils)、c/c++编译器和调试器。安装完gnu工具后,接着就是确定配置工具,用户可以采用图形化配置工具或命令行工具配置建立redboot映像。本文重点讲述图形化配置工具。
配置工具允许进行源代码级设置,从而确保redboot映像是专为各个用户应用而开发的,整个源代码知识库和配置工具用元件定义语言(cdl)描述库中的元件及建立软件映像规则。配置工具利用先前设立的gnu工具建立适合特定处理器结构的redboot映像,有关配置工具的更多信息可以从网上得到,也可以从帮助菜单中获得。
下面的例子使用的是configtool-2.08-setup.exe,它是目前最新版配置工具,在安装之前最好阅读一下readme.txt文件,一起下载的changes.txt文件则列出了不同版本的变动情况。接下来就是下载redboot源代码,redboot源代码包含在匿名cvs库中,可以用免费的客户软件访问。连上库以后,最好将包括ecos文件在内的所有源代码都下载,因为redboot会使用设备驱动器之类的ecos源文件。在确定建立自己redboot映像所需所有文件后,可以删掉其它不必要文件。redboot软件结构主要软件模块方框图如图3所示。
图3 主要软件模块方框图
redboot软件结构采用分层方法,这样可以装入新的功能和软件组件,redboot的基础是ecos硬件抽象层(hal)和设备驱动器。
让我们看一下redboot的源代码目录结构。从匿名cvs库中下载的源代码文件都放在packages子目录下,这个主目录下面是redboot子目录,里面存放全部redboot文件。由于所有文件都是从匿名cvs库下载的,因此都位于current子目录下。在redboot子目录下有个名为changelog的文件,它记录了redboot源文件的所有修改情况。
配置工具能够非常方便地用图形化方式配置redboot映像建立所必需的组件,通过选中或不选中某个特定组件选择框,可以激活或去除相应的配置选项,设置值可在窗口右边的方格中加入。
创建新redboot配置有两种方法。第一种方法是在配置工具的build菜单下选择模板,这时会弹出模板对话框,然后从中选择硬件平台和模板数据包,这里我们的模板数据包选择redboot。这种方法为建立默认配置redboot映像提供了一个基本方式,选择菜单build->packages,在弹出的packages对话框中可以添加或删除其它数据包。
第二种创建redboot新配置的方法是导入ecos最小配置文件(.ecm)。redboot支持的每个硬件平台都包含这样的最小配置文件,这些配置文件一般位于硬件抽象层目录hal下对应于每个结构的misc子目录中。
最小配置文件包含特定硬件平台基本配置信息,将.ecm文件作为出发点,我们就有了作为基础的硬件平台工作配置文件,可改变配置选项支持redboot映像所需要的任何修改。
最小配置文件同样使用cdl。图4是一个ecos最小配置文件实例,源自redboot_rom.ecm文件,适合那些采用powerpc的motorola mbx开发板。从图中可以看到,.ecm文件列出了cdl_configuration命令的数据包清单,需要包含在redboot配置中。cdl_option命令用来为特定选项设置选项值。
图4 ecos最小配置文件实例
大多数支持平台都包含一个可以导入的rom和ram redboot.ecm文件作为配置起点,rom和ram表明redboot映像在目标硬件上的存放位置。一般情况下,ram配置在最初调试硬件时使用,而rom配置则在映像调试完成后准备存放进闪存时使用。ram映像还可用于更新驻留闪存的redboot映像。i386 pc目标平台还包含了一个redboot floppy配置文件,可供软盘启动redboot时使用。
为了导入最小配置文件,需要选择配置工具菜单中的file->import命令,然后浏览相应的.ecm文件并选中,配置工具利用.ecm文件装载相应数据包并设置对应选项。如果发生因配置选项设置引起的冲突,配置工具会显示一个冲突解决对话框,选择继续按钮就可解决该冲突。
由于redboot还依赖其它软件模块如hal,因此并不是所有的配置选项都包含在redboot rom监控数据包内。在ecos hal包中就有底层硬件配置选项,其它可能需要配置的数据包还有设备驱动器,例如在包括网络支持的平台上,以太网设备驱动器选项就包含在通用以太网支持包内。
如果想要网络通信,还需要建立redboot网络配置选项,这样可以设定目标硬件的默认ip地址,或bootp初始化期间使用的配置。
完成redboot配置后,最好把最小配置文件保存下来,这一步可以通过选择file->export并输入文件名完成。
创建redboot映像
接下来需要保存当前的配置。为了将当前配置保存为ecos当前配置文件(.ecc),需要选择file菜单中的save as命令,不妨把文件存为redboot_rom.ecc。这步操作将生成正在创建的redboot映像的工作目录结构,所有目录都将以刚才创建的.ecc文件名开头。在本例中,目录名以redboot开始。
正确设置好配置以后,下面就可以开始创建redboot映像了。为了执行创建过程,需要采用build->library命令,此时配置工具输出窗口将显示相关创建信息。创建过程完成后,生成的redboot映像存放在redboot_install\bin子目录中,本例中新的redboot映像取名为redboot_rom.bin。
更新目标平台
将redboot映像装进非易失性存储器根据目标不同有很多方法,一般情况下,映像必须用软件编进闪存或用设备编程器编入rom。
redboot映像装入闪存后,就可以直接执行缺陷修正或增加功能等映像更新任务,此时需要已有的闪存redboot映像和新建立的从ram运行的redboot映像的支持。
首先从闪存启动目标平台并运行旧的redboot映像,由于这里采用了闪存映像系统命令将新的redboot映像编入闪存,因此需要执行 :redboot> fis init ,命令初始化fis系统。该命令用于初始化闪存,使新的映像能用fis命令下载。映像系统初始化完成后,可以用 :redboot> fis list ,命令查看闪存中的映像。此时会得到类似于图5的输出,根据实际使用的硬件平台而显示不同的地址、长度和入口地点,同时还能看到redboot映像名,该映像名代表的是目前正在闪存中运行的redboot映像。
图5 闪存输出图
接着用上述同样的步骤创建一个redboot ram映像redboot_ram.bin。为了建立从ram运行的映像,需要确保启动类型(cyg_hal_startup)配置选项设为ram。因为硬件平台包括rom和ram最小配置文件,因此导入并建立ram配置并不困难,重要的是要记住将ram和rom映像存放到不同的工作目录中。
下一步用驻留在闪存中的原有redboot映像将新的redboot_ram.bin载入到ram中,这步操作的命令是:
redboot> load redboot_ram.bin
载入命令的执行有好几种方法,如把映像从主机发送到目标硬件的tftp,具体哪种方法取决于用户实际可用资源情况,fis load命令还能用来通过闪存映像存储系统装载和存储redboot_ram.bin映像。
我们用go命令执行刚载入ram中的redboot映像。redboot映像从ram执行后会产生新的类似于图1的初始化消息,要注意这时是从ram执行redboot映像的。
接着用与上面相同的步骤装载新创建的rom redboot映像,装载redboot_rom.bin映像的命令是:
redboot> load redboot_rom.bin -b
命令行中的ram_addr指ram中的位置(不同的平台有不同的值),这里临时存放着即将编入闪存的redboot_rom.bin映像。
现在就可以用fis命令将新映像写进闪存了。某些平台可以支持闪存的锁定和解锁,如果用户能够解锁闪存,那么用户需要输入的第一条fis命令是:
redboot> fis unlock -l
这里flash_addr是需解锁的闪存地址,本例中这项参数对应的是fis list命令中redboot映像名称的闪存地址,从fis list命令中还能得到长度。如果平台不支持闪存锁定,那么用户可以跳过这一步。
随后可以用命令:redboot> fis create redboot -f -b -l -s ,将ram中的redboot新映像写入闪存中。其中flash_addr是redboot新映像写入闪存的位置,如fis list命令所示,ram_addr是redboot_rom.bin文件载入ram存储器的位置。flash_len同样出现在fis list命令中,代表redboot闪存映像的长度,data_len则是将被写进闪存的redboot_rom.bin文件的长度。
在继续下面的操作之前,fis create命令会询问用户是否愿意替换现有名为redboot的映像,如果回答“是”则将把新的映像装入闪存。下一步,如果硬件平台允许锁定闪存,那么就可以用:redboot> fis lock -f -l ,命令完成闪存锁定。上面讨论的针对所支持平台实际存储位置在redboot文档中有详细说明。最后重新启动硬件就可以启用刚才写进闪存的redboot新映像了。
发展前景
目前新版redboot正计划与ecos v.2同时推出,新版redboot增强功能包括dhcp客户机、嵌入式web服务器、usb调试和ide驱动支持。
即使没有这些功能改善,redboot rom监控器也能提供一种低成本而且容易使用的硬件调试与测试方法。由于redboot是开放式源代码,因此用户能够定制redboot以满足项目开发和测试阶段遇到的所有特殊需求。redboot对gdb的支持甚至可以让用户不再需要昂贵的硬件调试工具。


人工智能开启幼儿教育新时代_早教机器人走向千家万户
变压器为什么从高压侧充电?变压器从低压侧充电的危害
中国首批14项5G标准发布,接轨全球5G标准为5G商用提供更好技术支撑
利用数字电位器实现数控低通滤波器
各个行业中的模拟量数据有什么样的差异
开放源代码ROM监控器RedBoot的功能特点及调试技巧分析
人机PK,谁种草莓更好?
GaN-on-Si芯片有望在今年为苹果生产相应的产品
中央空调秒变智能!青岛中弘P15面板式空调网关初体验
友善之臂NanoPi R1创客神器特征英文版
iPhone X Plus和iPhone 9的最新消息模型机和保护壳的体验
DS1922/DS1923电池电量计
AEM96系列高精度谐波电力仪表 三相四线RS485通讯
如何判断线扫相机项目中定量判断机构运动是否匀速呢
中国研制出全球首个全模拟光电智能计算芯片
ZCC2786A离线式、无电感交流输入线性稳压器
瑞萨电子为医疗和可穿戴设备开发出非接触式无线充电解决方案
模切机轴磨损故障原因及处理方法
只要输入电压不超过电源轨 运算放大器就不应发生相位反转
太阳能供电的LED灯电路解析