ATOM-RAY

  • 2024-07-29
  • 发表了主题帖: 记一次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驱动时参考。   

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:10
  • 好友:--
  • 主题:1
  • 回复:0

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言