1.调试QMI8658
参考demo,添加QMI8610相关内容
当前驱动路径位于:bsp/modules/input/misc/qmi8610/qmi8610.c
编译使用make sockoimage
用fastboot烧录
1.确定驱动被正常加载
代码添加之后,首先确定有没有进入当前驱动文件
dmesg |grep QmiImu_i2c_probe
因为传感器型号不一样,需要参考demo代码,移植相关代码过去,这个过程不描述了,先保证编译不报错。
2.寄存器地址修改
主要是能正常读取设备的ID,以及确定传感器获取的值在哪个位置
代码里面有相关的测试节点
对应:/sys/devices/virtual/input/input6
通过测试接口,读取设备ID以及传感器的值,确定i2c底层接口正常
3.看传感器状态
进测试模式,或者使用传感器APP
看数据是不是正常变化的
调试遇到两个问题
1.数值在乱飘,特别是Y轴数据在乱跑
这个查明,返回的数据,需要状态寄存器是可读的时候,不能随便上传
2.X和Y轴不对应
这个需要在驱动层做一下转换
2.气压传感器
1.判断驱动被正常加载
2.查看内核数据是否正常
3.移植的时候,遇到无法开机的问题
查看日志文件
11-03 13:37:57.879 1688 1688 D pressure-qmp6988: input path : /sys/class/input/input7/name
11-03 13:37:57.879 1688 1688 D pressure-qmp6988: name: gyroscope
11-03 13:37:57.879 1688 1688 D pressure-qmp6988: input path : /sys/class/input/input5/name
11-03 13:37:57.880 1688 1688 D pressure-qmp6988: name: compass
11-03 13:37:57.880 1688 1688 D pressure-qmp6988: input path : /sys/class/input/input3/name
11-03 13:37:57.880 1688 1688 D pressure-qmp6988: name: sprdphone Headset Ja
11-03 13:37:57.880 1688 1688 F libc : FORTIFY: strlen: detected read past end of buffer
11-03 13:37:57.880 1688 1688 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 1688 (android.hardwar), pid 1688 (android.hardwar)
从logcat来看,这里出现了问题
通过shell读取input3的name
发现少了2个字符,初步判断是数组越界了
找到对应代码
vendor/sprd/modules/sensors/libsensorclassic/press/Press_qmp6988.cpp
4.权限问题
遇到内核层有数据,但是应用层没拿到数据的问题
判断是权限问题,找到对应位置
目前应用层的权限是只读
给权限chmod 777 *
数据能正常上传
去代码里面修改设备权限问题
bsp/modules/input/misc/qmp6988/qmp6988.c
static DEVICE_ATTR(init, 0666, show_init_value, NULL);
static DEVICE_ATTR(chipinfo, 0666, show_chipinfo_value, NULL);
static DEVICE_ATTR(sensordata, 0666, show_sensordata_value, NULL);
static DEVICE_ATTR(press, 0666, show_press_value, NULL);
static DEVICE_ATTR(trace, 0666, show_trace_value, store_trace_value);
static DEVICE_ATTR(selftest, 0666, show_selftest_value, NULL);
static DEVICE_ATTR(dumpinfo, 0666, show_dumpinfo_value, NULL);
static DEVICE_ATTR(calidata, 0666, show_calidata_value, NULL);
static DEVICE_ATTR(enable, 0666, show_enable_value, store_enable_value);
static DEVICE_ATTR(delay, 0666, show_delay_value, store_delay_value);
static DEVICE_ATTR(install, 0666, qmp6988_status_show, NULL);
static DEVICE_ATTR(value, 0666, show_press_value, NULL);
static DEVICE_ATTR(control, 0666, qmp6988_control_show, qmp6988_control_store);
上面的内容,直接编译会报错,需要修改内核文件
bsp/kernel/kernel4.14/include/linux/kernel.h
还要修改
bsp/kernel/kernel4.14/fs/sysfs/group.c
烧录之后正常