接前文所述,早日获得了安凯电子玩具一块,经分析这是一个极致低成本的方案,带来的后果就是虽然有了 Linux,但其实没有一种相对于裸机平台的 “爽” 的感觉,各方面开发还是挺受束缚的。
我们要做的是一个视频对讲的项目,需要用到 GUI,最开始想的是 Qt,结果没想到板子到手是个这样的情况,各方面开发都还是比较底层的直接去调厂家的 SDK(还没有源码),而且 8M 的 Flash 都可能还没一个 Qt 的库大,只好放弃了 Qt。评估了一番嵌入式的常用 UI 后,发现了 AWTK 这个国产的嵌入式 UI,粗看在国内的开源项目中还是少有的看上去还算可靠的。
AWTK 的兼容性非常不错,上到 Windows、基于 Xorg 的 Linux 和甚至是微信小程序,中有各种常见的嵌入式 Linux,下探 RTOS 等单片机系统甚至可以直接在单片机上裸机运行。
我所用的平台,安凯,原厂提供了移植,不过没有公开发出来。考虑到板子提供了 Linux Framebuffer 的/dev/fb0
设备,理论上 Linux 嵌入式通用的移植就可以使用了。
tslib 编译
tslib 是一个触控处理的库,提供了从原始信号输入,去抖动,位置校准等对于原始触摸信号处理的能力。AWTK 的触控功能是基于此库实现的。
在 Linux 中,万物皆为文件,设备不例外,输入设备更是如此。输入设备一般都注册在/dev/input
路径下,鼠标设备一般命名为/dev/input/mice
,触摸设备一般命名为/dev/input/eventX
(X 为触摸设备的序号,一般是 0)。至于为什么鼠标设备没有触摸设备那样后面的 X 呢,大概是因为一个系统鼠标指针就一个吧,所有鼠标的信号应该都会反馈到/dev/input/mice
上。
而取决与不同触摸设备对于信号的定义方式可能不同等实际情况,以及触摸设备本身可能出现过于灵敏导致出现不期望的操作等,原始信号往往还需要进行滤波等处理才可以使用在应用程序的交互上。
而 tslib 就是替你完成这一系列处理,使应用程序的开发者不用关心触摸设备的细节,可以直接拿到可信的触摸位置,从而在交互上响应。显然 AWTK 的开发者也是处于这样的目的,所以使用此库作为触摸信号的处理前端。因此,要编译 AWTK,我们需要先编译 TSLIB。
./configure --disable-static --enable-shared --enable-input=shared --enable-linear=shared --enable-iir=shared --host=arm-linux --prefix=/home/mr/anyka/build_dir/tslib CC=/home/mr/arm-anykav500-linux-uclibcgnueabi/bin/arm-anykav500-linux-uclibcgnueabi-gcc CXX=/home/mr/arm-anykav500-linux-uclibcgnueabi/bin/arm-anykav500-linux-uclibcgnueabi-g++
make
make install
我最先编译的是静态库,在编译时一切顺利,但在编译 AWTK 时,死活无法找到我编译好的 Tslib 的静态库,但将 tslib 从静态库变为动态库后便没有再出错了,所以这里我是编译为了动态库。供参考。
我使用的 tslib 版本目前提供了 configure 和 CMake 两种编译系统的支持,这里用的是 configure。
可以看到这个库的 configure 程序是通过环境变量指定交叉编译器的。
运行完上述命令后,若无报错,理论上编译好的 tslib 库已经保存在设置的 prefix 目录下了。