嵌入式Linux内核调试技术

来源 :电子产品世界 | 被引量 : 0次 | 上传用户:zexuan123
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:由于没有通用的嵌入式Linux操作系统,开发相应的嵌入式产品时,必须对Linux内核和驱动程序进行调试。本文主要讲述如何使用BDI2000仿真器与LinuxScope-JTD调试器进行嵌入式Linux内核的调试,提供一个便捷、高效的解决方案。
  关键词:嵌入式Linux;内核调试;仿真器;调试器
  
  近年处理器技术发展速度加快,嵌入式领域发生了翻天覆地的变化。特别是网络的普及,消费电子异军突起,嵌入式与互联网成为最热门的技术。在所有操作系统中,Linux是发展较快、应用较广泛的一种操作系统。Linux的开放性以及其他优秀特性使其成为嵌入式系统开发的首选。嵌入式系统开发所面临的问题
  嵌入式软件开发有别于桌面软件系统开发的一个显著的特点是,一般需要一个交叉编译和调试环境,即编辑和编译软件在主机上进行,编译好的软件需要下载到目标机上运行,主机和目标机之间建立起通讯连接,并传输调试命令和数据。由于主机和目标机往往运行着不同的操作系统,而且处理器的体系结构也彼此不同,这就提高了嵌入式开发的复杂性。
  总的来说,嵌入式开发所面临的问题主要表现在以下几个方面。
  
  涉及多种CPU及多种OS
  
  嵌入式的CPU或处理器包括MIPS、PPC、ARM,XScale等不同的架构,这些处理器上运行的操作系统也有VxWorks、Linux、μC/OS、WinCE等多种。在一个企业之内,可能会同时使用好几种处理器,甚至几种嵌入式操作系统。如果需要同时调试多种类型的电路板,那复杂性是可想而知的。这也是我们选用瑞士Abatron公司的BDI2000的原因之一,它是一款功能强大的JTAG/BDM通用仿真器。它支持:PPC/MIPS/ARM/XSCALE/CPU12/CPU32/M-CORE/ColdFire等多种处理器,支持Windows/Linux系统平台,以及多种第三方调试器,并且对Flash的烧写也简单方便。
  
  开发工具种类繁多
  
  通常各种操作系统有各自的开发工具,在同一系统下开发的不同阶段也会应用不同的开发工具。如在用户的目标板开发初期,需要硬件仿真器来调试硬件系统和基本的引导程序,然后进行操作系统及驱动程序的开发调试。在调试应用程序阶段可以使用交互式的开发环境进行软件调试,在测试阶段需要一些专门的测试工具软件进行功能和性能的测试。在生产阶段需要固化程序及出厂检测等等。BDl2000可以适应开发的各个阶段,节约企业的支出和简化管理难度。
  
  对目标系统的观察和控制
  
  由于嵌入式硬件系统千差万别,软件模块和系统资源也多种多样,要使系统能正常工作,软件开发者必须要对目标系统具有完全的观察和控制能力,例如硬件的各种寄存器、内存空间、操作系统的信号量、消息队列、任务、堆栈等。
  此外,嵌入式系统变化更新比较快,对开发时间要求比较紧,需要一套功能强大的嵌入式软件集成开发工具,用于嵌入式软件开发的各个阶段。美国Ultimate Solution公司的LinuxScope-JTD调试器是一个很好的选择,它专门用于配合BDl2000仿真器,特点是基于Eclipse的集成开发环境和插件技术;提供脚本定制功能实现目标机的特殊操作;提供Linux内核调试功能,容易修改和观察硬件寄存器;增强的MI接口可识别硬件断点及模块跟踪;具有标准调试特性;支持Linux应用程序的开发;以及Windows/Linux系统平台。
  
  嵌入式Linux内核的调试
  
  编译内核
  本文所调试的是MontaVista Linux,硬件是Marvell公司Xscale PXA250。它拥有超过两千多用户和众多的MontaVista Linux产品在市场上销售,覆盖从智能手机、高清电视、机器人、无线网络设备到3G电信服务器等各种嵌入式应用。MontaVista Linux本身就是用BDl2000来开发调试的。
  进入内核源码目录下,即可配置完成相关选项并准备编译。配置时不要选中KGDB(软件基内核调试),否则会和BD12000冲突。为了调试内核,需要在编译时加入调试信息,否则将无法看到源代码。修改内核源码根目录下的Makefile,在CFLAGS宏定义的末尾添加“-ggdb”选项,保存退出。这里加上gdb是为了更好的使代码适合gdb调试器,另外注意Makefile中的优化设置,有些时候优化会调整代码执行的顺序,在内核的调试阶段,不要加入优化选项。
  
  内核调试
  首先,配置BD12000,确保目标机的正常初始化。通常来说,到了调试内核的阶段,电路板的boot程序应该是正常的,可以利用boot来完成目标机的初始化;另一种方式是通过BDI的配置文件来完成。
  接下来就是下载代码进行调试。如果代码已经固化,那仅下载调试信息给仿真器即可;否则需要把代码下载到RAM里运行,同时下载调试信息给仿真器。本文所用的是后一种方式。
  由于Linux运行之后会启动MMU而使地址重映射,因此第一个断点通常在函数start_kernel(),而且只能设置为硬断点。硬件断点是非常有限的,有的处理器甚至只能设置一个。所以,在调试Linux内核时,使用普通的GDB进行断点设置会非常不方便。LinuxScope可以很方便地切换断点模式,并支持软断点,使断点的设置不再受到限制,为调试Linux内核提供强有力的支持。具体步骤如下:
  1)BDI配置文件的断点模式:soft;
  2)LinuxScope配置默认的断点模式:soft/hard都可以;
  3)用BDI下载压缩的内核:10ad0x20000 zimage bin
  4)把PC指针指到内核入口地址:ti0x30000;
  5)运行LinuxScope,在start_kernel处设置硬件断点;
  6)go,停下来后再设置软断点即可。
  
  模块内核的调试
  
  我们使用BD12000来调试Linux内核的另外一个重要原因,就是它可以支持调试内核模块。内核模块是一些可以让操作系统内核在需要时载入和执行的代码,这意味着它可以在不需要时由操作系统卸载。这种方式可以扩展操作系统内核的功能,而不需要重新启动系统,这一点对调试驱动程序的工程师特别有用。因为如果驱动程序编译进内核的话,会增加内核的尺寸,还要改动内核的源文件,而且不能动态地卸载,不利于调试,所以推荐使用模块方式。
  
  调试Linux 2.4内核模块
  LLqux 2.4内核模块的调试比较简单,使用 命令“Lnsmod-m”来加载模块。参数“-m”非常重要,它的功能是在把模块加载到内存时产生一个加载map表。然后通过LinuxScope调试器加载相应的调试信息。例如:
  


  在这些信息中,我们用到的只有text、rodata、data、bss。当然,把相关的信息输入LinuxScope调试器,它会把以上地址信息加入到gdb中进行模块功能的调试。
  这里需要注意的是对模块进行编译时,也需要增加“-g”选项。
  另外,这种方法也存在一定的不足,它不能调试模块初始化的代码,因为此时模块初始化代码已经执行过了。如果初始化部分有问题,那么将无法进行调试。遇到这样的情况可以修改代码,延迟初始化部分的执行。另外,也可以采用以下替代方法:当插入内核模块时,内核模块机制将调用函数sys_nit_module(kernel/modle.c)执行对内核模块的初始化。程序代码片断如下:
  


  在该语句上设置断点,也能在执行模块初始化之前停下来。
  
  调试Linux 2.6内核模块
  在Linux 2.6内核系统中,由于module-init-tools工具的更改,insmod命令不再支持-m参数,只有采取其他的方法来获取模块加载到内核的地址。
  比较简单的方式是修改内核配置文件,使系统支持CONFIG_KALLSYMS,这样就可以把相关的符号信息放到目录/sys下,然后通过LinuxScope调试器加载相应的调试信息。通过在模块初始化函数中放置一下代码,也可以获得模块加载到内存中的地址,只是这样要麻烦一些。
  
  应用程序的调试
  到了应用程序调试的阶段,仿真器就可以“功成身退”了,剩下的调试任务就由LinuxScope调试器来独自完成。此时只要在目标系统中启动“gdbserver”,调试应用程序非常的方便。
  
  结语
  
  面向行业、应用和设备的嵌入式Linux工具软件和嵌入式Linux操作系统平台是未来发展的必然趋势。跟踪Linux的发展,符合标准,遵循开放是大势所趋,嵌入式Linux也不例外。Linux调试技术的进步为Linux在嵌入式领域的应用广泛性提供了保证。本文所讲述的仿真器技术和调试器技术可以极大的提高开发者的效率。
其他文献
前言    便携式电子产品大多使用锂离子电池或是镍氢电池,不过目前锂离子电池的能量密度发展已经接近理论极限,比较之下燃料电池还有极大的能量密度发展空间,例如甲醇与相同体积锂离子电池蓄电量比较,甲醇拥有20倍左右的发热量,若以20%的电力转换效率,它可以产生数倍的电气能量,此外燃料电池不需要冗长的充电时间,而且对资源回收与削减电池使用量都具有正面贡献,因此微型燃料电池的发展受到全球重视。  便携式电
期刊
硅谷数模半导体(AnalogixSemiconductor)日前发布,其最新研发成果DisplayPort1.1系列接口芯片—包括发送端芯片ANX9805及接收端芯片ANX9813现已全面就绪,可为个人计算机显卡、显示器、液晶面板等厂商提供基于DisplayPort 1.1版本设计的样片及技术支持。  Analogix公司中国区销售经理李秀东先生介绍说,最新推出的DisplayPort接收芯片AN
期刊
日前,德州仪器(TI)宣布推出单芯片交错式功率因数校正(PFC)控制电路,可满足千瓦级通信、服务器与工业系统的要求。新型UCC28070双相平均电流模式控制器可帮助设计人员简化电源设计,提高系统可靠性,实现超过0.9的额定功率因数提高了节能性能。  TI高性能模拟产品业务开发经理张洪为先生指出,在我们生活的各个领域都面临着日益提高的能量管理要求,在商业运营方面更是如此。数据中心与电信系统的用电要求
期刊
摘要:针对目前WiMAX基站必须使用GPS接收机的现状,本文提出采用IEEE 1588协议来实现基站与中心局的同步,该协议优良的特性使其成为一种方便可靠而成本低廉的替代方案。  关键词:IEEE1588 PTP;WiMAX;网络    在通信网络中,接入技术自始至终都是发展的热点。从时分、频分、码分到目前的空分,从TDMA、CDMA到OFDMA,从单天线到智能天线,先进的技术日新月异,层出不穷。而
期刊
恩智浦(NXP)宣布其北京声学解决方案工厂已成功生产出第10亿只手机扬声器。作为声学解决方案亚洲中心,NXP北京工厂始建于2001年,6年来已成为拥有600多名员工的多线产品制造机构,2007年声学元件年产量高达3.8亿只。  NXP声学解决方案产品线首席运营管Franz Obenaus与朝阳区谢朝斌副区长出席庆祝仪式,并分别致辞。Obenaus体表示:“北京工厂第10亿只扬声器是一个重要的里程碑
期刊
能够在互联网上快速共享的便利性成就了RealMedia格式视频在中国市场的地位。随着多家芯片公司和RealNetworks的合作,现在消费者不但可以在PC上,在PMP等便携式产品上同样可以欣赏到RM/RMVB格式的视频内容。虽然视频解析度不及MPEG-2/4和WMV9,但RealMedia的高压缩更加适合小屏幕和存储空间有限的PMP。  2007年秋,爱国者推出了采用ADI Blackfin BF
期刊
2007年5月18日,科学计算和基于模型设计的领导性软件厂商TheMathWorks在京成立了中国独资公司,为中国商业和教育用户提供直接的市场销售、技术支持和培训服务,着重于汽车、教育、通信、半导体和电子行业的业务拓展。近日,本刊访问了The MathWorks公司Fellow(首席研究员)Jim Tung和北京迈斯沃克软件有限公司总经理宋斌先生。    两大核心平台    The MathWor
期刊
摘要: 本文介绍了以AVR单片机、AT45DB642D存储芯片和日历芯片为核心的多通道多功能采集器的硬件设计和软件设计。  关键词:采集;存储;AVR单片机    引言    随着各行各业的发展和生产需要,业界上的采集器已经满足不了某些行业的生产需要,他们不仅需要采集数据还需将数据发生变化的时间记录下来,断电数据不掉失,特别是当电脑读取采集器的数据时还需能继续采集数据,保证不掉失一个数据,并且还
期刊
摘要:GPS手机的全球出货量将在未来4年内翻一番以上。在移动手机设计过程中,测试工程师面对的巨大挑战在于减轻完成测试任务面,临的时间和成本压力,因此,GPS手机市场的发展亟需用先进技术来加快研发和生产过程的测试。  关键词:GPS;导航;移动手机;GPS手机;测试    GPS手机市场亟需先进技术加快测试      据市场调查公司ABI Research预测,全球导航设备的出货量从2007年到20
期刊
摘要:介绍了一种用于WCDMA系统中下行物理信道解调器,采用了FPGA器件实现该解调器,并给出该解调器总体结构和逻辑设计。该解调器把从基站发送过来的码片级数据解调成符号级数据,并结合外部微处理器将解调后的结果实时上报给后台PC。该解调器可用于WCDMA系统中下行多用户多小区信息的实时测量,有实时性好、配置灵活等特点。  关键词:WCDMA;物理信道;解调;FPGA    引言      在WCDM
期刊