Android11.0(R) MTK6765 TP 驱动移植调试排错过程

简介: Android11.0(R) MTK6765 TP 驱动移植调试排错过程

本文基于 Q 版本 TP 正常情况下平行移植到 R 版本中,只是记录移植过程中遇到的坑。


具体 TP 驱动框架详细介绍可参考附录文章。


TP 驱动代码路径位于


*R\alps\kernel-4.19\drivers\input\touchscreen*


相比较 10.0 而言,10 的 kernel 版本用的是 kernel-4.9,所以之前的代码路径在


*Q\alps\kernel-4.9\drivers\input\touchscreen*


如何知道项目使用的 kernel 版本,在项目 ProjectConfig.mk 中


LINUX_KERNEL_VERSION = kernel-4.19 决定


当我打开 touchscreen 文件时有点懵圈,R 版本中竟然没有 mediatek 文件夹??


s9SImj.png


难道一开始 Q 版本中也没有这个文件夹,抱着好奇我去查了下 git log 发现并不是的,一开始版本库中的


源码就是带这个文件夹的。马塞卡,难道这份 R 版本的源码不是完整的还是 MTK 并没有调试好的??


抱着试一试的想法,将 mediatek 整个文件夹拷贝到 R 版本中,然后修改


R\alps\kernel-4.19\drivers\input\touchscreen\Makefile


obj-$(CONFIG_TOUCHSCREEN_MTK_GT911) += mediatek/


编译 mediatek 文件夹,接下来坑爹的各种编译报错就开始了。


首先肯定的是 mediatek 在 Q 中编译是完全没问题的


mtk_tpd.c中的错误


mtk_tpd.c:154:3: error: implicit declaration of function 'pinctrl_select_state' [-Werror,-Wimplicit-function-declaration]
                pinctrl_select_state(pinctrl1, eint_as_int);
mtk_tpd.c:164:4: error: implicit declaration of function 'pinctrl_select_state' [-Werror,-Wimplicit-function-declaration]
                        pinctrl_select_state(pinctrl1, eint_output1);
mtk_tpd.c:189:11: error: incompatible integer to pointer conversion assigning to 'struct pinctrl *' from 'int' [-Werror,-Wint-conversion]
        pinctrl1 = devm_pinctrl_get(&pdev->dev);
mtk_tpd.c:195:15: error: incompatible integer to pointer conversion assigning to 'struct pinctrl_state *' from 'int' [-Werror,-Wint-conversion]
        pins_default = pinctrl_lookup_state(pinctrl1, "default");

一开始以为是 struct 类型和指针 * 的定义错误,将 mtk_tpd.c 中对应 pinctrl_state 的 * 去掉后来发现问题更多了,


后来发现是 调用了未声明的函数,也就是说编译器不知道这个函数的返回值和参数列表,估计和 kernel 版本有关系吧。


解决办法在 kernel-4.19 中 搜索发现定义 pinctrl_select_state 函数的地方

./include/linux/pinctrl/consumer.h:extern struct pinctrl_state * __must_check pinctrl_lookup_state(
./include/linux/pinctrl/consumer.h:static inline struct pinctrl_state * __must_check pinctrl_lookup_state(
./include/linux/pinctrl/consumer.h: s = pinctrl_lookup_state(p, name);
./include/linux/pinctrl/consumer.h: s = pinctrl_lookup_state(p, name);

R\alps\kernel-4.19\drivers\input\touchscreen\mediatek\tpd.h 中引用头文件

#include <linux/pinctrl/consumer.h>

gt9xx_driver.c中的错误

gt9xx_driver.c:2215:22: error: variable has incomplete type 'struct sched_param'
                struct sched_param param = { .sched_priority = 4 };
kernel-4.19/include/linux/sched.h:53:8: note: forward declaration of 'struct sched_param'
struct sched_param;
       ^
1 error generated.

这问题一开始也不知道怎么解决,后来突然想到去 kernel-4.14 中同级目录下找找看,还真的被我找到了。

低版本的 kernel 引用 #include <uapi/linux/sched/types.h>


解决办法修改 R\alps\kernel-4.19\drivers\input\touchscreen\mediatek\GT911\include\tpd_gt9xx_common.h

#include <uapi/linux/sched/types.h> //for kernel-4.14
//#include <linux/sched.h> // for kernel-4.9


注释 gt9xx_driver.c 中相关 get_boot_mode() 调用


至此编译就 ok 了,再将其它的 dts 、dws config 相关的修改移植过来就好。


MTK平台TP驱动框架解析

基于MTK的TP驱动分析

MTK MT8163 7.0 TP驱动简单移植

MTK 平台TP调试遇坑

目录
相关文章
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
89 0
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(五):基于GPIO、LED子系统的LED驱动
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,使用GPIO和LED子系统来实现LED驱动的教程,包括了DTS设备树配置、驱动源码编写以及如何在用户空间控制LED的亮度和开关。
102 0
基于Amlogic 安卓9.0, 驱动简说(五):基于GPIO、LED子系统的LED驱动
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍了如何在基于Amlogic T972的Android 9.0系统上使用Platform平台驱动框架和设备树(DTS),实现设备与驱动的分离,并通过静态枚举在设备树中描述设备,自动触发驱动程序的加载和设备创建。
50 0
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
如何使用Amlogic T972安卓9.0系统上的misc框架来简化驱动程序开发,通过misc框架自动分配设备号并创建设备文件,从而减少代码量并避免设备号冲突。
45 0
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
|
3月前
|
Android开发 C语言
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,通过自动分配设备号和自动创建设备节点文件的方式,开发字符设备驱动程序的教程。
56 0
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
|
3月前
|
自然语言处理 Shell Linux
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文是关于在Amlogic安卓9.0平台上创建字符设备驱动的教程,详细介绍了驱动程序的编写、编译、部署和测试过程,并提供了完整的源码和应用层调用示例。
82 0
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
|
3月前
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
49 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
3月前
|
Android开发
不写一行代码(二):实现安卓基于PWM的LED设备驱动
本文介绍了在Android系统中不编写任何代码,通过设备树配置和内核支持的通用PWM LED驱动来实现基于PWM的LED设备驱动,并通过测试命令调整LED亮度级别。
45 0
不写一行代码(二):实现安卓基于PWM的LED设备驱动
|
3月前
|
Linux Android开发 C语言
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
本文通过实践操作,展示了在Android系统中不编写任何代码,利用设备树(DTS)配置和内核支持的通用GPIO LED驱动来控制LED设备,并进一步通过C语言编写NDK测试APP来实现LED的闪烁效果。
146 0
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
|
3月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
194 0
安卓系统调试与优化:(一)bootchart 的配置和使用