您的位置 首页 制造

关于嵌入式Linux操作系统的内核调试技能详解

关于嵌入式Linux操作系统的内核调试技术详解- 近年处理器技术发展速度加快,嵌入式领域发生了翻天覆地的变化。特别是网络的普及,消费电子异军突起,嵌入式与互联网成为最热门的技术。在所有操作系统中,Linux是发展很快、应用很广泛的一种操作系统。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的烧写也很简单便利。

开发东西品种繁复

一般各种操作体系有各自的开发东西,在同一体系下开发的不同阶段也会运用不同的开发东西。如在用户的方针板开发初期,需求硬件仿真器来调试硬件体系和根本的引导程序,然后进行操作体系及驱动程序的开发调试。在调试运用程序阶段能够运用交互式的开发环境进行软件调试,在测验阶段需求一些专门的测验东西软件进行功用和功用的测验。在出产阶段需求固化程序及出厂检测等等。BDI2000能够习惯开发的各个阶段,节省企业的开销和简化办理难度。

对方针体系的调查和操控

因为嵌入式硬件体系千差万别,软件模块和体系资源也多种多样,要使体系能正常作业,软件开发者有必要要对方针体系具有彻底的调查和操控能力,例如硬件的各种寄存器、内存空间、操作体系的信号量、音讯行列、使命、仓库等。

此外,嵌入式体系改变更新比较快,对开发时刻要求比较紧,需求一套功用强大的嵌入式软件集成开发东西,用于嵌入式软件开发的各个阶段。美国 UlTImate SoluTIon公司的LinuxScope-JTD调试器是一个很好的挑选,它专门用于合作BDI2000仿真器,特点是根据Eclipse的集成开发环境和插件技能;供给脚本定制功用实现方针机的特别操作;供给Linux内核调试功用,简单修正和调查硬件寄存器;增强的MI接口可辨认硬件断点及模块盯梢;具有规范调试特性;支撑Linux运用程序的开发;以及Windows/Linux体系渠道。

嵌入式Linux内核的调试

编译内核

本文所调试的是MontaVista Linux,硬件是Intel Xscale PXA250。它具有超越两千多用户和很多的MontaVista Linux产品在市场上出售,掩盖从智能手机、高清电视、机器人、无线网络设备到3G电信服务器等各种嵌入式运用。MontaVista Linux自身便是用BDI2000来开发调试的。

进入内核源码目录下,即可装备完结相关选项并预备编译。装备时不要选中KGDB(软件基内核调试),不然会和BDI2000抵触。为了调试内核,需求在编译时参加调试信息,不然将无法看到源代码。修正内核源码根目录下的Makefile,在CFLAGS宏界说的结尾添加“–ggdb”选项,保存退出。这儿加上gdb是为了更好的使代码合适gdb调试器,别的留意Makefile中的优化设置,有些时分优化会调整代码履行的次序,在内核的调试阶段,不要参加优化选项。

内核调试

首要,装备BDI2000,确保方针机的正常初始化。一般来说,到了调试内核的阶段,电路板的boot程序应该是正常的,能够运用boot来完结方针机的初始化;另一种办法是经过BDI的装备文件来完结。

接下来便是下载代码进行调试。假如代码现已固化,那仅下载调试信息给仿真器即可;不然需求把代码下载到RAM里运转,一起下载调试信息给仿真器。本文所用的是后一种办法。

因为Linux运转之后会发动MMU而使地址重映射,因而第一个断点一般在函数start_kernel( ),并且只能设置为硬断点。硬件断点对错常有限的,有的处理器乃至只能设置一个。所以,在调试Linux内核时,运用一般的GDB进行断点设置会十分不便利。LinuxScope能够很便利的切换断点形式,并支撑软断点,使断点的设置不再受到限制,为调试Linux内核供给强有力的支撑。具体步骤如下:

1) BDI装备文件的断点形式:soft

2) LinuxScope装备默许的断点形式:soft /hard 都能够

3) 用BDI下载紧缩的内核:load 0x20000 zImage bin

4) 把PC指针指到内核进口地址:TI 0x30000

5) 运转LinuxScope,在start_kernel处设置硬件断点

6) go,停下来后再设置软断点即可

模块内核的调试

咱们运用BDI2000来调试Linux内核的别的一个重要原因,便是它能够支撑调试内核模块。内核模块是一些能够让操作体系内核在需求时载入和履行的代码,这意味着它能够在不需求时由操作体系卸载。这种办法能够扩展操作体系内核的功用,而不需求重新发动体系,这一点对调试驱动程序的工程师特别有用。因为假如驱动程序编译进内核的话,会添加内核的巨细,还要改动内核的源文件,并且不能动态的卸载,不利于调试,所以引荐运用模块办法。

调试Linux 2.4内核模块

Linux 2.4内核模块的调试比较简单,运用指令“insmod -m”来加载模块。参数“-m”十分重要,它的功用是在把模块加载到内存时发生一个加载map表。然后经过LinuxScope调试器加载相应的调试信息。例如:

[root@lisl tmp]# insmod -m hello.o >modaddr

检查模块的加载信息文件modaddr如下:

.this 00000060 c88d8000 2**2

.text 00000035 c88d8060 2**2

.rodata 00000069 c88d80a0 2**5

……

.data 00000000 c88d833c 2**2

.bss 00000000 c88d833c 2**2

……

在这些信息中,咱们用到的只要.text、.rodata、.data、.bss。当然,把相关的信息输入LinuxScope调试器,它会把以上地址信息参加到gdb中进行模块功用的调试。

这儿需求留意的是对模块进行编译时,也需求添加“-g”选项。

别的,这种办法也存在必定的缺乏,它不能调试模块初始化的代码,因为此刻模块初始化代码现已履行过了。假如初始化部分有问题,那么将无法进行调试。遇到这样的状况能够修正代码,推迟初始化部分的履行。别的,也能够选用以下代替办法:当刺进内核模块时,内核模块机制将调用函数sys_init_module (kernel/modle.c)履行对内核模块的初始化。程序代码片断如下:

……

if (mod->init != NULL)

ret = mod->init();

……

在该句子上设置断点,也能在履行模块初始化之前停下来。

调试Linux 2.6内核模块

在Linux 2.6内核体系中,因为module-init-tools东西的更改,insmod指令不再支撑-m参数,只要采纳其他的办法来获取模块加载到内核的地址。

比较简单的办法是修正内核装备文件,使体系支撑CONFIG_KALLSYMS,这样就能够把相关的符号信息放到目录/sys下,然后经过LinuxScope调试器加载相应的调试信息。经过在模块初始化函数中放置一下代码,也能够获得模块加载到内存中的地址,仅仅这样要费事一些。

运用程序的调试

到了运用程序调试的阶段,仿真器就能够“功遂身退 ”了,剩余的调试使命就由LinuxScope调试器来单独完结。此刻只要在方针体系中发动“gdbserver”,调试运用程序十分的便利。

结语

面向职业、运用和设备的嵌入式Linux东西软件和嵌入式Linux操作体系渠道是未来开展的必然趋势。盯梢Linux的开展,契合规范,遵从敞开是大势所趋,嵌入式Linux也不破例。Linux调试技能的前进为Linux在嵌入式范畴的运用广泛性供给了确保。本文所叙述的仿真器技能和调试器技能能够极大的进步开发者的功率。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/103159.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部