news 2026/6/15 1:23:54

Andorid系统的调试(TODO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Andorid系统的调试(TODO)

一、基础 ADB 万能命令(所有调试根基)

1. 日志抓取

# 实时全量日志 adb logcat -b all -v time # 过滤单独模块(AudioFlinger、sensor、kernel、app) adb logcat AudioFlinger:* *:S adb logcat sensorservice:* *:S adb logcat kernel:* *:S # 保存日志到电脑 adb logcat -v time > log.txt # 只抓崩溃ANR adb logcat *:F # 查看内核dmesg(硬件驱动必用) adb shell dmesg -w adb shell dmesg > kernel_log.txt

2. 设备状态查看

# 查看系统属性 adb shell getprop ro.hardware adb shell getprop ro.build.version.release # 看挂载、分区 adb shell mount adb shell ls /dev/block/ # 查看后台进程、线程 adb shell ps -ef adb shell top -H # 看线程CPU占用

3. 文件推送拉取

adb push test.pcm /data/ adb pull /data/logs/anr/traces.txt ./ # 读写sysfs节点(内核IIO、Codec混音、GPIO) adb shell echo 1 > /sys/bus/iio/devices/iio:device0/in_accel_x_offset adb shell cat /sys/bus/iio/devices/iio:device0/in_accel_x_raw

4. 权限、selinux 临时关闭调试

# 临时关闭SELinux(调试神器,重启失效) adb shell su 0 setenforce 0 getenforce # 查看状态 Permissive=关闭 # 改文件权限 chmod 660 xxx chown system:system xxx

二、内核 & QUP/I2C/SPI 硬件调试

1. I2C/QUP 总线排查

# 扫描整条I2C总线设备地址 adb shell i2cdetect -y 0 # 单寄存器读写 i2c get 0 0x68 0x00 i2c set 0 0x68 0x00 0x01 # 查看QUP控制器加载状态 cat /sys/bus/platform/drivers/i2c-qupv3/bind dmesg | grep qup

2. 中断、时钟、电源域

# 查看所有中断 cat /proc/interrupts # 时钟状态 cat /sys/kernel/debug/clk/clk_summary # RPM电源域 cat /sys/kernel/debug/rpmh/rpmh_stats

3. IIO IMU 调试

# 读取原始值、scale、采样率 cat /sys/bus/iio/devices/iio:device0/in_gyro_x_raw cat /sys/bus/iio/devices/iio:device0/scale echo 100 > /sys/bus/iio/devices/iio:device0/sampling_frequency # 查看安卓传感器列表、数据流 dumpsys sensorservice list dumpsys sensorservice enable GYROSCOPE dumpsys sensorservice dump

三、Dumpsys调试

首先,dumpsys 本身只读取【系统 Java/C++ 服务】里缓存的运行时信息,也就是里面的dump接口。下面是一些简单用法。

查看全部支持的服务

dumpsys -l
  1. 单独查某一个模块
dumpsys 模块名 # 例子 dumpsys audio dumpsys sensorservice dumpsys camera dumpsys power
  1. 过滤关键词找错误
dumpsys audio | grep -i error/fail/unable
  1. 保存日志到电脑
adb shell dumpsys audio > audio_log.txt

四、Audio 音频调试(TinyALSA/ASoC/Codec)

1. tinyalsa 工具套件

# 列出声卡 tinypcminfo -D 0 # 查看所有混音控件 tinymix -D 0 # 批量开关通路 tinymix "Speaker Switch" 1 tinymix "DAC Mute" 0 # 录放闭环测试 tinycap rec.pcm -D0 -d0 -c2 -r48000 -T5 tinyplay rec.pcm -D0 -d0

2. AudioFlinger 系统状态

# 打印音频服务全部信息、流、设备路由 dumpsys audio # 查看当前播放/录音流类型、采样率、buffer大小 dumpsys media.audio_flinger

3. 内核 ASoC 排查

dmesg | grep -E "asoc|snd|codec" cat /proc/asound/cards ls /dev/snd/

五、Camera 图像调试(V4L2/ISP)

# V4L2基础查询 v4l2-ctl --list-formats v4l2-ctl --list-ctrls # 抓取一帧raw图像保存 v4l2-ctl --stream-mmap --stream-to=frame.raw --stream-count=1 # 高通平台专用 camera_tool dmesg | grep cam dumpsys camera

六、Sensor/IMU SEE 高通专属调试

# SEE传感器框架日志 logcat -b radio SensorsSEE:* *:S # 查看SLPI状态(低功耗小岛) dmesg | grep slpi cat /d/ssc/ssc_status # 导出传感器校准参数 cat /data/misc/sensor/calib.bin

七、崩溃、ANR、内存泄漏定位

  1. ANR 日志:路径/data/anr/traces.txt,直接 pull 出来看线程卡死栈
  2. Native 崩溃(segfault):开启 core dump
su ulimit -c unlimited echo "/data/core_%p" > /proc/sys/kernel/core_pattern # 崩溃后pull core文件,用aarch64-linux-gnu-gdb 解析
  1. Java 崩溃:logcat 直接搜 Crash、RuntimeException
  2. 内存泄漏
# 抓取内存快照 adb shell dumpsys meminfo -a > mem.txt # 实时内存、OOM日志 dmesg | grep -i oom

八、性能、CPU、功耗、休眠调试

1. CPU 负载、线程卡死

top -H ps -T -p [pid] # 看调度、锁阻塞 perf top

2. 功耗电流测量(高通)

# RPM功耗统计 cat /sys/kernel/debug/rpmh/power_stats # 查看各模块待机电流 power_stats

3. 休眠唤醒排查(Suspend)

# 查看唤醒源 cat /sys/kernel/wakeup_sources dmesg | grep suspend # 手动进入休眠 echo mem > /sys/power/state

九、SELinux 权限排错高频技巧

  1. 报错关键词:avc: denied
  2. 临时方案:setenforce 0验证是否权限问题
  3. 提取 avc 规则自动生成 te 语句:
adb shell audit2allow -i /dev/kmsg
  1. 常见场景:sysfs iio/snd/tlmm 节点、HAL 读写硬件、SLPI QMI 通信

十、HAL 层快速调试(audio/sensor/camera)

  1. 单独重启硬件 HAL,不用整机重启
# 音频HAL重启 killall android.hardware.audio.service # sensor SEE重启 killall android.hardware.sensors@2.1-service
  1. 替换 HAL 库:push 编译好的.so/vendor/lib64/hw/
  2. 增加 HAL 内部 printf 日志,编译打开 DEBUG 宏

十一、实用提速小技巧

  1. 串口优先于 ADB:死机、开不了机、内核 early crash 只有串口能抓到日志
  2. 分层隔离调试: 硬件层(i2c/tinymix/v4l2)通了 → 再查 HAL → 再查 Framework/APP 不要一上来就怀疑上层,90% 问题在内核 DTS、供电、时序
  3. 二分注释法:DTS 一段一段注释,定位哪个节点导致启动失败
  4. 对比法:拿一套正常同平台设备,diff DTS、defconfig、驱动代码差异
  5. 调试完记得恢复 setenforce 1、恢复量产配置,不要带着临时权限出货

十二、快速故障定位模板

  1. 硬件不通:dmesg→ i2cdetect → 供电/复位 GPIO → pinctrl
  2. 底层通、上层无数据:SELinux 权限 → init.rc chmod/chown → HAL 配置 json
  3. 有声但杂音 / 漂移:tinymix 增益、I2S 格式、MCLK 频率、tuning 参数
  4. IMU 角度飘:内核 offset 校准 + HAL 磁力计软硬铁补偿
  5. 待机电流大:wakeup_sources 看是谁阻止休眠、SLPI 投票、外设未断电
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 1:23:51

高通学习12--调试工具(TODO)

(TODO)按基带通信刷机、日志诊断、性能剖析、专项子系统、崩溃内存、编译 AI、硬件仿真七大类别整理,覆盖手机 / 物联网 / 车规全骁龙平台:一、QPST 套件(Windows 基带核心工具集,Diag 协议底座&#xff09…

作者头像 李华
网站建设 2026/6/15 1:19:56

从一张图看懂副热带高压:Python绘制588线揭示的2023年夏季天气密码

解码副热带高压:用Python绘制588线破解2023年夏季天气密码 当气象爱好者第一次看到500hPa位势高度场图时,往往会被那些蜿蜒的等高线弄得一头雾水。但其中有一条特殊的588线,它就像天气版的"黄金分割线",隐藏着解读夏季天…

作者头像 李华
网站建设 2026/6/15 1:16:55

Web p5

1、复现上课的/hello 和/reg案例。2、apifox中建立接口,并测试。为什么需要在apifox中建立接口?1. 替代前端网页表单,单独测后端Controller接口JSP表单是浏览器页面提交;Apifox 绕开页面,直接模拟浏览器给后端发HTTP请求&#xf…

作者头像 李华
网站建设 2026/6/15 1:10:51

AI资讯简报设计方法论:对抗信息过载的认知工程实践

1. 项目概述:一份真正“够用”的AI资讯简报,到底长什么样?“This AI newsletter is all you need #15”——光看标题,你可能以为这又是一份泛泛而谈的AI行业 roundup,堆砌几条新闻标题、贴几张截图、加点“未来已来”的…

作者头像 李华