0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在基于ARM的设计上调试Android平台

星星科技指导员 来源:嵌入式计算设计 作者:Achim Nohl 2022-06-22 11:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如果不触及 Android 软件堆栈的内部,就无法在新设备上启动 Android。虽然 Java 应用层在很大程度上保持不变,但必须在 Java 原生层、硬件适配层以及底层 Linux 内核及其驱动程序中完成工作。此外,特定于设备的服务和应用程序需要与 Android 的其余部分一起集成和测试。

在软件堆栈中的所有这些层之间垂直集成设备功能是一个相当大的挑战。在单层中隔离和调试一个软件模块可能很困难;更重要的是,任何调试框架都不支持跨所有层调试多个交互模块,因此需要耐心和许多 printf 跟踪消息。

为了解决这个问题,CoWare 开发了适用于 Android 的 Virtual ARM 开发板,它提供了一个 Android 感知的调试和分析框架,支持确定性和连续的自上而下的调试方法。Android 意识首先通过检测和跟踪 ARM Linux 操作系统上下文(如中断处理程序、内核线程、驱动程序和用户空间进程)的能力而引人注目。立即观察进程调度的能力可以洞察整个系统行为。

例如,图 1 显示了设备从深度睡眠挂起模式恢复后系统死锁的在线上下文跟踪。当设备唤醒但未对任何按键或触摸屏做出反应时,系统陷入软件中断 (swi) 处理程序和 Android 的输入设备读取器进程 (InputDeviceRead) 之间的死锁。通过这种分析,很明显没有其他重要进程(例如窗口管理器)用于处理按键操作。

图 1:在线上下文跟踪显示设备从深度睡眠挂起模式唤醒后出现系统死锁。

pYYBAGKyhtmAKlueAAST-3qeqrY494.png

支持自上而下的调试流程,每个过程都可以在功能上进一步研究到指令级。甚至可以跟踪内存访问,从而可以有效地分析软件堆栈中各层的行为。

图 2 说明了 Android 输入设备读取器进程与内核软件中断之间的函数级交互。识别实际执行的代码有助于隔离大型第三方软件代码库中需要开发人员注意的位置,并演示软件如何跨各个层进行交互。在图 2 中,观察 Android 中间件函数 read_notify 如何触发内核软件中断 swi。

图 2:调试 Android 用户空间和 Linux 内核之间的差距展示了软件堆栈中跨层的行为。

poYBAGKyhuSAbQgcAAcKFUlts5Y684.png

分析解决方案集成了 Android 和 Linux 中存在的日志记录和跟踪功能。无需对软件的任何部分进行检测或更改,Android 记录器和内核调试消息就会与之前引入的跟踪一起被捕获和可视化。这样,开发人员可以继续使用那些具有附加值的工具,即所有日志和跟踪都同步,并且可以轻松地与流程和软件功能相关联,如图 3 所示。

图 3:开发人员可以可视化 Android 记录器和内核调试消息以及之前引入的跟踪。

pYYBAGKyhuyAGZmeAAalhULqiak481.png

请注意,Android 日志并没有与重要的内核调试消息分开,查看这些消息不再需要工作的用户空间应用程序(例如 dmesg 或 logcat)。当系统损坏并且查看器应用程序或调试桥不再运行时,通常需要访问跟踪。一个示例是引导的早期阶段或与深度睡眠模式之间的转换。该分析解决方案通过虚拟平台提供的非侵入式控制和检查功能直接从嵌入式软件中捕获跟踪。

虚拟 ARM 开发板和工具通过强大的系统级分析工具补充了现有的 Android 开发环境。该板可与使用 Android 调试桥的 Google Eclipse SDK 等工具配合使用。RealView Debugger (RVD)、Lauterbach 或 Data Display Debugger (DDD) 等最先进的调试器可以使用板作为目标而不是硬件来执行嵌入式软件调试(参见图 4)。

这种高水平的可见性以及非侵入式检查和可控性使调试 Android 成为一项更加简化和可预测的任务。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5209

    文章

    20679

    浏览量

    337312
  • Android
    +关注

    关注

    12

    文章

    4035

    浏览量

    134546
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1112

    浏览量

    52061
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux Kernel 6.1 tools目录全解析 | RK平台ARM64交叉编译实战指南

      瑞芯微( RK ) ARM64 平台嵌入式 Linux 开发、内核调试与硬件外设测试中, Linux 内核源码自带的 tools 目录 是官方标配的工具集合,涵盖性能分析、设备
    的头像 发表于 04-16 18:42 7578次阅读
    Linux Kernel 6.1 tools目录全解析 | RK<b class='flag-5'>平台</b><b class='flag-5'>ARM</b>64交叉编译实战指南

    瑞芯微RK平台Android音频 EQ/DRC调试全攻略

    ,支持全局流绑定和动态应用两种模式,配合官方调试工具可快速实现个性化音效调校。 本文基于瑞芯微官方《 Android EQ/DRC 开发指南 V1.1.0 》,结合实际开发经验,从 编译集成、音效启用、状态验证、参数调试 四个维
    的头像 发表于 04-12 10:23 1w次阅读
    瑞芯微RK<b class='flag-5'>平台</b><b class='flag-5'>Android</b>音频 EQ/DRC<b class='flag-5'>调试</b>全攻略

    RK平台新声卡添加与驱动调试指南

    瑞芯微(RK)平台的嵌入式系统开发中,音频功能的实现核心依赖于 Sound Card(声卡)的正确配置与驱动调试
    的头像 发表于 02-09 16:42 1071次阅读
    RK<b class='flag-5'>平台</b>新声卡添加与驱动<b class='flag-5'>调试</b>指南

    一文吃透RK平台OTA升级开发:从逻辑到调试的完整指南

    Rockchip(简称 RK)Android 平台开发中,OTA(Over The Air)升级是实现设备软件迭代的核心方式。无论是本地卡刷升级,还是在线无缝更新,掌握 OTA 升级的技术细节
    的头像 发表于 02-09 16:26 764次阅读
    一文吃透RK<b class='flag-5'>平台</b>OTA升级开发:从逻辑到<b class='flag-5'>调试</b>的完整指南

    RK Android平台音频调试指南:从基础到实战,解决多设备输出、声卡异常等核心问题

    Android 开发中,音频模块的调试往往是 “老大难”—— 多声卡无法区分、多设备同时输出没声音、HDMI 录音崩溃… 这些问题不仅影响用户体验,还会消耗大量开发时间。
    的头像 发表于 02-06 16:48 3193次阅读
    RK <b class='flag-5'>Android</b><b class='flag-5'>平台</b>音频<b class='flag-5'>调试</b>指南:从基础到实战,解决多设备输出、声卡异常等核心问题

    RK3588平台USB摄像头调试实战:从报错到稳定运行

    嵌入式开发中,RK3588 凭借强劲的算力常被用于边缘计算、工业视觉等场景,而 USB 摄像头作为常见外设,调试过程中难免遇到各类 “卡壳” 问题。最近我们 RK3588 上调试
    的头像 发表于 02-04 16:13 733次阅读

    RK3576+Android15+Linux6.1调试EM05 4G模块全记录:从底层到上层的踩坑与破局

    嵌入式 Android 开发中,4G 模块的调试往往是 “牵一发而动全身” 的关键环节 —— 既要搞定底层驱动与内核适配,又要打通上层框架与 RIL(Radio Interface Layer
    的头像 发表于 02-03 15:27 3304次阅读
    RK3576+<b class='flag-5'>Android</b>15+Linux6.1<b class='flag-5'>调试</b>EM05 4G模块全记录:从底层到上层的踩坑与破局

    Android虚拟屏软件分享

    调试Android的过程中,有时候没有屏幕,公司做开发的时候屏幕还没到位,但是很多功能需要调试,特别是新入门的小伙伴,入门时可能会想着买
    的头像 发表于 01-30 17:02 2046次阅读
    <b class='flag-5'>Android</b>虚拟屏软件分享

    MDK-ARM平台下的fft介绍

    MDK-ARM平台 #include &quot;arm_math.h&quot; #include &quot
    发表于 01-22 07:35

    【教程】必看!手把手教你调试Codesys与西门子平台的Profinet网络​

    验证。1.1STEP7-MicroWINSMART平台使用STEP7-MicroWINSMART平台调试ProfinetIO时,需先借助S7-200PLC才可进
    的头像 发表于 09-18 19:33 2666次阅读
    【教程】必看!手把手教你<b class='flag-5'>调试</b>Codesys与西门子<b class='flag-5'>平台</b>的Profinet网络​

    ArkUI-XAndroid平台动态化开发指南

    本文介绍如何在Android平台进行ArkUI-X动态化开发,包括动态化目录规则及约束。 适用场景 动态化主要包括两个典型场景: 场景1:框架动态化,为了降低应用ROM体积占用,及满足动态升级框架
    发表于 06-15 23:33

    ArkUI-XAndroid上使用Fragment开发指南

    本文介绍将ArkUI框架的UIAbility跨平台部署至Android平台Fragment的使用说明,实现Android原生Fragment和ArkUI跨
    发表于 06-12 22:42

    ArkUI-X平台差异化

    : 1.自身业务逻辑不同平台本来就有差异; 2.OpenHarmony上调用了不支持跨平台的API,这就需要在OpenHarmony上仍然调用对应API,其他
    发表于 06-10 23:08

    ArkUI-X与Android消息通信

    平台与ArkUI交互,ArkUI侧具体用法请参考Bridge API,Android侧参考BridgePlugin。 创建平台桥接 1.ArkUI侧创建
    发表于 06-08 22:15

    ArkUI-X跨平台框架接入指南

    的IDE编辑器进行开发和调试; ArkUI-X支持Android/iOS平台真机和模拟器上运行调试
    发表于 05-18 18:21