九江市网站建设_网站建设公司_动画效果_seo优化
2026/1/16 6:25:03 网站建设 项目流程

📚 目录

  • 前言
  • 核心原则
  • Android 系统架构与问题分层
  • 问题诊断通用流程
  • 如何提供有效信息
  • BSP 层问题诊断
  • System 层问题诊断
  • 最佳实践
  • 问题速查表

前言

本文档基于实际解决 Android 底层系统问题的经验,总结了如何有效使用 AI 助手(如 Cursor、Claude)解决 BSP(Board Support Package)和 System 层的复杂问题。

📖 本文档的定位

核心理念:聚焦于"人机协作"的核心价值,让 AI 专注于问题诊断和方案建议,而用户专注于问题描述、信息收集和方案实施。

本文档重点关注

  • 如何向 AI 提供有效信息以获得准确诊断
  • 问题定位方法和诊断思路
  • 需要收集哪些日志和文件
  • AI 可以帮你做什么,不能做什么

本文档不包含

  • ❌ 具体的编译命令(因平台和项目而异)
  • ❌ 平台特定的 BSP 编译流程
  • ❌ 工具链配置和编译环境搭建

人机协作模式

用户 → 描述问题 + 提供日志/源码 → AI ↑ ↓ ← 方案实施 + 结果反馈 ← AI 分析诊断 + 提出方案

适用范围

  • BSP 层:Bootloader、Kernel、Device Tree、驱动开发
  • HAL 层:硬件抽象层、Vendor 服务
  • Framework 层:System Server、Native 服务
  • 应用层:系统应用、权限问题

适用场景

  • 新硬件平台移植
  • 设备树配置和驱动调试
  • 系统启动问题
  • 硬件功能异常(显示、音频、摄像头、USB、网络等)
  • 性能和稳定性问题
  • SELinux 和权限问题
  • 系统服务崩溃

Android 系统架构与问题分层

系统层次结构

┌─────────────────────────────────────────────┐ │ Applications (Java/Kotlin) │ 应用层 ├─────────────────────────────────────────────┤ │ Android Framework (Java/Kotlin) │ 框架层 │ - System Server - Activity Manager │ │ - Package Manager - Window Manager │ ├─────────────────────────────────────────────┤ │ Native Services (C/C++) │ Native 层 │ - SurfaceFlinger - MediaServer │ │ - AudioFlinger - Binder │ ├─────────────────────────────────────────────┤ │ HAL (Hardware Abstraction Layer) │ HAL 层 │ - Display HAL - Audio HAL - Camera HAL │ │ - Sensors HAL - USB HAL │ ├─────────────────────────────────────────────┤ │ Linux Kernel (C) │ 内核层 │ - Device Drivers - Memory Management │ │ - Process Scheduler - Network Stack │ ├─────────────────────────────────────────────┤ │ Bootloader (U-Boot/ABL) │ 引导层 └─────────────────────────────────────────────┘

问题分类与定位

层次典型问题关键日志诊断重点
Bootloader启动失败、分区错误fastboot log、串口日志分区表、启动参数
Kernel驱动加载失败、内核崩溃dmesg、/proc/kmsgDevice Tree、驱动代码
HAL硬件功能异常、性能问题logcat、vendor logHAL 实现、SELinux
Framework系统服务崩溃、ANRlogcat、tombstoneBinder、权限配置
Application应用崩溃、权限拒绝logcat、bugreportManifest、SELinux

问题层次判断

快速判断方法

# 1. 系统能否启动到 Android?adb devices# 如果看不到设备 → Bootloader/Kernel 问题# 2. 内核日志是否正常?adb shelldmesg|grep-i"error\|fail"# 大量错误 → Kernel/驱动问题# 3. 系统服务是否运行?adb shellservicelist# 服务缺失 → Framework 问题# 4. HAL 服务是否正常?adb shellps-A|grep"android.hardware"# HAL 未启动 → HAL 层问题# 5. SELinux 是否阻止?adb shelldmesg|grepavc# 有 avc denied → SELinux 问题

核心原则

1.提供日志,而非描述

错误示例

“我的显示驱动加载不了”

正确示例

“DRM 驱动没有加载,/dev/dri/ 目录不存在”
附带:dmesg日志、logcat输出

2.提供完整上下文

AI 需要了解:

  • 硬件平台(如:Qualcomm SA6155P)
  • Android 版本(如:Android 14)
  • 内核版本(如:6.1.99)
  • 问题现象(启动卡死、功能异常等)
  • 已尝试的修改

3.逐步缩小问题范围

不要一次性提出多个问题,而是:

  1. 先解决最核心的问题(如:系统能否启动)
  2. 再解决次要问题(如:功能优化)

4.提供可编译的完整文件

AI 需要看到:

  • 完整的设备树文件(.dtsi
  • 相关的驱动源码(如果需要)
  • 编译输出和错误信息

问题诊断通用流程

第一步:明确问题层次和现象

关键问题

  1. 系统启动到哪个阶段?(Bootloader / Kernel / Android)
  2. 问题是否可重现?(必现 / 概率性)
  3. 影响范围?(特定功能 / 整个系统)
  4. 最近的修改?(代码改动 / 配置变更)

快速定位层次

# Bootloader 层检查fastboot devices# 能看到设备表示 Bootloader 正常# Kernel 层检查adb shell"echo 'kernel alive'"||echo"kernel not ready"# System 层检查adb shell getprop sys.boot_completed# 输出 1 表示启动完成# 具体功能检查adb shell dumpsys<service_name>

需要提供的完整信息

# === 基础信息 ===adb shell getprop>device_props.txt adb shelluname-a>kernel_version.txt# === Kernel 层 ===adb shelldmesg>dmesg.txt adb shellcat/proc/kmsg>kmsg.txt# 实时内核日志adb shell lsmod>loaded_modules.txt# === System 层 ===adb logcat -d>logcat.txt adb logcat -b all -d>logcat_all.txt# 包含所有 buffer# === HAL 层 ===adb logcat -b all -d|grep"android.hardware">hal_log.txt adb shellps-A|grep"android.hardware">hal_services.txt# === Framework 层 ===adb shell dumpsys>dumpsys_all.txt adb shell dumpsys activity>activity_dumpsys.txt# === SELinux ===adb shelldmesg|grepavc>selinux_denials.txt adb shell getenforce>selinux_mode.txt# === 性能信息 ===adb shelltop-n1>top.txt adb shellcat/proc/meminfo>meminfo.txt# === 崩溃信息 ===adb pull /data/tombstones/ ./tombstones/ adb bugreport bugreport.zip

第二步:定位问题模块

示例对话

用户:系统启动后 /dev/dri/ 目录不存在,scrcpy 无法连接 AI:请提供 dmesg 日志,我需要查看 DRM 驱动的加载情况 用户:@dmesg.txt AI:发现 mdss_mdp 节点被禁用,需要在设备树中启用

第三步:分析根本原因

AI 会:

  1. 搜索相关的设备树文件
  2. 检查驱动源码逻辑
  3. 对比正常工作的配置
  4. 识别依赖关系

第四步:提出解决方案

AI 会:

  1. 提供具体的修改建议
  2. 解释修改的原因
  3. 预测可能的副作用

第五步:验证和迭代

验证流程

# 1. 编译make-j$(nproc)# 2. 烧录fastboot flash dtbo dtbo.img# 3. 重启adbreboot# 4. 收集新日志adb shelldmesg>dmesg_new.txt

反馈给 AI

用户:修改后还是不行,新的 dmesg 日志如下 AI:发现新的错误 "failed to parse vregs",需要添加电源配置

如何提供有效信息

问题类型与所需文件清单

以下表格列出了不同类型问题需要提供的具体文件:

问题类型必须提供的日志必须提供的源码/配置设备树文件其他文件
Bootloader 问题- fastboot 输出
- 串口日志(如有)
- 分区表定义
- bootloader 配置
- 不涉及- bootloader 二进制版本
Device Tree 编译错误- 编译错误输出- 报错的 .dts/.dtsi 文件
- 被 #include 的相关文件
-主要:问题相关的 dtsi
- 可选:runtime.dts
- Makefile 或编译脚本
驱动 Probe 失败-必须:dmesg 完整日志
- deferred devices 列表
-必须:驱动源码 (.c/.h)
- 驱动的 Makefile/Kconfig
-必须:驱动对应的 DT 节点
- 示例:
<platform>-<subsystem>.dtsi
- 内核 .config
- lsmod 输出
GPIO/Pinctrl 问题- dmesg(pinctrl 相关)
-/sys/kernel/debug/gpio
- pinctrl 驱动源码(如需分析)-必须<platform>-pinctrl.dtsi
-必须:使用该 GPIO 的节点配置
- 硬件原理图(如有)
- GPIO 状态输出
时钟/电源问题- dmesg(clk/regulator 相关)
-/sys/kernel/debug/clk/clk_summary
- 时钟/电源驱动源码-必须<platform>-regulators.dtsi
-必须:使用电源的设备节点
- clk_summary 输出
- regulator_summary
Display 问题-必须:dmesg(drm/mdss 相关)
- logcat(SurfaceFlinger)
- Display HAL 实现
- Composer HAL 代码
-必须display-devicetree/display/<platform>-display.dtsi
- 可选:panel dtsi
-dumpsys SurfaceFlinger
- lshal 输出
Audio 问题- dmesg(sound/asoc 相关)
- logcat(AudioFlinger)
- logcat(Audio HAL)
-必须:Audio HAL 实现
- audio_policy_configuration.xml
- mixer_paths.xml
-必须audio-devicetree/<platform>-audio.dtsi
- 可选:codec dtsi
-dumpsys media.audio_flinger
-tinymix输出
- ACDB 文件路径
Camera 问题- dmesg(camera 驱动)
- logcat(Camera HAL)
- logcat(CameraService)
-必须:Camera HAL 实现
- Camera provider 代码
- Sensor 配置文件
-必须camera-devicetree/<platform>-camera.dtsi
-必须:sensor dtsi
-dumpsys media.camera
-/dev/video*节点
-lshalcamera 部分
USB 问题-必须:dmesg(usb/dwc3/qusb 相关)
-/sys/kernel/debug/usb/*
- USB 驱动源码(如分析 PHY)
- USB HAL 实现(功能层)
-必须<platform>-usb.dtsi
-必须:USB 相关 pinctrl
- 可选:USB PHY 节点
-lsusb输出
-/proc/interrupts(USB IRQ)
-dumpsys usb
Bluetooth 问题- dmesg(bluetooth/hci 相关)
- logcat(bluetooth)
- Bluetooth HAL 实现
- HCI 配置文件
-必须bt-devicetree/<platform>-bt.dtsi-hciconfig
-hcidump
-lshalbluetooth 部分
WLAN 问题- dmesg(wlan/wifi 相关)
- logcat(wifi)
- WLAN HAL 实现
- wifi firmware 路径
-必须wlan-devicetree/<platform>-wlan.dtsi-iw dev
-wpa_cli status
-/proc/net/wireless
Sensor 问题- logcat(Sensor HAL)
- dmesg(sensor 驱动)
-必须:Sensor HAL 实现
- Sensor 配置文件(JSON)
- Sensor I2C/SPI 节点配置-dumpsys sensorservice
- Sensor 校准数据
GPU 问题- dmesg(kgsl/adreno)
- logcat(hwcomposer)
- GPU HAL 实现
- Gralloc 实现
-必须graphics-devicetree/gpu/<platform>-gpu.dtsi-/sys/class/kgsl/
- GPU 性能数据
Video 编解码问题- dmesg(venus/vidc)
- logcat(omx/codec2)
- Video HAL 实现
- OMX/Codec2 组件
-必须video-devicetree/<platform>-video.dtsi-dumpsys media.codec
- Video capability 查询
SELinux 问题-必须:avc denials(dmesg+logcat)
- getenforce 输出
-必须:相关的 .te 策略文件
- file_contexts
- service_contexts
- 不涉及-ps -Z(进程上下文)
-ls -Z(文件上下文)
Init 服务问题- logcat(init 相关)
- getprop(服务状态)
-必须:.rc 服务定义文件
- 服务的可执行文件
- 不涉及-getprop | grep init.svc
- 服务依赖库
Binder 问题- logcat(binder 错误)
-/sys/kernel/debug/binder/stats
- AIDL/HIDL 接口定义
- Binder 服务实现
- 不涉及- Binder transactions
- failed_transaction_log
内存问题(OOM/泄漏)- logcat(lowmemorykiller)
- dmesg(oom 相关)
- 可疑进程的源码(如分析泄漏)- CMA 配置(如 CMA 问题)-必须dumpsys meminfo
- heap dump
- Perfetto trace
性能问题(卡顿/ANR)- logcat(ANR)
- /data/anr/ 文件
- 性能瓶颈点的源码- CPU/调度相关配置-必须:Perfetto trace
- top 输出
- systrace
Thermal 问题- dmesg(thermal 相关)
-/sys/class/thermal/
- Thermal HAL 实现
- thermal-engine 配置
-必须<platform>-thermal.dtsi- 温度读数
- CPU 频率变化

设备树文件提供指南

由于设备树是模块化的,提

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询