996 log抓取过程

1. log抓取方法


*#*#996996#*#*  开始抓取

*#*#996996#*#*  结束抓取

2. log文件和存储

存储位置: sdcard/diag_logs

文件:
1. 81cf12e6-b266-eefa-cd8e-8676e8ff3684.qdb
2. diag_log_20220329_1558111648540691565.qmdl2
3. diag_qdss_log_mpss_adsp_audio_pd_20220329_1558231648540703019.qdss   
4. diag_qsr4_guid_list.xml

3. log抓取过程实现

1. 电话触发,发送广播
2. catchLog app 接收广播,调用SystemService.start("diag_mdlog_start"); & SystemService.start("diag_mdlog_stop");
3. SystemService.java 中处理对应的命令: SystemProperties.set("ctl.start", name); -> native_set(key, val); 此处key就是ctl.start, value就是 diag_mdlog_start or diag_mdlog_stop

此处在本地尝试

adb shell setprop ctl.start diag_mdlog_start
adb shell setprop ctl.start diag_mdlog_stop

也可以抓取 996 log

设置diag_mdlog_start或者diag_mdlog_stop之后会打开或者关闭这个service。


service diag_mdlog_start /vendor/bin/diag_mdlog -q 0x2006 -j 1 -u -c -i -n 50
    class late_start
    user shell
    group system oem_2901 sdcard_rw sdcard_r media_rw
    disabled
    oneshot

service diag_mdlog_stop /vendor/bin/diag_mdlog -k (k就是kill)
    class late_start
    user shell
    group system oem_2901 sdcard_rw sdcard_r media_rw
    disabled
    oneshot  

service打开就是调用vendor/qcom/proprietary/diag/mdlog/diag_mdlog.c 的main函数

vendor/bin/diag_mdlog 这个bin文件调用了libdiag,其所有的实现都在/vendor/qcom/proprietary/diag/src/中。
vendor/qcom/proprietary/diag/src/diag_lsm_qdss.c

diag_mdlog.c 的main函数 会打开很多线程,每个线程都是死循环。

qdss_read_thread_mdm  这个线程一直取数据,一直从设备节点 /dev/mhi_qdss 取数据,然后写到buffer中。
qdss_write_thread_mdm 这个线程一直写数据,一直从buffer取出去,调用write_to_qdss_file_mdm写入数据。

/dev/mhi_qdss 这个设备节点在kernel里面会写入数据。

总结:

综上,抓取996 log其实就是用户在电话中输入暗码,电话匹配到暗码后发广播。Catch log app收到广播设置prop,prop通过JNI设置到native中。native拿到prop之后就会打开diag_mdlog service,这个service打开时创建了好几个线程,其中一个线程就会循环从dev/mhi_qdss设备节点取数据,另一个线程把数据读出并存进文件中。kenerl中会循环把音频数据写入设备节点dev/mhi_qdss中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值