新手避坑指南:在RV1126开发板上搞定JD9366触摸屏驱动的完整流程
2026/4/17 7:29:22 网站建设 项目流程

RV1126开发板JD9366触摸屏驱动移植实战:从零开始的避坑手册

第一次拿到RV1126开发板和JD9366触摸屏时,我对着满屏的内核源码和陌生的术语完全不知所措。网上能找到的教程大多语焉不详,充斥着"根据实际情况调整"这类让人抓狂的模糊描述。经过三天痛苦的摸索和无数次编译失败后,我终于总结出了这份真正面向新手的避坑指南。本文将用最直白的语言,拆解那些老手们觉得"理所当然"的细节,带你一步步点亮触摸屏。

1. 环境准备与源码获取

在开始移植前,确保你的开发环境已经正确搭建。RV1126的开发环境有些特殊要求,这也是第一个容易踩坑的地方。

开发环境配置清单

  • Ubuntu 18.04 LTS(官方推荐版本,其他版本可能遇到兼容性问题)
  • 交叉编译工具链:gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf
  • 内核源码版本:RV1126_Linux_SDK_V1.0.0(不同SDK版本驱动接口可能有差异)

获取官方SDK后,解压时要注意路径不要包含中文或空格。我遇到过因为路径中有空格导致编译脚本报错的诡异问题。

tar -xvf RV1126_Linux_SDK_V1.0.0.tar.gz -C ~/workspace/

JD9366驱动源码通常有三个来源:

  1. 屏幕厂商提供的专用驱动
  2. 社区维护的通用驱动
  3. 内核自带的类似驱动(如goodix驱动)

新手建议优先使用厂商提供的驱动,虽然可能需要根据内核版本做些调整,但比从头移植要简单得多。

2. 驱动文件放置与路径陷阱

拿到驱动源码后,第一个挑战是如何把它放到正确的位置。内核源码树有严格的目录结构规范,放错位置会导致后续配置无法找到驱动。

正确的文件放置步骤

  1. 进入内核驱动目录:

    cd ~/workspace/RV1126_Linux_SDK/kernel/drivers/input/touchscreen
  2. 创建专用目录(建议以芯片型号命名):

    mkdir jd9366 cp ~/Downloads/jd9366_driver/* ./jd9366/

这里有个新手容易忽略的关键点:目录名必须与Kconfig中的配置保持一致。我曾在目录名用了"jd9366_touch"而在Kconfig里写了"jd9366",结果编译时死活找不到驱动。

检查驱动源码中的Kconfig文件,确认有以下内容:

config TOUCHSCREEN_JD9366 tristate "JD9366 Touchscreen Driver" depends on I2C help Say Y here if you have JD9366 touch controller.

3. Makefile与Kconfig的隐藏规则

修改Makefile和Kconfig是驱动移植的核心步骤,但官方文档往往一笔带过,留下无数坑给新手。

Makefile修改示例

obj-$(CONFIG_TOUCHSCREEN_JD9366) += jd9366/

注意这里的+=操作符和结尾的斜杠。我曾错误地使用=和省略斜杠,导致编译系统无法正确识别子目录。

Kconfig的修改更需要小心:

  1. 打开touchscreen/Kconfig文件
  2. 在文件末尾添加:
    source "drivers/input/touchscreen/jd9366/Kconfig"

常见错误排查

  • 如果menuconfig中看不到JD9366选项,检查:
    • Kconfig文件路径是否正确
    • source语句是否拼写错误
    • 是否在正确的Kconfig文件中添加了source语句

4. 内核配置的玄学问题

修改defconfig是另一个充满陷阱的环节。RV1126的SDK提供了多种配置方式,新手很容易混淆。

推荐的操作流程

  1. 首先备份原始配置:

    cp kernel/arch/arm/configs/rv1126_defconfig rv1126_defconfig.bak
  2. 使用menuconfig界面配置:

    make ARCH=arm rv1126_defconfig make ARCH=arm menuconfig

在menuconfig界面中:

  1. 进入 Device Drivers → Input device support → Touchscreens
  2. 找到JD9366驱动并选择为<M>(模块)或<*>(内置)
  3. 保存退出

关键提示

保存时确认修改的是当前项目的.config文件,而不是全局配置。我曾因为误操作导致所有配置丢失,不得不重新开始。

5. DTS配置的硬件对接实战

设备树(DTS)配置是驱动能否正常工作的关键,也是错误最隐蔽的部分。JD9366通常通过I2C接口连接,需要正确配置引脚和中断。

典型的DTS配置示例

&i2c1 { status = "okay"; clock-frequency = <400000>; jd9366: touchscreen@5d { compatible = "sitronix,jd9366"; reg = <0x5d>; interrupt-parent = <&gpio2>; interrupts = <RK_PB0 IRQ_TYPE_LEVEL_LOW>; reset-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_LOW>; irq-gpios = <&gpio2 RK_PB0 GPIO_ACTIVE_LOW>; status = "okay"; }; };

必须检查的细节

  1. I2C总线号(i2c1)是否与实际硬件连接一致
  2. 从机地址(0x5d)是否与屏幕规格书一致
  3. GPIO引脚编号是否正确对应开发板原理图
  4. 中断触发类型(LEVEL_LOW)是否与驱动代码中一致

我曾因为中断触发类型配置为EDGE_FALLING而驱动代码中检测LEVEL_LOW,导致触摸完全无响应,调试了整整一天。

6. 编译与调试技巧

完成所有配置后,就是激动人心的编译时刻了。但别高兴太早,这里还有几个坑等着你。

推荐的编译命令

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

常见编译错误及解决方案

错误类型可能原因解决方法
未定义引用驱动依赖未配置检查CONFIG_I2C等依赖项是否启用
文件找不到路径错误检查Makefile中的路径是否正确
类型不匹配内核API变更对比内核版本与驱动兼容性

编译成功后,通过以下命令检查驱动是否正常加载:

dmesg | grep jd9366 lsmod | grep jd9366

7. 触摸校准与性能优化

驱动加载成功只是第一步,要获得良好的触摸体验还需要校准和优化。

校准步骤

  1. 安装校准工具:

    apt-get install xinput-calibrator
  2. 运行校准:

    xinput_calibrator --device "JD9366 Touchscreen"
  3. 将校准参数写入启动脚本:

    echo "xinput set-prop 'JD9366 Touchscreen' 'Calibration' '100, 2000, 200, 2000'" >> /etc/rc.local

性能优化参数

# 调整采样率 echo 100 > /sys/module/jd9366/parameters/sample_rate # 开启滤波降噪 echo 1 > /sys/module/jd9366/parameters/noise_filter

8. 疑难杂症解决方案

即使按照上述步骤操作,仍可能遇到各种奇怪问题。以下是我遇到过的典型问题及解决方法:

触摸无反应

  1. 检查电源:用万用表测量触摸屏供电电压(通常是3.3V)
  2. 检查I2C通信:i2cdetect -y 1查看设备是否出现在总线
  3. 检查中断:cat /proc/interrupts查看中断计数是否增加

触摸漂移

  1. 重新校准
  2. 检查是否有电磁干扰(如靠近电源适配器)
  3. 尝试降低采样率

驱动加载失败

  1. 检查内核日志:dmesg | grep -i error
  2. 确认驱动版本与内核匹配
  3. 检查依赖模块是否加载(如i2c-core)

移植完JD9366驱动后,我最大的体会是:嵌入式开发中,魔鬼真的藏在细节里。那些教程中一笔带过的"注意对应"、"根据实际情况调整",往往就是新手卡壳的关键所在。现在当我在终端看到"[jd9366] Touchscreen initialized"的日志信息时,那种成就感是无可替代的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询