[Android][sensor]触发adsp的软dump和硬dump

本文介绍如何通过禁用ADSP的SSR并使用adb命令来触发软dump,以及如何通过下拉PS_HOLD来模拟硬件重置以获取硬dump。此外还提供了使用qpst工具收集dump的方法,并推荐了用于解析ramdump的QCAP工具。

触发软dump

1.禁用ADSP的SSR

adb shell echo SYSTEM > adb shell cat /sys/bus/msm_subsys/devices/subsys[n]/restart_level
n是adsp对应的subsys

2.触发dump

adb shell c > /proc/sysrq-trigger

3.qpst工具收集dump.

触发硬dump

下拉PS_HOLD可以模拟突然硬件重置以获取dump。

解析dump

参考 高通"80-NR964-54" 是解析ramdump的文档,用QCAP工具可以解析ramdump

Line 20149: 10-14 22:01:48.314995 11611 11611 I [269501.770848]CAM_INFO: CAM-SENSOR: cam_sensor_driver_cmd: 1042 CAM_RELEASE_DEV Success, sensor_id:0x5044,sensor_slave_addr:0x20 Line 20716: 10-14 22:02:16.930389 175 175 E [269530.386242]qcom_smp2p soc: qcom,smp2p-adsp: 2:sleepstate_see: status:ffffffff sensor_type:0 ap_stat:0 Line 20814: 10-14 22:02:17.391599 175 175 E [269530.847452]qcom_smp2p soc: qcom,smp2p-adsp: 2:sleepstate_see: status:ffffffff sensor_type:65535 ap_stat:255 Line 20836: 10-14 22:02:17.503628 862 862 W [269530.959481]: wcd_core_dlkm(OE) stub_dlkm(OE) cnss_utils(OE) bolero_cdc_dlkm(OE) oplus_audio_pa_manager(OE) audio_pkt_dlkm(OE) oplus_dns_hook(OE) audpkt_ion_dlkm(OE) wcd937x_slave_dlkm(OE) spf_core_dlkm(OE) coresight_tgu(E) gpr_dlkm(OE) oplus_network_linkpower_module(OE) oplus_freeze_process(OE) stm_p_basic(E) hdcp_qseecom_dlkm(OE) oplus_hans(OE) oplus_security_guard(OE) snd_usb_audio_qmi(E) cfg80211(E) qti_qmi_sensor(E) snd_event_dlkm(OE) qti_devfreq_cdev(E) swr_dlkm(OE) oplus_data_module(OE) coresight_dummy(E) cx_ipeak_cdev(E) oplus_chg_v2(E) oplus_networks_tuning(OE) coresight_hwevent(E) oplus_app_monitor(OE) oplus_stats_calc(OE) stm_p_ost(E) coresight_tpda(E) oplus_bsp_memleak_detect(OE) q6_notifier_dlkm(OE) lmh_cpu_vdd_cdev(E) coresight_cti(E) msm_tsens_driver(E) q6_pdr_dlkm(OE) msm_lmh_dcvs(E) oplus_sched(OE) coresight_tpdm(E) oplus_qr_scan(OE) oplus_game_first(OE) leds_qti_flash(E) oplus_chg(E) coresight_remote_etm(E) leds_qti_tri_led(E) stm_console(E) qrtr_smd(E) Line 20840: 10-14 22:02:17.503886 862 862 W [269530.959739]: oplus_bsp_tp_syna_comnon(E) sg(E) rtc_pm8xxx(E) phy_msm_qusb(E) oplus_bsp_tp_ilitek_common(E) ipa_fmwk(E) usb_f_cdev(E) oplus_bsp_tp_ft3518(E) usb_f_ccid(E) ucsi_glink(E) oplus_io_monitor(E) oplus_bsp_tp_ft3419u(E) oplus_bsp_tp_focal_common(E) oplus_bsp_tp_comon(E) msm_performance(E) oplus_bsp_fw_update(E) oplus_bsp_tp_custom(E) qpnp_pdphy(E) oplus_bsp_tp_notify(E) qcom_va_minidump(E) olc(E) cx_ipeak(E) guestvm_loader(E) rdbg(E) rpm_smd_debug(E) usb_bam(E) oplus_sensor(E) hung_task_enh(E) phy_qcom_emu(E) gpucc_sm6115(E) sps_drv(E) oplus_bsp_dfr_ubt(E) iolimit(E) rq_stats(E) dwc3_msm(E) ehset(E) phy_msm_ssusb_qmp(E) phy_msm_snps_hs(E) phy_generic(E) oplus_resctrl(E) cdsp_loader(E) ssc_interact(E) oplus_bsp_sensor_feedback(E) bwmon(E) dispcc_sm6115(E) qcom_ramdump(E) qfprom_sys(E) eud(E) charger_ulog_glink(E) altmode_glink(E) rpm_master_stat(E) dispcc_khaje(E) memlat(E) boot_stats(E) pmic_glink_debug(E) core_hang_detect(E) qti_battery_debug(E) pmic_glink(E) Line 20840: 10-14 22:02:17.503886 862 862 W [269530.959739]: oplus_bsp_tp_syna_comnon(E) sg(E) rtc_pm8xxx(E) phy_msm_qusb(E) oplus_bsp_tp_ilitek_common(E) ipa_fmwk(E) usb_f_cdev(E) oplus_bsp_tp_ft3518(E) usb_f_ccid(E) ucsi_glink(E) oplus_io_monitor(E) oplus_bsp_tp_ft3419u(E) oplus_bsp_tp_focal_common(E) oplus_bsp_tp_comon(E) msm_performance(E) oplus_bsp_fw_update(E) oplus_bsp_tp_custom(E) qpnp_pdphy(E) oplus_bsp_tp_notify(E) qcom_va_minidump(E) olc(E) cx_ipeak(E) guestvm_loader(E) rdbg(E) rpm_smd_debug(E) usb_bam(E) oplus_sensor(E) hung_task_enh(E) phy_qcom_emu(E) gpucc_sm6115(E) sps_drv(E) oplus_bsp_dfr_ubt(E) iolimit(E) rq_stats(E) dwc3_msm(E) ehset(E) phy_msm_ssusb_qmp(E) phy_msm_snps_hs(E) phy_generic(E) oplus_resctrl(E) cdsp_loader(E) ssc_interact(E) oplus_bsp_sensor_feedback(E) bwmon(E) dispcc_sm6115(E) qcom_ramdump(E) qfprom_sys(E) eud(E) charger_ulog_glink(E) altmode_glink(E) rpm_master_stat(E) dispcc_khaje(E) memlat(E) boot_stats(E) pmic_glink_debug(E) core_hang_detect(E) qti_battery_debug(E) pmic_glink(E) Line 20971: 10-14 22:02:18.064941 175 175 E [269531.520794]qcom_smp2p soc: qcom,smp2p-adsp: 2:sleepstate_see: status:ffffffff sensor_type:0 ap_stat:0 Line 22637: 10-14 22:03:57.621884 175 175 E [269631.077737]qcom_smp2p soc: qcom,smp2p-adsp: 2:sleepstate_see: status:ffffffff sensor_type:65535 ap_stat:255 Line 22774: 10-14 22:03:58.351254 862 862 W [269631.807107]: wcd_core_dlkm(OE) stub_dlkm(OE) cnss_utils(OE) bolero_cdc_dlkm(OE) oplus_audio_pa_manager(OE) audio_pkt_dlkm(OE) oplus_dns_hook(OE) audpkt_ion_dlkm(OE) wcd937x_slave_dlkm(OE) spf_core_dlkm(OE) coresight_tgu(E) gpr_dlkm(OE) oplus_network_linkpower_module(OE) oplus_freeze_process(OE) stm_p_basic(E) hdcp_qseecom_dlkm(OE) oplus_hans(OE) oplus_security_guard(OE) snd_usb_audio_qmi(E) cfg80211(E) qti_qmi_sensor(E) snd_event_dlkm(OE) qti_devfreq_cdev(E) swr_dlkm(OE) oplus_data_module(OE) coresight_dummy(E) cx_ipeak_cdev(E) oplus_chg_v2(E) oplus_networks_tuning(OE) coresight_hwevent(E) oplus_app_monitor(OE) oplus_stats_calc(OE) stm_p_ost(E) coresight_tpda(E) oplus_bsp_memleak_detect(OE) q6_notifier_dlkm(OE) lmh_cpu_vdd_cdev(E) coresight_cti(E) msm_tsens_driver(E) q6_pdr_dlkm(OE) msm_lmh_dcvs(E) oplus_sched(OE) coresight_tpdm(E) oplus_qr_scan(OE) oplus_game_first(OE) leds_qti_flash(E) oplus_chg(E) coresight_remote_etm(E) leds_qti_tri_led(E) stm_console(E) qrtr_smd(E) Line 22777: 10-14 22:03:58.351528 862 862 W [269631.807381]: ucsi_glink(E) oplus_io_monitor(E) oplus_bsp_tp_ft3419u(E) oplus_bsp_tp_focal_common(E) oplus_bsp_tp_comon(E) msm_performance(E) oplus_bsp_fw_update(E) oplus_bsp_tp_custom(E) qpnp_pdphy(E) oplus_bsp_tp_notify(E) qcom_va_minidump(E) olc(E) cx_ipeak(E) guestvm_loader(E) rdbg(E) rpm_smd_debug(E) usb_bam(E) oplus_sensor(E) hung_task_enh(E) phy_qcom_emu(E) gpucc_sm6115(E) sps_drv(E) oplus_bsp_dfr_ubt(E) iolimit(E) rq_stats(E) dwc3_msm(E) ehset(E) phy_msm_ssusb_qmp(E) phy_msm_snps_hs(E) phy_generic(E) oplus_resctrl(E) cdsp_loader(E) ssc_interact(E) oplus_bsp_sensor_feedback(E) bwmon(E) dispcc_sm6115(E) qcom_ramdump(E) qfprom_sys(E) eud(E) charger_ulog_glink(E) altmode_glink(E) rpm_master_stat(E) dispcc_khaje(E) memlat(E) boot_stats(E) pmic_glink_debug(E) core_hang_detect(E) qti_battery_debug(E) pmic_glink(E) msm_memshare(E) debugcc_khaje(E) glink_pkt(E) heap_mem_ext_v01(E) smp2p_sleepstate(E) cdsprm(E) msm_gpi(E) gpucc_khaje(E) oplus_bsp_proactive_compact(E) Line 22777: 10-14 22:03:58.351528 862 862 W [269631.807381]: ucsi_glink(E) oplus_io_monitor(E) oplus_bsp_tp_ft3419u(E) oplus_bsp_tp_focal_common(E) oplus_bsp_tp_comon(E) msm_performance(E) oplus_bsp_fw_update(E) oplus_bsp_tp_custom(E) qpnp_pdphy(E) oplus_bsp_tp_notify(E) qcom_va_minidump(E) olc(E) cx_ipeak(E) guestvm_loader(E) rdbg(E) rpm_smd_debug(E) usb_bam(E) oplus_sensor(E) hung_task_enh(E) phy_qcom_emu(E) gpucc_sm6115(E) sps_drv(E) oplus_bsp_dfr_ubt(E) iolimit(E) rq_stats(E) dwc3_msm(E) ehset(E) phy_msm_ssusb_qmp(E) phy_msm_snps_hs(E) phy_generic(E) oplus_resctrl(E) cdsp_loader(E) ssc_interact(E) oplus_bsp_sensor_feedback(E) bwmon(E) dispcc_sm6115(E) qcom_ramdump(E) qfprom_sys(E) eud(E) charger_ulog_glink(E) altmode_glink(E) rpm_master_stat(E) dispcc_khaje(E) memlat(E) boot_stats(E) pmic_glink_debug(E) core_hang_detect(E) qti_battery_debug(E) pmic_glink(E) msm_memshare(E) debugcc_khaje(E) glink_pkt(E) heap_mem_ext_v01(E) smp2p_sleepstate(E) cdsprm(E) msm_gpi(E) gpucc_khaje(E) oplus_bsp_proactive_compact(E) Line 22842: 10-14 22:03:58.475684 175 175 E [269631.931537]qcom_smp2p soc: qcom,smp2p-adsp: 2:sleepstate_see: status:ffffffff sensor_type:0 ap_stat:0
最新发布
10-18
<think>嗯,用户现在想理解ADSP crashADSP ramdump的区别,而且是在车载音频开发的背景下。之前已经用大白话解释过ramdump的概念,现在需要更聚焦在ADSP这个特定场景。用户提供的站内引用都是关于高通平台的双系统开发,特别是QNX+Android架构下的ADSP问题。 用户可能是个车载系统工程师,正在调试音频相关的崩溃问题。从ta追问的精确度来看,应该是有实际调试经验的技术人员,不是完全的小白。ta需要明确区分两个易混淆的概念:crash是故障事件本身,ramdump是事后分析手段。这个区分对实际排障流程很重要——工程师得先确认crash发生了,才能去获取ramdump。 引用[1]提到ADSP crash时用两种方式dump内存,正好佐证这个关系。引用[3]展示的crash工具命令行则说明ramdump需要特定解析工具。有趣的是引用[2]特别强调QNX的ramdumpLA方案不同,暗示用户要注意平台差异——不过当前问题不需要展开这点。 需要避免把问题复杂化。核心逻辑应该是:crash是“系统猝死”,ramdump是“尸检报告”。ADSP作为专用处理器,它的crash会影响整个音频子系统,而dump出来的内存镜像包含ADSP专属的寄存器状态、音频流水线数据等,这点要区别于普通应用崩溃。 用户可能隐含的深层需求是如何获取分析这些dump。虽然ta没直接问,但最后生成的相关问题里应该包含这类实操方向,比如“如何触发ADSP ramdump”或“分析ADSP dump的特殊工具”。不过当前回复保持概念区分即可,补充的实际案例用高通平台的crash命令示例足够有说服力。 对了,数学公式部分虽然用户没提,但保持LaTeX规范总是好的。不过这个回答里应该用不到复杂公式,顶多用$ADSP$表示芯片名称时加个格式?</think>理解ADSP CrashADSP Ramdump的区别,可以用一个简单的比喻: 1. **ADSP Crash(崩溃)** ➤ **相当于ADSP芯片“突然晕倒”或“停止工作”**。 - 当ADSP(音频数字信号处理器)运行时遇到严重错误(如件缺陷、件冲突、内存溢出),它会立即停止所有工作。 - 表现:**音频功能失效**(如车载音响无声、通话中断)、系统日志报错(如`ADSP Fault Detected`)[^1][^2]。 - **本质:故障事件本身**。 2. **ADSP Ramdump(内存转储)** ➤ **相当于给“晕倒的ADSP”拍一张大脑快照**。 - 在ADSP崩溃瞬间,**自动将其内存中的全部数据(代码、变量、堆栈等)保存成文件**(如`DDRCS0_0.BIN`)[^1][^3]。 - 作用:工程师事后用工具(如`crash`命令)分析该文件,**定位崩溃原因**[^3][^4]。 - **本质:故障的“法医证据”**。 --- ### 关键区别总结 | **概念** | **ADSP Crash** | **ADSP Ramdump** | |----------------|---------------------------------|---------------------------------| | **是什么** | 故障事件(处理器停止工作) | 故障现场的数据快照(内存文件) | | **发生时机** | 错误触发时立即发生 | Crash后自动/手动触发保存 | | **内容** | 无实体(表现为功能中断) | 内存二进制文件(如`DDRCSx_x.BIN`) | | **用途** | 需通过日志/现象感知问题存在 | 用于分析崩溃根本原因[^3][^4] | --- ### 实际案例(高通平台) 当QNX+Android车载系统的ADSP崩溃时: 1. **Crash发生**:音频服务停止,系统记录`ADSP subsystem failure`[^1][^2]。 2. **Ramdump生成**:自动保存内存文件(如`DDRCS0_0.BIN@0x80000000`)到存储区[^1][^3]。 3. **分析工具**:用`crash`工具加载文件,结合内核符号(`vmlinux`)分析崩溃点: ```bash crash vmlinux --kaslr=0x5d8800000 DDRCS0_0.BIN@0x80000000... ``` 输出可能定位到具体代码行(如`fast_smmu_map_page drivers/iommu/dma-mapping-fast.c:355`)[^4]。 --- ### 附:Ramdump分析流程 ```mermaid graph LR A[ADSP Crash发生] --> B{触发Ramdump} B -->|自动保存| C[内存文件 DDRCSx_x.BIN] C --> D[工程师用crash工具解析] D --> E[定位崩溃代码/数据] E --> F[修复Bug] ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霁之鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值