1129|3

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

记一次Luckfox幸狐 RV1106 Linux 开发板移植gt911触摸驱动过程中的踩坑排查记录 [复制链接]

 

最近为Luckfox Pico pro max 开发板移植gt911触摸驱动,踩了个不大不小的坑,发现基本没人提及这块,分享出来大家参考

拉取官方SDK不说了,make ARCH=arm menuconfig搜索GT911 ,结果只有一个

 

选中以后覆盖配置,修改设备树不提,编译时成功踩坑,编译一直不通过,提示:
drivers/input/touchscreen/gt9xx/gt9xx.c: In function 'goodix_ts_probe':
drivers/input/touchscreen/gt9xx/gt9xx.c:2807:72: error: passing argument 4 of 'proc_create' from incompatible pointer type [-Werror=incompatible-pointer-types]
  gt91xx_config_proc = proc_create(GT91XX_CONFIG_PROC_FILE, 0664, NULL, &config_proc_ops);

                                                                        ^~~~~~~~~~~~~~~~
In file included from drivers/input/touchscreen/gt9xx/gt9xx.h:28,
                 from drivers/input/touchscreen/gt9xx/gt9xx.c:51:
./include/linux/proc_fs.h:109:24: note: expected 'const struct proc_ops *' but argument is of type 'const struct file_operations *'
 struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct proc_ops *proc_ops);

该错误表示在drivers/input/touchscreen/gt9xx/gt9xx.c 文件的 goodix_ts_probe 函数中,使用 proc_create 函数时,第四个参数的指针类型不兼容。

那就查吧 ,打开gt9xx.c一行行跟代码:

2807行:

gt91xx_config_proc = proc_create(GT91XX_CONFIG_PROC_FILE, 0664, NULL, &config_proc_ops);

根据参数4 &config_proc_ops  定位到定义它的地方是95行,代码如下

static const struct file_operations config_proc_ops = {
    .owner = THIS_MODULE,
    .read = gt91xx_config_read_proc,
    .write = gt91xx_config_write_proc,
};

到这就出问题了,这里定义的 config_proc_ops 是 file_operations类型,而proc_create 函数要求的参数4的指针类型是 proc_ops,所以报错。

这就奇怪了,按理说幸狐官方SDK里的gt9xx.c这个文件肯定是来自goodix官方的,不会产生这种错误,看了下文件开始的声明也确实是官方2.2版的,不管那么多,先去官方找一份2.2的文件进行比对吧。

https://github.com/goodix/goodix_gt9xx_public  找到了该文件,发现是最新版本2.81。

再次搜索config_proc_ops,在1143行处发现代码已经变为:

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0))
static const struct proc_ops config_proc_ops = {
	.proc_read = gtp_config_read_proc,
	.proc_write = gtp_config_write_proc,
};
#else
static const struct file_operations config_proc_ops = {
	.read = gtp_config_read_proc,
	.write = gtp_config_write_proc,
};

增加了个Linux内核版本的判断,如果内核大于等于5.6,就使用proc_ops类型指针,如果小于,就使用file_operations。

我的Ubuntu内核是6.5 ,因为幸狐官方SDK引用了2.2版本的gt9xx驱动里没有这个内核判断,自然编译报错,猜测是幸狐的研发用的是5.6版本以下内核的Linux,所以没有发现这个问题。

那剩下的就好办了,用GitHub里2.81版的驱动替换幸狐官方sdk的2.2版驱动即可。

以上过程供大家移植gt911驱动时参考。 

 

最新回复

能解决这种问题,说明技术还是很牛的!   详情 回复 发表于 2024-7-31 18:23
点赞 关注
 
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

测是幸狐的研发用的是5.6版本以下内核的Linux,所以没有发现这个问题。

那剩下的就好办了,用GitHub里2.81版的驱动替换幸狐官方sdk的2.2版驱动即可。

以上过程供大家移植gt911驱动时参考。 

点评

nmg
感谢分享  详情 回复 发表于 2024-7-31 16:08
 
 
 

回复

5263

帖子

239

TA的资源

管理员

板凳
 
luominxdy 发表于 2024-7-30 08:57 测是幸狐的研发用的是5.6版本以下内核的Linux,所以没有发现这个问题。 那剩下的就好办了,用GitHub里2. ...

感谢分享

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

7244

帖子

2

TA的资源

版主

4
 

能解决这种问题,说明技术还是很牛的!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表