移动互联网设备上的设备驱动程序调试

移动互联网设备(Mobile Internet Device)开发基于定制设计的平台或者嵌入式应用程序的中心层面是增强和定制底层OS的功能集,对于封闭系统更是如此。此外,您可能希望连接到专用硬件平台扩展并为此编写自己的驱动程序。一些多媒体编解码优化也可以很好地应用于设备驱动程序水平。

针对移动互联网设备的Intel® C++ JTAG Debugger for Linux* OS提供的功能集可以帮助进行OS配适和驱动程序开发,并能为缺陷修复、验证和质量保证提供帮助。在本白皮书中,我们主要讨论调试Linux OS增强、Linux核心组件以及运行时加载的内核模块的方法。

概述

包含于支持移动互联网设备的Intel® C++ Software Development Tool Suite for Linux* OS中包含的支持移动互联网设备的Intel® C++ JTAG Debugger for Linux* OS是一个全图形用户界面的系统调试器。使用它需要目标设备有一个 Intel eXtended Debug Port(XDP)和一个 ITP-XDP3Intel IN-Target-Probe

Intel® C++ JTAG Debugger的目标用户是初始设备制造商和初始设计制造商(OxM),他们需要具备独立开发设备驱动程序和采用低水平OS内核层平台的能力。

这类软件开发人员需要深入了解嵌入式OS运行的硬件。同时,开发人员不必放弃易于使用的图形用户界面以及他们习惯的高级语言支持调试功能。

完整的Intel® Atom™构架支持提供处理器技术的完全视图。可以轻松访问大部分特定于

Si的功能,

 


包括构架寄存器,Intel® SSE3 和图形配套芯片寄存器。Bitfield Editors提供深入全面的文档型便捷访问,可以在其中查看和修改寄存器。

Bitfield Editors不仅适用于标准寄存器,也适用于描述符表条目。

l         不仅可以很方便的进行查看和修改描述符表以进行调试,而且可以很方便地访问Page Translation Table和实时显示活动内存映射。

 

 


 

l         执行追踪支持增强了对执行程序流的理解。这非常有助于防止内存泄漏,数据结构校准和执行流问题。显示系统调试执行追踪提高了调试效率。

l         Linux OS Awareness功能能够在任何时间全面掌握系统的行为。显示所有相关的内核信息,活动内核线程和加载的内核模块,并在OS环境下对它们进行调试。

该调试器扩展的硬件访问和OS感知功能还意味着,它能够通过JTAG远程调试动态加载的内核模块(即设备驱动程序),只需在目标上启动工具套件提供的内核模块即可。这个专用的内核模块可以导出所有模块加载事件和内存位置,因此JTAG调试器及其OS感知插件可以利用这些信息,轻松便捷地进行设备驱动程序调试。更多细节请阅读版本说明和调试器文档。

 


基本原理

JTAG不支持目标软件,这给通过它进行设备驱动程序和系统服务调试增添了困难。由于设备驱动程序通常实现为运行时加载的动态内核模块,所以需要对调试器实施一个导出内核加载和卸载事件的机制。内核水平符号导出及事件通知的目的是使调试器监视OS内核符号,这些符号包含内核模块的内存加载地址信息,以及有关内核模块状态地址、加载和初始化方法的信息。

达到这种目的的方法有很多,传统的方法需要调整要调试的内核模块。这是一个激进的方法,需要通过定义或删除内核模块内的调试排列以释放代码块。这种方法使错误或运行时问题的分析变得很复杂,有可能只有在最终用户收到设备驱动程序后才能显示出来。

另一种方法需要一个OS内核的内核补丁,用来触发Linux*OS导出所有必需信息。这种操作实际只需要内存几千字节的系统开销。当没有连接调试器来查询导出符号时,这些补丁对运行时没有任何影响。但是值得注意的是,这种方法会产生调试钩子,这可能让竞争对手可以很容易地分析代码库。但这至少避免了一种情况,即不必在每次调试的时候都要构建一次设备驱动程序代码。


 

最好的解决方案既不需要内核模块调整也不需要内核补丁,而是内核模块本身来实施内核模块加载信息导出功能。这样,用户可以选取已有的任何目标平台而不必重新编译内核或者要调试设备驱动程序的调试对象。

本白皮书提供如何使用支持移动互联网设备的Intel®C++ JTAG Debugger for Linux* OS 执行调试的简明教程和使用场景。

 

构建内核模块以导出加载信息

运行时加载的内核模块调试功能是 Intel® C++ JTAG DebuggerLinux* OS感知插件的一部分,用户需要在目标设备上安装并运行内核模块idbntf.ko后才能使用。文件夹

/opt/intel/xdb/1.0.xxx/kernel-modules/idbntf

包含生成Linux*内核模块的编码,可以启用内核模块调试功能。使用

/opt/intel/xdb/1.0.xxx/kernelmodules/idbntf/Makefile

在此文件夹中运行make即可创建idbntf.ko内核模块。

要生成,只需将这些文件转移到用户目标系统,然后调用make。这将生成内核对象 idbntf.ko

 

要启用模块调试,此对象必须在通过命令insmod idbntf.ko.启动调试器之前加载。然后,它将导出。初始化方法和cleanip方法将信息从目标加载到调试器。完成调试对话后,可以使用rmmod idbntf卸载模块。


启动调试对话

1.         首先,在shell环境下,确保XDP Debugger启动脚本位于

 /opt/intel/xdb/1.0.xxx/xdb.sh

设置如下

#!/bin/bash

 

# Intel(R) JTAG Debugger for MIDs

 

# Copyright (C) 2000-2008 Intel

Corporation. All rights reserved.

INSTALLDIR=/opt/intel/xdb/ 1.0.008

 

export

LD_LIBRARY_PATH="$INSTALLDIR/lib:$INS

TALLDIR/gui:$INSTALLDIR/plugin/ia/lin

os:$INSTALLDIR/plugin/ia/trace:$INSTA

LLDIR/plugin/ia/flash":$LD_LIBRARY_PA

TH

 

export

PATH="$INSTALLDIR/gui:$INSTALLDIR/lib

":$PATH

 

export IDB_GUI_DEBUGGER="../lib/XDB"

dbggui -tgttype ’ JTAG IA ’ -IUDGmode -

plg

’libguiialin.so,libiatrace.so,libplgflashw.

so’ -core 1 -target

device=’XDP 3’

scanchain=’TargetPlatform’ hotdebug

"$@"


如果出现以下情况:它不包含上述设置;In-Target Probe eXtended Debug Port设置没有指定XDP3;指定目标不是预期的处理器或者Linux OS感知的共享对象插件之一;Flash Writing 丢失,那么请在xdb.sh脚本上修改设置

 

2. 检查XDP3 JTAG探测器是否已经与目标板上标有JTAGeXtended Debug Port稳固连接。同时检查探测器与USB电缆和实验电脑上USB端口的连接。

 

3. 更改为调试器目录

  chdir /opt/intel/xdb/1.0.xxx

 

4.启动XDB Debugger

  ./xdb.sh

 

5. 如果连接失败请检查Linux Console Window

 

调试Linux内核

  请点击此处下载,查看全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值