采用ROM监控器的调试技巧分析

发布者:psi33最新更新时间:2012-06-01 来源: 21IC 关键字:ROM  监控器  调试技巧 手机看文章 扫描二维码
随时随地手机看文章

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命令改变端口号)。图1:RedBoot初始化信息。

CLI输出的RedBoot初始化信息如图1所示,这些信息提供了有关RedBoot映像的信息,包括映像建立日期、目标硬件平台以及可供RedBoot使用的资源等。当显示出提示符

RedBoot>

后,就表明CLI已经准备好,用户可以开始输入命令。

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也支持引导脚本,因此允许用户在上电过程完成后执行所需命令。在产品测试阶段采用RedBoot装载应用软件映像时引导脚本很有好处,用户还可以设置超时参数,在引导脚本执行前按下Ctrl+C中断执行。引导脚本可用fconfig命令进行设置。

构建RedBoot

能够自己重新构建RedBoot对用户来说非常重要,因为随时都可能需要进行代码更新和缺陷更正;如果用户希望定制RedBoot,那么也需要重建RedBoot,比如增加自己的命令或与它的接口。 [page]

重建RedBoot映像的第一步是建立主机开发环境,建立RedBoot映像的工具要能运行在Windows或Linux主机平台上。主机开发工具包括GNU二进制应用程序(常称为binutils)、C/C++编译器和调试器。在目标处理器架构和主机操作系统平台上建立GNU开发工具和主机开发环境的详细步骤请参阅http://sources.redhat.com/ecos/getstart.html。

安装完GNU工具后,接着就是确定配置工具,用户可以采用图形化配置工具或命令行工具配置建立RedBoot映像。本文重点讲述图形化配置工具。

配置工具允许进行源代码级设置,从而确保RedBoot映像是专为各个用户应用而开发的,整个源代码知识库和配置工具用元件定义语言 (CDL)描述库中的元件及建立软件映像规则。配置工具利用先前设立的GNU工具建立适合特定处理器结构的RedBoot映像,有关配置工具的更多信息可以从网上得到,也可以从帮助菜单中获得。

下面的例子使用的是configtool-2.08-setup.exe,它是目前最新版配置工具,在安装之前最好阅读一下 readme.txt文件,一起下载的changes.txt文件则列出了不同版本的变动情况。接下来就是下载RedBoot源代码,RedBoot源代码包含在匿名CVS库中,可以用免费的客户软件访问。读者可从http://sources.redhat.com/ecos/anoncvs.html 获得更详细信息。

连上库以后,最好将包括eCos文件在内的所有源代码都下载,因为RedBoot会使用设备驱动器之类的eCos源文件。在确定建立自己RedBoot映像所需所有文件后,可以删掉其它不必要文件。RedBoot软件结构主要软件模块方框图如图3所示。图3:RedBoot软件结构主要模块框图。

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映像所需要的任何修改。图4:一个eCos最小配置文件实例。

最小配置文件同样使用CDL。图4是一个eCos最小配置文件实例,源自redboot_ROM.ecm文件,适合那些采用PowerPC 的Motorola MBX开发板。从图中可以看到,.ecm文件列出了cdl_configuration命令的数据包清单,需要包含在RedBoot配置中。 cdl_option命令用来为特定选项设置选项值。

大多数支持平台都包含一个可以导入的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。[page]

更新目标平台

将RedBoot映像装进非易失性存储器根据目标不同有很多方法,一般情况下,映像必须用软件编进闪存或用设备编程器编入ROM。

RedBoot映像装入闪存后,就可以直接执行缺陷修正或增加功能等映像更新任务,此时需要已有的闪存RedBoot映像和新建立的从RAM运行的RedBoot映像的支持。

首先从闪存启动目标平台并运行旧的RedBoot映像,由于这里采用了闪存映像系统命令将新的RedBoot映像编入闪存,因此需要执行


RedBoot> fis init


命令初始化fis系统。该命令用于初始化闪存,使新的映像能用fis命令下载。映像系统初始化完成后,可以用


RedBoot> fis list


命令查看闪存中的映像。此时会得到类似于图5的输出,根据实际使用的硬件平台而显示不同的地址、长度和入口地点,同时还能看到RedBoot映像名,该映像名代表的是目前正在闪存中运行的RedBoot映像。

接着用上述同样的步骤创建一个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映像的。图5:用fis list命令得到的输出结果。

接着用与上面相同的步骤装载新创建的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的支持甚至可以让用户不再需要昂贵的硬件调试工具。

关键字:ROM  监控器  调试技巧 引用地址:采用ROM监控器的调试技巧分析

上一篇:μC/OS—II的嵌入式串口通信模块设计
下一篇:一种基于锁相环的时钟系统设计

推荐阅读最新更新时间:2024-03-16 13:00

内存调试STM32 - IAR平台
  STM32这颗Cortex-M3控制器,与其他许多ARM一样,提供了BOOT0和BOOT1两个管脚用于启动选择。 BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。(用于串口ISP) BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。   在芯片上电复位时,BOOT0和BOOT1两个管脚的状态将决定芯片从何处启动。 1.当BOOT0和BOOT1均设置为逻辑1时,系统将从内置SRAM中启动,这是代码内存调试的第一个条件。 2. 然后,我们需要在代码中设置正确的中断向量表位置。中断向量表通常被
[单片机]
虚拟内存发展迅速 监控新兴技术受关注
    随着这几年视频技术的飞速发展,安防监控已经进入智能高清和大数据时代,可以说视频监控技术和市场发生了质的变化。安防产品和技术的不断提升,各行各业对视频监控图像质量的要求越来越高,随之对数据存储的要求也越来越高,这就必然会促进视频监控存储市场的变革。      高清存储驱动高清监控产业发展     坦率地讲,做高清存储市场调查是一件比较困难的事情。因为,现在的存储市场已经不是当年产品单一的DVR时代,对应前端摄像机的年出货量,就能统计和计算出DVR的年出货量;再按照当年DVR的销售均价,就能统计和计算出DVR的市场销售总额。     从应用层面讲,其实在所有的监控图像信息中,有用的往往只有1%甚至不到1%,99%的
[安防电子]
iQOO 9现身Geekbench:骁龙8 Gen 1+12GB内存
iQOO 9 系列手机将于 2022 年 1 月 5 日发布。这款产品将搭载骁龙 8 Gen 1 芯片,配备增强版 LPDDR5 内存以及超频版 UFS 3.1 闪存。   目前,型号为 V2171A 的 iQOO 9 已现身 Geekbench,搭载高通骁龙 8 Gen 1 芯片。   Geekbench 网站显示,iQOO 9 单核得分 1233,多核得分 3674,配备 12GB 内存,搭载 Android 12 操作系统。   IT之家了解到,骁龙 8 Gen 1 的八核 Kryo CPU 配备基于 Cortex-X2 的主核,频率为 3.0GHz,同时还有三个基于 Cortex-A710 的性能核,频率为 2.
[手机便携]
iQOO 9现身Geekbench:骁龙8 Gen 1+12GB<font color='red'>内存</font>
谷歌车载系统破解后可安装第三方ROM
    Android爱好者除了热衷于修补Android系统的各种漏洞之外,还希望能把第三方应用也搬上谷歌的车载系统Android Auto。日前第三方ROM团队开发出了针对先锋车载中控单元的Android Auto固件,让这个系统能够安装更多的相关应用。     尽管Android是一个开放的系统,但是Android Auto却没有对第三方开放,所有Android Auto应用的界面和功能都由谷歌牢牢掌握。     第三方ROM论坛现在已经破解了先锋AVIC系统,因此改版的Android Auto能够被安装进这个系统中。用户可以通过SD卡将第三方ROM安装到系统中。     安装了第三方固件之后,这个系统能够完成
[汽车电子]
stm32 移植cJson 注意free释放内存
关于怎么移植的网上有很多参考文档,也很简单,因为cjson只有2个文件,一个cJSON.c 一个cJSON.h文件。 我用的是原子的stm32 工程文件 测试 ,他们有自己定义的malloc.c malloc.h,很方便可以直接用。 需要修改的就是下面:把原本的json malloc 和free替换成我们自己的,如下代码 static void *(*cJSON_malloc)(size_t sz) = malloc; static void (*cJSON_free)(void *ptr) = free;---------------------------------------- void *(*cJSON_m
[单片机]
stm32 移植cJson 注意free释放<font color='red'>内存</font>
利用高带宽混合信号示波器进行DDR验证和调试
  DDR存储器,也称双倍数据率同步动态随机存储器,常用于高级嵌入式电路系统的设计,包括计算机、交通运输、家庭娱乐系统、医疗设备和消费类电子产品。DDR的广泛采用也推动着DDR存储器自身的研发,在DDR 1和DDR 2逐渐得到普及并成熟运用于某些行业的同时,新的DDR技术也开始出现在电子产品设计中,如DDR3(第三代DDR技术)和LPDDR(低功耗DDR技术)器件,它们能提供更高的性能。你可能认为DDR存储器的设计非常简明,但事实上,这些存储器件中更高的数据率和更低的电压常常会令你感到很难有设计裕量。此外,DDR接口是最为复杂的高速接口之一,因为每个存储器件上都有很多引脚;DDRII/III DQS、DQ等信号线不是简单的逻辑1和
[测试测量]
利用高带宽混合信号示波器进行DDR验证和<font color='red'>调试</font>
半导体需求走软2008年增长率仅2.4%
  据市场研究机构In-Stat表示,2008年半导体市场因需求走软,产业营收仅预计增长2.4%至2,619亿美元。   消费性电子应用区域约有5.9%的增长。而自从2000年增长比例就开始走下坡的计算机应用部分,虽然仍会是市场主力,但预估到2012年占市场比例将下滑至41.8%,远低于1990年代5成以上的水平。   In-Stat研究总监暨首席分析师Jim McGregor表示,现在微处理器(Micro Processor Unit)也加入了DRAM内存价格下跌漩涡中。这明显是半导体产业中计算机应用产品方面增长减缓的原因。   In-Stat预估2009年半导体产业营收增长7.4%,2010年及2011年则分别为9.7%
[焦点新闻]
用于负高压轨的隔离式低端电流监控器
电路功能与优势 图1所示的完全隔离电路可监控−48 V独立通道的电流,精度优于1%。负载电流流经位于电路外部的分流电阻。分流电阻值应适当选择,使得在最大负载电流时分流电压约为50 mV。 AD7171 的测量结果以数字码形式通过一个简单的2线SPI兼容型隔离串行接口提供。隔离由四通道隔离器 ADuM5402 提供。除了隔离输出数据以外,数字隔离器ADuM5402还为电路提供隔离+3.3 V电源。 这一器件组合实现了一款精确的高压负供电轨电流检测解决方案,具有器件数量少、低成本、低功耗的特点。测量精度主要取决于电阻容差和带隙基准电压源的精度,典型值优于1%。   图1. 用于负高压轨的低端电流监控器(未显示去耦和所有
[电源管理]
用于负高压轨的隔离式低端电流<font color='red'>监控器</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved