在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

时间:2021-12-29 09:25:52

在电脑上安装toolchain


首先下载工具链,因为Angstrom官网已经挂了,可以到这位热心的网友的Google drive里下载:

https://googledrive.com/host/0B3Z340LOBulvMG5NRmNlZEppSEE/

网盘里有用的文件是下面这两个
angstrom-2011.03-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2
angstrom-2011.03-x86_64-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2
根据你的linux主机是32还是64位进行选择下载。
(我用的是32位ubuntu)

下载好后用如下命令解压到根目录就OK了
sudo tar -C / -xjf angstrom-2011.03-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2

这里面包括交叉编译用的arm-angstrom-linux-gnueabi系列工具,还有为arm平台进行Qt编译的qmake工具等,我们编译一个arm Qt程序要用到的所有工具在这个包里都有了,所以把它叫做“工具链(toolchain)”。

安装Qt Creator


下载地址http://qt-project.org/downloads
它就是一个空壳,必须配合上面的工具链才能工作。

装好Qt Creator以后请先不要打开,读完下面的话再进行操作。

Qt Creator交叉编译运行的过程是这样的:在你点击“运行”按钮以后,Qt Creator自动完成下面操作。首先自动使用qmake命令和linux-gnueabi-oe-g++编译生成Makefile,然后自动使用make命令生成可执行文件,然后自动把那个可执行文件用sftp传到BBB上,然后自动运行之。
这个过程中用到了一些工具,因此使用Qt Creator创建Qt工程的第一步,就是指定要使用的“工具箱”Kit,因为对不同的平台进行编译时,要用到不同的qmake和不同的g++等设置,这些设置组合起来叫做一个Kit。

为了让Qt Creator能找到这些工具的位置,就要设置环境变量。在toolchain里已经有写好的设置环境变量的脚本,我们只需要执行以下即可:
. /usr/local/angstrom/arm/environment-setup

如果执行不了就添加执行权限
chomd +x /usr/local/angstrom/arm/environment-setup

注意,这个environment-setup文件里设置环境变量的方法是 export。别忘了export设置的环境变量只对当前打开的shell有效。所以我们装好Qt Creator以后虽然能看到一个应用程序图标,但我们不会直接双击图标打开它,而是应当在执行上述设置环境变量的terminal里找到并打开qtcreator程序。为了方便,我先把environment-setup文件复制一份到home目录,然后把QC程序的位置写到文件的末尾,即在environment-setup文件最后添加一行(根据你的安装位置修改):
/home/yourname/qtcreator-3.0.0/bin/qtcreator

之后给这个文件添加执行权限
chomd +x environment-setup

以后执行这个文件 ./environment-setup 就可以自动配置环境变量并打开Qt Creator了。

(如果环境变量没设置好,编译的时候会出现错误提示“:-1: error: execvp: ../projectname/mainwindow.ui: Permission denied”)

设置Kit


打开菜单栏中的Tools->Options,与下面的图片进行比对来进行设置(名字可以不同,位置应该一样)

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境



在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境


然后从左侧切换到Devices选项卡,Add一个Generic Linux Device

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

添加完成后点击右侧的Test测试是否配置正确

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

最后配置Kits,把刚刚设置的几项都添加进去

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

Hello World


新建工程,选Qt Widgets Application
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境


一直点Next就可以了,到选Kit的时候,如果你那里显示了多个Kit,把别的对勾去掉,选择刚刚设置好的BeagleboneKit
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境


新建完工程以后,如何编写Qt程序就不说了,下面说一下如何配置在Beaglebone Black上运行
正常情况下在左侧点击Project,然后在上面选择Run之后会显示这样的界面
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境


虽然设置了远程设备是Beaglebone,但是没有设置路径,所以它不知道把生成的程序sftp到何处,也就无法执行。
我们打开下图的这个文件,添加三行代码
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境


按Crtl+S保存,然后回到上一个界面中看一下,会发现多了一行字

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

要运行Qt程序,必须添加-qws参数。所以我们在下面的Arguments里填上-qws

在Ubuntu中搭建Qt Creator对BBB的交叉编译环境
电脑端配置完成!

点击左下角的小锤子编译,然后点绿色三角运行。顺利的话,你会得到一些错误提示(= =!)

告诉你BBB上没有需要的库文件(具体库名可能跟你的不一样)。
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

BBB上要想运行Qt程序,还需要一些库文件和字体文件。本来应该 opkg install qt4-embedded来安装的,但是Angstrom官网挂了,没法update,也没法安装它。我暂时的解决办法是:
1、把电脑上/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/share/fonts/truetype里的5个DejaVuSans开头的文件拷贝到Beaglebone的/usr/lib/fonts/目录下(可能需要手动新建fonts目录)。
2、运行时需要哪个库文件,到电脑上搜索一下拷贝到BBB上的/usr/lib里。所需库文件应该都在/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/lib这个目录下。但因为这个目录太大了(200M),就不都拷贝到BBB上了。实际上运行一个最简单的窗口程序只需要其中的3个库文件。

库和字体文件拷贝完成以后,再运行,就可以顺利在BBB上看到界面啦。
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

运行完毕以后别忘了把程序停止掉
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

补充:如果你的BBB显示屏上有图形界面的话,你的Qt程序是无法显示的。需要先把桌面关闭。方法是在BBB上执行
systemctl disable gdm
然后重启BBB。

以后想要恢复桌面显示的话,
systemctl enable gdm
就好了。

触摸屏校正


程序运行成功后你马上会发现,鼠标根本不按照点击的位置走。。所以我们需要进行触摸屏校正。
ts_calibrate
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境
然后检验一下效果
ts_test
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境

然后在Qt Creator里Project中添加一个Run中的环境变量(event1不行就换成event0,event2试试)
在Ubuntu中搭建Qt Creator对BBB的交叉编译环境
再运行程序,鼠标就OK了。

如果是在命令行中直接运行Qt程序,之前也需要用下面的命令校正一下触摸屏
export QWS_MOUSE_PROTO=LinuxInput:/dev/input/event1