概述
高通平台adsp sensor的驱动log需要使用QXDM抓取,sensor init是sensor初始化的log信息,这时候QXDM还没有识别到diag口,无法直接获取。
高通支持如下两种获取adsp侧sensor init log的方式。
第一种方式是:通过adb名利重启sensors
a. adb shell stop sensors
b. adb shell “echo ‘related’ > /sys/bus/msm_subsys/devices/subsys1/restart_level”
c. adb shell “echo ‘restart’ >
/sys/kernel/debug/msm_subsys/adsp”
d. adb shell start sensors
PS : 这边有两个注意事项:
1.需要确认好 /sys/bus/msm_subsys/devices/subsys1 是指向 adsp还是其他,具体方法如下cat /sys/bus/msm_subsys/devices/subsys1/name 返回值是否为adsp,如果不是请cat其他subsys*
2.请检查/sys/kernel/debug/msm_subsys/adsp是否存在。高通最近在subsystem_restart.c中将msm_subsys/adsp节点取消了,为了解决该问题,需要导入如下所示的path。
diff --git a/drivers/soc/qcom/subsystem_restart.c b/drivers/soc/qcom/subsystem_restart.c
old mode 100644
new mode 100755
index ea94456..27eb26e
--- a/drivers/soc/qcom/subsystem_restart.c
+++ b/drivers/soc/qcom/subsystem_restart.c
@@ -36,7 +36,7 @@
#include <soc/qcom/subsystem_notif.h>
#include <soc/qcom/sysmon.h>
#include <trace/events/trace_msm_pil_event.h>
-
+#include <linux/debugfs.h>
#include <asm/current.h>
#include "peripheral-loader.h"
@@ -178,6 +178,10 @@ struct subsys_device {
enum crash_status crashed;
int notif_state;
struct list_head list;
+#ifdef CONFIG_DEBUG_FS
+ struct dentry *dentry;
+#endif
+
};
static struct subsys_device *to_subsys(struct device *d)
@@ -356,11 +360,11 @@ static struct device_attribute subsys_attrs[] = {
__ATTR_NULL,
};
-struct bus_type subsys_bus_type = {
+static struct bus_type subsys_bus_type = {
.name = "msm_subsys",
.dev_attrs = subsys_attrs,
};
-EXPORT_SYMBOL(subsys_bus_type);
+
static DEFINE_IDA(subsys_ida);
@@ -1229,6 +1233,87 @@ void notify_proxy_unvote(struct device *device)
notify_each_subsys_device(&dev, 1, SUBSYS_PROXY_UNVOTE, NULL);
}
+#ifdef CONFIG_DEBUG_FS
+static ssize_t subsys_debugfs_read(struct file *filp, char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ int r;
+ char buf[40];
+ struct subsys_device *subsys = filp->private_data;
+
+ r = snprintf(buf, sizeof(buf), "%dn", subsys->count);
+ return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+}
+
+static ssize_t subsys_debugfs_write(struct file *filp,
+ const char __user *ubuf, size_t cnt, loff_t *ppos)
+{
+ struct subsys_device *subsys = filp->private_data;
+ char buf[10];
+ char *cmp;
+
+ cnt = min(cnt, sizeof(buf) - 1);
+ if (copy_from_user(&buf, ubuf, cnt))
+ return -EFAULT;
+ buf[cnt] = '