添加驱动
4 Dec 2024
Read time: 3 minute(s)
本节以添加 GT911 电容屏驱动为例,介绍外设驱动的添加方法。
添加外设
-
获取源码
从 https://github.com/RiceChen/gt911 下载 GT911 的 RT-Thread 驱动源码位,并将其解压至 bsp/peripheral/touch 目录下。
源码结构如下:touch$ tree . ├── gt911 │ ├── inc │ │ └── gt911.h │ ├── Kconfig │ └── src │ └── gt911.c └── SConscript
-
修改 SConscript 文件在bsp/peripheral/touch/SConscript 文件中,添加对 GT911 驱动源码的引用,具体操作内容如下:
Import('AIC_ROOT') Import('PRJ_KERNEL') from building import * cwd = GetCurrentDir() src = Glob('*.c') CPPPATH = [] if GetDepend('AIC_TOUCH_PANEL_GT911'): CPPPATH.append(cwd + '/gt911/inc') src += Glob('gt911/src/*.c') group = DefineGroup('touch', src, depend = [''], CPPPATH = CPPPATH) Return('group')
如果后续需要添加其他 touch 的驱动,可参考 GT911 模板将其添加到 SConscript 文件中。
-
修改 pinmux.c文件根据原理图,在 target/<cpu>/<board>/pinmux.c 中添加 RST、INT、SCK 和 SDA 引脚的定义:
struct aic_pinmux aic_pinmux_config[] = { ... #ifdef AIC_USING_I2C3 {1, PIN_PULL_DIS, 3, "PA.8"}, // RST {1, PIN_PULL_DIS, 3, "PA.9"}, // INT {4, PIN_PULL_DIS, 3, "PA.10"}, // SCK {4, PIN_PULL_DIS, 3, "PA.11"}, // SDA #endif ... };
注:每个板卡的 pinmux.c都定义了各个端口的 GPIO 引脚及功能,新增接口前应检查。
根据原理图,GT911:-
使用 I2C3 接口 作为驱动。
-
除了 I2C 的 SCK 和 SDA 引脚 以外,还需要用到 RST 和 INT 引脚。
-
-
配置源码 Kconfig在驱动源码 Kconfig bsp/peripheral/touch/gt911/Kconfig 文件夹中,添加 GT911 驱动的配置选项。内容如下:
$ cat Kconfig menu "Gt911 touch panel options" config AIC_TOUCH_PANEL_GT911 bool "Using touch panel gt911" default n select AIC_I2C_DRV config AIC_TOUCH_PANEL_GT911_I2C_CHA string "gt911 using i2c channel index" default "i2c3" depends on AIC_TOUCH_PANEL_GT911 config AIC_TOUCH_PANEL_GT911_RST_PIN string "gt911 reset pin" default "PA.8" depends on AIC_TOUCH_PANEL_GT911 config AIC_TOUCH_PANEL_GT911_INT_PIN string "gt911 irq pin" default "PA.9" depends on AIC_TOUCH_PANEL_GT911 endmenu
-
添加外设驱动 Kconfig 的引用。在 bsp/peripheral/Kconfig 文件中,添加对驱动源码 Kconfig 路径的引用:
... #-------------------------------------------- # touch panel driver global option #-------------------------------------------- menu "Touch Panel Support" source "bsp/peripheral/touch/gt911/Kconfig" endmenu ...
-
编译
完成驱动添加和配置后,使用命令 scons --menuconfig 或 m ( OneStep 命令 ) 对 SDK 进行编译。
-
验证
烧写镜像,系统启动之后,通过 list_device 命令 查看设备节点是否已成功枚举,如下所示:
aic /> list_device device type ref count -------- -------------------- ---------- ... gt911 Touch Device 1 ...
如果列表中出现 gt911 设备,表示已成功添加该设备。