1)实验平台:正点原子RV1126 Linux开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=692176265749
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html
为了能够在Ubuntu下qt creator IDE上开发、编译ATK-DLRV1126平台(ARM 32bit)Qt应用程序,我们需要对其进行相应的配置,包括qmake、ATK-DLRV1126交叉编译器等配置。
交叉编译工具链路径在我们ATK-DLRV1126光盘资料开发板光盘A-基础资料->05、开发工具->01、交叉编译工具->atk-dlrv1126-toolchain-arm-buildroot-linux-gnueabihf-x86_64.run。这个交叉编译工具是由正点原子在RV1126的SDK使用Buildroot中打包生成。方便我们在不编译ATK-DLRV1126的SDK就能使用交叉编译工具。这也考虑到有某些开发者编译SDK有可能不通过,不想编译SDK就能方便的使用我们的交叉编译工具。
将atk-dlrv1126-toolchain-arm-buildroot-linux-gnueabihf-x86_64.run这个文件拷贝到使用WinScp或者其它传输工具拷贝到Ubuntu20.04如下。
给atk-dlrv1126-toolchain-arm-buildroot-linux-gnueabihf-x86_64.run可执行权限。
chmod 777 atk-dlrv1126-toolchain-arm-buildroot-linux-gnueabihf-x86_64.run
执行下面指令安装。①步骤中可以指定交叉编译器的安装路径,默认是安装到/opt/atk-dlrv1126-toolchain路径下。可以输入其他路径安装,但是这里我们不建议修改这个路径,正点原子Ai例程或其它rkmedia例程Makefile都是基于/opt/atk-dlrv1126-toolchain下的。所以我们不能修改它的安装路径!②步骤中输入y或Y确认安装路径即可!保持交叉编译工具链安装路径与笔者的安装路径一样,下面步骤中也要用到。安装过程约1~2分钟,安装速度与个人计算机硬盘速度有关,安装完成如下。
安装完成交叉编译工具,这里我们需要检索这个交叉编译工具是否能用!所以我们需要测试一个Qt项目看看能不能用。
如下将我们开发板光盘A-基础资料->01、程序源码->04、出厂Qt综合例程->QDesktop拷贝到Ubuntu下。或者你可以新建一个简单的Qt项目来测试!这里笔者测试我ATK-RV1126的出厂Qt综合例程。出厂Qt综合例程比较复杂,涉及很多库,比较多的知识。如果出厂Qt综合例程都能编译过了,编译你们简单的Qt项目也不在话下!
进入QDesktop/desktop文件夹下,你的项目下必须有xx.pro文件,如下desktop文件夹下就有QDesktop.pro文件。
首先我们看到上面安装交叉编译工具时的提示,若要使用此工具链,每次运行新的终端会话时需要执行下面的指令,导出环境变量到终端。每个终端只需要执行一次即可!
2.2.1 查看qmake与Qt版本
执行下面指令查看qmake版本与Qt版本。可以看到交叉编译工具链里qmake版本为3.1,qt版本为5.12.2。
/opt/atk-dlrv1126-toolchain/usr/bin/qmake -v //或者直接输入qmake(不建议,可能环境变化找不到,输入qmake的绝对路径比较保险。)
执行qmake生成编译Qt项目所需的Makefile,然后我们就可以编译Qt项目了。
/opt/atk-dlrv1126-toolchain/usr/bin/qmake
2.2.2 编译Qt程序
直接输入make进行编译。
make -j 16 // -j x,x代表你分配给你虚拟机的核心数。当然写大了也没关系,make会根据实际情况去编译Qt项目。
如上,编译生成的可执行文件QDesktop就可以拷贝到正点原子ATK-DLRV1126出厂系统上运行了。
2.3 在出厂系统上运行Qt程序
使用adb(在Ubuntu安装adb)或者scp(在Ubuntu安装openssh-server)指令将上面编译出来的QDesktop可执行文件拷贝到ATK-DLRV1126出厂系统上运行。QDesktop运行还需要某些资源文件 ,请将QDestktop目录下的src文件夹也拷贝到开发上,本次我们将QDestktop和src文件夹拷贝到出厂系统上的/root目录下吧。因为出厂系统的QDestkop程序已经在demo分区,/demo目录下了。我们需要把它拷贝到/root目录,避免混淆。
由于正点原子ATK-DLRV1126开发板上的出厂系统上已经有一个QDestkop程序在运行了。我们首先要停止掉它。点击开发板屏幕上的设置图标,再点击退出。如果不退出直接运行我们刚编译的QDesktop程序,那么我们就已经运行了两个QDestkop程序,它们就会互相抢占屏幕,所以这样是不行的。
如下图,本次我们使用adb指令拷贝所需要的文件到/root目录下。
直接运行我们的Qt程序,本次以我们的QDestkop为示例,如果是你自己编写的Demo也是一样这样运行。
./QDesktop & //&的作用是放后台运行。
MIPI屏幕上显示的界面如下。说明QDesktop运行成功!
我们可以参考ATK-DLRV1126出厂Qt自启动程序是如何实现的,然后改写我们自己的Demo即可!
首先我们需要知道我们的Qt程序放在哪里,我们正点原子的ATK-DLRV1126测试时所有的程序都放在了正点原子新建的demo分区,不放在oem分区,oem分区是瑞芯微厂商的分区,为了不与厂商的分区混淆,我们可以将程序放在demo分区。也就是/demo目录下。我们的这个demo分区可以给客户使用,你完全可以删除/demo分区下的内容,放上自己的程序。
如下,/demo目录下的内容,可以看到正点原子出厂的QDesktop和src文件都在这里。
我们需要做自启动,那么我们需要在/etc/init.d/下创建我们的自启动脚本,我们的出厂Qt自启动脚本路径为/etc/init.d/S50QDesktop。我们可以将/etc/init.d/S50QDesktop重命名为我们自己的自启动脚本,如/etc/init.d/S50xxx。注意你只能改写后面xxx的名字S50前缀不能改写!如果你非要改写可以改为S50~S99之间的正整数。Sxx越大,启动时间越靠后。
/etc/init.d/S50QDesktop的内容如下,你只需要替换自己的Qt程序即可,如下图红色部分是你需要改写的地方。如/demo目录下有个myQtDemo程序那么你就改写成/demo/myQtDemo -platform linuxfb 2&>1 >/dev/null &即可,将其它QDesktop文本改为myQtDemo。就完成了改写自启动脚本。
source /etc/profile
case "$1" in
start)
echo "Starting QDesktop..."
/demo/QDesktop -platform linuxfb 2&>1 >/dev/null &
;;
stop)
echo "Stopping QDesktop..."
killall $(pidof QDesktop)
;;
reload|force-reload)
echo "Reloading QDesktop configuration..."
"$0" reload
;;
restart)
"$0" stop
sleep 1 # Prevent race condition: ensure QDesktop stops before start.
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload}"
esac
exit 0
2.5 QtCreator开发RV1126平台Qt应用程序
很多开发者想在编写Qt应用程序后,想在开发板上运行试试效果。毕竟我们在Ubuntu下的Qt Creator下开发的程序最终还是需要在开发板上运行的,如果你单纯只是开发Ubuntu上运行的Qt程序,那么你就没有必要搭建RV1126平台的Qt应用程序了。
如果我们想在开发板上运行Qt应用程序,我们可以看2.4小节,但是用命令行有个不好的地方,编写完Qt项目了,需要打开终端,再执行命令去编译,这样比较麻烦。有没有方法搭建一个开发套件(Kit)的方法呢,好吧,不废话了,我们就来使用Qt Creator搭建开发RV1126平台Qt应用程序吧。
2.5.1 配置ARM交叉编译器
首先,我们在Ubuntu上打开Qt Creator,选择工具,然后选择选项条目。
可以看到⑤处,这个就是Ubuntu上桌面应用开发套件,也就是开发的Qt应用程序可以在Ubuntu上运行起来。通常我们都是在Ubuntu上开发界面。如果有些代码在Ubuntu上运行是没有效果的,也就是这些代码是与开发板硬件有关的,那么我们就必须编译这个程序到开发板上运行观察运行结果。
现在只有一个kit,我们需要增加一个kit,增加我们ATK-DLRV1126的配置。点击编译器选项,可以看到在Ubuntu上就有很多编译器,有C编译器还C++编译器,之所以有这么多编译器,因为有不同的GCC版本还有不同的操作系统bits(位数),然后点击添加按钮添加我们的ATK-DLRV1126平台的交叉编译器。在2.1小节我们已经安装了交叉编译器。所以我们在这一步就要用到这个交叉编译器了。
我们选择GCC,为什么选择GCC,因为我们用的编译器名字就是GCC类型的,然后我们首先配置C++,也就是编译C++的编译器。
在这里插入图片描述
点击后,我们需要将弹出的界面拉大一点。否则你就看不见⑩浏览路径的按钮了。在第⑪步中,这个路径是/opt/atk-dlrv1126-toolchain/usr/bin/arm-linux-gnueabihf-g++。如果你的交叉编译器也是按2.1小节安装在这个路径,那么我们的结果是一样的。如果你不想安装交叉编译器,那么你也是可以使用ATK-DLRV1126 SDK里的交叉编译器的,前提你要知道交叉编译器的路径在哪里!这里我们就不多说了。建议使用我们提供的交叉编译器,因为你可能编译sdk失败等原因导致编译不能使用的情况也是时有发生!在第⑫步我们需要自定义这个编译器的名称,我们的ATK-DLRV1126开发板就叫它atk-dlrv1126-g++吧!写小写的,比较好认,当然你自定义它为其它名字也可以!
在上面配置完了C++,我们一定要点Apply(应用),现在我们来配置C。重复上面的步骤。添加C编译器。
下图同理,gcc这个路径是/opt/atk-dlrv1126-toolchain/usr/bin/arm-linux-gnueabihf-gcc。自定义的名称为atk-dlrv1126-gcc。点击应用Apply即可。可以看到第⑲步中,我们已经添加了两种编译器。
2.5.2 配置qmake
上面配置完了交叉编译器,现在我们来配置qmake,当然这个配置的顺序不是固定的,你可以先配置qmake再配置交叉编译器也没有关系。点击Qt版本,然后点击添加。
如下图,添加qmake,如果你的交叉编译器也是和笔者的安装路径一样的话,qmake的路径为/opt/atk-dlrv1126-toolchain/usr/bin/qmake。我们在第25步中改写名称为Qt %{Qt:Version} (atk-dlrv1126)。点击Apply应用!别忘记了!
2.5.3 配置Kit
这一步我们就需要添加我们自己的交叉编译套件了,点击添加。
序号29:这里我们命名为atk-dlrv1126,这个就是我们开发板的名称了,写小写感觉比较顺眼。
序号30:我们选择通用Linux设备
序号31:我们选择在2.5.1配置的交叉编译器类型
序号32:我们选择在2.5.2配置的qmake
可以看到下图中的kit只有一个黄色的叹号,(黄色的叹号只是我们的设备还没配置,所以出现黄色的叹号),说明我们已经配置成功了,没有错误。然后我们点击应用Apply再点击确认OK即可!
2.5.4 编译测试
现在我们新建一个简单的项目来测试。笔者快速创建了一个项目,我们在创建项目时,需要选择我们在上一步搭建好的编译套件。这里我们两个都选择,我们可以编译Qt程序在Ubuntu运行,又可以编译ATK-DLRV1126平台上运行的Qt应用程序了。
点击左下角的构建套件,我们选择atk-dlrv1126编译套件,选择Release或者Debug版本,注意我们点击36步的小锤子进行构建,不要点击运行。可以看到37步中使用了我们在2.1小节中安装的交叉编译器,编译无错误!
编译生成的可执行文件在build-项目名称-atk_dlrv1126-Release/下。请自行查看。拷贝到开发板系统上执行即可!
2.6 远程部署Qt应用程序
第2.5小节中,使用“atk-dlrv1126”构建、编译的应用程序无法在Ubuntu本机上运行,可以运行在ATK-DLRV1126平台,但是需要我们将可执行文件拷贝到ATK-DLRV1126开发板,然后再去执行它;这其实对于开发者来说非常不方便,因为它非常浪费时间,每次想要看下运行效果都需要将可执行文件拷贝到开发板上,比较麻烦!
本章我们就向大家介绍如何通过qt creator将应用程序远程部署到ATK-DLRV1126开发板上,也就是不通过我们人工拷贝的方式,我们直接在Ubuntu主机端qt creator软件上点击运行(或者快捷键)就可以实现Qt程序自动“跑到”开发板上运行,直接在开发板上查看程序运行效果!
2.6.1 配置运行设备
在2.5.3小节,还记得我们配置kit时有个黄色的感叹号吗?因为我们没有配置运行设备,你编译的Qt程序没有设备可以运行,所以就报黄了。默认的Desktop Qt 5.12.2 GCC 64bit这个编译套件配置了运行设备,就是Ubuntu桌面,它编译的程序就能跑在Ubuntu桌面上。我们配置的atk-dlrv1126编译套件需要配置运行设备,这个运行设备就是我们的开发板。
好,现在我们来创建运行设备。这个运行设备不在我们的Ubuntu上面,那么我们通过什么方式来连接我们ATK-DLRV1126开发板设备呢,答案是网络!
同理我们点击工具菜单》选项条目,如下。
在创建设备之前,保证ATK-DLRV1126开发板当前正运行linux buildroot系统,并且开发板已经通过网线连接到了路由器设备。
我们开始创建一个设备,点击设备条目,点击添加。按如下步骤添加一个通用的Linux设备。
第⑧步将这个设备命名为atk-dlrv1126-device,名字随你喜欢。
第⑨步填上开发板的ip地址,填写你自己开发板的ip地址。
第⑩步设备登录开发板的用户,我们设备为root用户登录。默认开发板就有root用户。
第⑪步选择验证类型为密码,我们ATK-DLRV1126开发板的密码为root。
第⑫输入验证密码root
点击下一步。
点击完成。
可以看到下图,设备测试成功。如有错误请检查开发板ip地址是否正确,看见Device test finished successfully即可!若有其它报错可以忽略,点击关闭。
第⑰步可以再次修改你的设备信息,然后我们第⑱步点击应用。
按如下步骤操作,可以看到在第21步中,我们的黄色的感吧号神奇的消失不见了,所以我们看到感叹号,不必要担心,它只是提示你有些操作没有完成罢了。
由于ATK-DLRV1126开发板出厂就跑了一个Qt界面,如果我们马上运行我们配置的设备的话,那么肯定不行的,因为只有一块屏幕,出厂Qt使用的是linuxfb平台,如果有两个界面程序运行,那么这两个界面程序为了显示在这块屏幕上,它们就会互相抢占,打起架来,所以你会看见界面一卡一卡的。
所以正确做法,我们先停掉出厂的Qt程序,点击界面上的设置图标》退出。然后在Ubuntu再运行我们在2.6.2配置的设备。
如下图选择我们的atk-dlrv1126编译套件,选择Debug或者Release,点击绿色的三角开,或者快捷键”Ctrl + r”即可在ATK-DLRV1126开发板上运行我们的Qt程序。由于我们这个例子为一个空白的窗口,所以你会在屏幕上看到一片白色,没有其它内容。运行成功在编译编译输出窗口看到如下图2处的信息。
若如停止这个程序,那么我们在应用程序输出窗口关掉这个程序即可。