本帖最后由 linux-01 于 2023-6-7 16:19 编辑
一、tslib tslib是一个开源的触控库,其目的是为上层软件提供稳定去抖的统一接口。
二、构建系统 在使用tslib之前,我们需要先构建一个系统,这个系统需要有以下几个特点: - 实现了framebuffer。(由于tslib尚未支持drm,所以需要确保dev下产生了fb0节点)
- 可以通过配置将触控输入作为input子系统来使用。
紧接着需要准备如下的硬件设备: - 一套MPSOC系列的整板。
- 1.8V CEP-GPIO子卡。
- 7寸液晶屏以及排线。(使用LVDS)
博客演示使用了4EV04A的组合,硬件组合如下:
显示屏背部开关全部拨ON,排线接在LVDS口。
接下来则是移植所需的操作系统,首先找到教程的3-2部分的01_soc_base_4ev.rar压缩包,找到54_mpsoc_ugui文件夹,其中有三个文件夹,我们只需要zu_prj这个文件夹。将其拷贝到合适的编译用的路径。
接下来需要导出xsa文件,再使用Vitis生成boot的三个文件以及设备树,此处不再赘述步骤,若不会这些操作请参考3-4-1Linux入门的第八课。 拷贝一份当前板子的完整设备树来做修改,通常位于3-4-1Linux入门的第八课demo的zu_dts中。一共需要修改两处位置: 添加对触控以及显示支持的设备树,touch.dtsi会在文末的参考资料包给出。 file:///C:/Users/Linux/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png
修改内存范围,目的是增加cma空间。 file:///C:/Users/Linux/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png
接下来是将各个文件放置到提供的专用开发工具包内,若不清楚有哪些文件,应该放到哪,请仔细阅读3-4-1Linux入门的第八课。
经过编译和制卡,我们就获得了一张包含了底层驱动的系统卡。在移植之前可以先用sd卡启动看一下效果,将sd卡插入板卡,核心板模式开关切换到sd卡启动后上电。可能出现的问题和解决方法如下: ①内核启动报错,与pcie相关:检查vivado内pcie部分设置,对照3-4-1Linux入门的第八课demo的zu_prj内ip配置,很可能是root和endpoint模式的区分。 ②其他原因导致内核启动卡死或部分外设异常:检查vivado内各个IO以及时钟,注意将所有IO改为CMOS并把速度改为fast。 ③内核启动报错与of_i2c有关:修改设备树touch.dtsi内的"goodix,gt9xx"字段前关键词,若原来为tible需修改为compatible。 若无以上问题,且LCD屏幕显示正常,出现了/dev/input/event0节点则可以进行下一步。
三、交叉编译tslib
进入下载界面后,找到tslib-1.22.tar.gz的文件下载。 file:///C:/Users/Linux/AppData/Local/Temp/msohtmlclip1/01/clip_image017.png
下载好把压缩包拷贝进虚拟机系统内,请务必使用米联客提供的虚拟机系统,如果可以自行解决环境问题可自己搭建。通常放在home/用户名/下开发,不会遇到权限问题。
使用tar zxvf tslib-1.22.tar.gz解压压缩包。输入cd tslib-1.22进入刚解压的文件夹内。接下来就是交叉编译环节: sudo apt-get update 更新软件源 sudo apt-get install libtool pkg-config 安装所需编译用工具 ./autogen.sh 自动配置 ./configure --host=aarch64-linux-gnu --prefix=/home/uisrc/mpsoc_tslib 配置编译工具以及安装路径 make 编译 make install 将编译好的文件安装到设定位置
然后就能在/home/uisrc/mpsoc_tslib找到一个交叉编译好的tslib。
将上一步制作好的sd卡接入虚拟机内,进行库的拷贝。bin和etc需要拷贝到sd卡文件系统的根目录对应文件夹,include、lib和share则拷贝到sd卡文件系统的/usr下对应的文件夹。在mpsoc_tslib内打开终端,运行以下命令: sudo cp -r ./bin/ /media/uisrc/rootfs sudo cp -r ./etc/ /media/uisrc/rootfs sudo cp -r ./include/ /media/uisrc/rootfs/usr/ sudo cp -r ./lib/ /media/uisrc/rootfs/usr/ sudo cp -r ./share/ /media/uisrc/rootfs/usr/
拷贝好后,进入sd卡文件系统的/etc/下,找到profile这个文件,在旁白空白处右击选择最后一个选项,在此打开终端。 file:///C:/Users/Linux/AppData/Local/Temp/msohtmlclip1/01/clip_image024.png
通过sudo vim profile给文件添加一些变量(vim的使用方法请自行百度): export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_CALIBFILE=/etc/pointercal export TSLIB_CONFFILE=/etc/ts.conf export TSLIB_PLUGINDIR=/usr/lib/ts export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 修改效果如下,记得退出保存: 退出后使用sync来同步一下磁盘,确保文件均写入硬盘内。
四、测试 将卡插入板卡,核心板启动模式开关设置为sd卡启动,上电后可以看到液晶屏上的登录界面:
串口登录后,输入su回车,紧接着输入密码进入root用户模式。输入命令ts_test_mt进行测试,此时液晶屏上出现测试界面:
界面上方有三个按钮,分别是光标模式(默认),绘图模式和退出,最多可支持5点触控:
附上本博客产生的各种工程文件(全部基于2020.2),4EV04A专用其他型号可参考: tslib源码以及设备树请看下方附件。 |