在ARM Linux(Anyka)中使用AWTK嵌入式GUI

接前文所述,早日获得了安凯电子玩具一块,经分析这是一个极致低成本的方案,带来的后果就是虽然有了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目录下了。