Buildroot 移植 tslib 到 Jz2440

本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 tslib 触摸屏第三方软件库,方便在 Jz2440 使用触摸屏。

第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:

Target packages
	->Libraries
		->Hardware handling
			->[*] tslib

第 2 步:输入 make 继续编译 buildroot (注:buildroot 自动下载的 tslib 版本为 tslib-1.21.tar.xz),编译时出现了如下错误:
在这里插入图片描述
由上图可以看出,没有定义 EVIOCGPROP,解决方法参考:https://blog.csdn.net/wkd_007/article/details/90444753

(1) 在 buildroot 找到 tslib.h 这个文件,搜索结果如下图所示:
在这里插入图片描述
(2) 打开 tslib.h:

vim ./output/build/tslib-1.21/src/tslib.h

(3) 在 tslib.h 添加如下内容:

#define EVIOCGPROP(len)          _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */

如下图所示:
在这里插入图片描述
(4) 继续输入 make 命令重新编译,还是出现上面的错误,现在把 tslib 删掉,重新解压、编译,命令如下:

make tslib-dirclean   // 清除 tslib 相关的目录
make tslib-extract    // 解压 tslib 源码,不编译

解压完源码之后,重复 (2) (3) 步骤 修改 tslib.h,然后输入 make 命令重新编译,编译成功。

第 3 步:把 buildroot-2020.02.9/output/images 目录下的 rootfs.tar 拷贝到 nfs 网络文件系统,通过 nfs 方式挂载进行测试:

cp rootfs.tar ~/works/nfs/rootfs
cd ~/works/nfs/rootfs
tar xf rootfs.tar
rm -rf rootfs.tar

第 4 步:重启开发板,挂载新的文件系统,文件系统挂成功后,在 /etc/profile 添加以下内容:

export TSLIB_TSDEVICE=/dev/input/event0             # 触摸屏设备文件
export TSLIB_CALIBFILE=/etc/pointercal              # 指定触摸屏校准文件pintercal的存放位置
export TSLIB_CONFFILE=/etc/ts.conf                  # tslib模块配置文件
export TSLIB_PLUGINDIR=/usr/lib/ts/                 # tslib插件库目录
export TSLIB_CONSOLEDEVICE=none                     # 控制台设置
export TSLIB_FBDEVICE=/dev/fb0                      # framebuffer设备文件
echo "tslib init success!"

第 5 步:校准:由于 Jz2440开发板使用的是电阻式触摸屏,所以测试前需要先校准,在开发板执行以下命令进行校准:

ts_calibrate

执行上面的校准程序,LCD显示的画面如下图所示,通过点击 LCD 上的 “+” 进行校准,校准完毕后,校准的信息会保存在 /etc/pointercal 文件中。
在这里插入图片描述
第 6 步:使用触摸屏实现电子书翻页的程序(后续会补上对应的博客)进行测试,运行 ./show_file 程序时,出现如下错误:
在这里插入图片描述
上面的意思是说缺少了 libts-0.0.so.0 这个共享库,于是在 buildroot 顶层目录搜索:

扫描二维码关注公众号,回复: 12662614 查看本文章
find -name "libts-0.0.so.0"

搜索结果如下图所示:
在这里插入图片描述
我们只需要把 /output/host/arm-buildroot-linux-gnueabi/sysroot/lib 目录下的 libts-0.0.so.0 拷贝到根文件系统的 lib 目录即可:

cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/lib/libts-0.0.so.0 ~/works/nfs/rootfs/lib

重新运行 show_file 程序:

./show_file -s 24 -d fb -f MSYH.TTF -h HZK16 utf8.txt

出现段错误:Segmentation fault

由于 buildroot 编译使用的是 tslib-1.21 版本,而在 arm-linux-gcc 交叉编译器里 tslib 相关的头文件和库文件都是 tslib-1.4 版本的,所以应该是版本的问题导致的段错误,于是把 buildroot 下关于 tslib 相关的头文件和动态库复制到交叉编译器目录下:
① 在交叉编译器目录下搜索头文件:

 find -name "tslib.h"

搜索结果如下:
在这里插入图片描述
② 在交叉编译器目录下搜索头库文件:

find -name "libts*"

搜索结果如下:
在这里插入图片描述
② 删除原来的头文件和库文件:

sudo rm -rf ./arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/sys-root/usr/include/tslib.h
sudo rm -rf ./arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/sys-root/lib/libts*

③ 把 buildroot tslib 相关的头文件和库文件拷贝到交叉编译器目录下:
a. 在 buildroot 下搜索 tslib.h 头文件:

find -name "tslib.h"

搜索结果如下:
在这里插入图片描述
b. 在 buildroot 下搜索 tslib 动态库文件:

find -name "libts*so*"

搜索结果如下:
在这里插入图片描述
c. 把 buildroot tslib 相关的头文件和库文件拷贝到交叉编译器目录下:

sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/tslib.h /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include
sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libts*so* /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib -rfd

最后,重新编译 show_file 应用程序,运行:

./show_file -s 24 -d fb -f MSYH.TTF -h HZK16 utf8.txt

运行结果如下:点击LCD触摸屏可以进行上下翻页。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35031421/article/details/113436888
今日推荐