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

2024-08-22 06:18

本文主要是介绍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调试遇坑

这篇关于Android11.0(R) MTK6765 TP 驱动移植调试排错过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095476

相关文章

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ