摘要:本文以大白话讲一下linux开发板上跑一个qt程序的基本步骤,争取让初学者能够在一天的时间跑通第一个程序。
硬件:正点原子Alpha Linux开发板
软件:win10,vmware,ubuntu,qtcreator
目录
运行效果如下图所示,就是在正点原子默认的UI界面基础上,运行了一个qpushbutton例程。
在正式开始之前,先说一下初学Linux嵌入式开发的感受。
做stm32时,习惯看到keil的界面了,也可以用简单的寄存器来控制某一个引脚。上手做Linux开发之后,首先被几十个G的安装镜像吓住了——安装镜像这么大,是不是linux编译起来特别复杂?还有就是密密麻麻的动辄上百个字符的命令,对于习惯图形化开发的我们来说,实在是感到太难了。以前我们习惯按一下编译,连接一下仿真器,现在我们要做什么驱动开发,呵呵,又是太难了。
其实,我们只需要过了心理上的畏惧情绪,跑通第一个程序,心里就不再怕了。
挡在我们面前的拦路虎有很多:Linux基本命令,ubuntu系统安装,甚至包括数百页的说明书不知道从哪里看起。
那么本文的目的,就是让大家抛开说明书,只看一下这篇文章,就知道每一步该用什么软件,怎么连接硬件,以及怎么输入命令,参考资料从哪里找。。。。。。
Follow me!每一步都有大白话心得体会,建议大家认真看。
1.安装ubuntu 系统
1.1参考资料
正点原子的阿尔法Linux开发板资料B盘里面,有ubuntu的安装和使用教程。对于这个教程,建议不求甚解地看一遍,形成一个初步印象。
1.2 操作步骤
不建议按照视频的介绍,一步步安装纯净的ubuntu系统。
建议下载正点原子已经安装完成qtcreator并做好初步配置的镜像,省去若干步骤。链接如下:
i.MX6ULL Linux阿尔法开发板 — 正点原子资料下载中心 1.0.0 文档 (openedv.com)
下载虚拟机镜像的时候,一定要保证网络的通畅,下载之后是4给分压缩包,需要解压缩到一个独立的镜像文件,如果网络不够好,那么可能造成看上去下载完毕,但解压的时候出现CRC校验错误的问题。有一丁点瑕疵,就会导致解压缩不成。
安装的步骤请参考驱动开发指南PDF文档
第一章讲的就是ubuntu系统安装的内容。请记住一定安装正点原子打包好的镜像,不用安装光盘自带的纯净版的ubuntu镜像。
根据自己电脑的配置,分配虚拟机硬件,下图是参考的配置。因为作者的台式机配置还可以,8核CPU,32G内存,所以配置的虚拟机稍高一点。另外,我用一整个分区作供虚拟机使用。
安装的时候,会设置系统的登录密码,以后使用sudo命令时,经常会用到这个密码,例如下载一些软件,通常需要输入密码确认权限后才能下载安装。进入系统后的界面如下图所示。
1.3花生心得
我们一般不会思考为什么要安装ubuntu系统,只是按照教程来一步步操作。但是实际上不安装ubuntu系统可以吗?我理解是可以的。为什么呢?就是因为不管是什么系统,只要有对应开发板硬件架构的编译工具(官方称呼为“交叉编译链”),就能编译成功可以在开发板上运行的程序,而编译出来的那几十KB的可执行文件,真的脱离ubuntu也是可以的。但是我们学习linux开发的时候都习惯于先安装ubuntu 了,导致一直认为不做个ubuntu虚拟机,好像就不能开发linux一样。作者这么理解的理由是什么呢?就是不用ubuntu,在windows系统下也可以通过配置交叉编译链来开发ESP32程序的经历。此外,在安装ubuntu这个步骤中,作者强烈建议直接下载正点原子已经打包好qtcreator的镜像,将这个镜像安装完毕后,就不用再一步步配置了。对于需要快速跑通第一个linux程序的同学来说,可以避免学的越细越糊涂的陷阱。跳过这些繁琐的步骤,可以让我们快速站在全局高度理解整个开发过程。
2.使用qtcreator编译第一个程序
2.1 参考资料
本部分参考qt交叉编译环境搭建PDF文档,该文档的位置是开发板光盘A盘根目录下。
打开文档的第24页,有打开源代码的基本步骤
2.2操作步骤
正点原子的镜像安装完毕后,在桌面上是没有qtcreator图标的。需要使用侧边栏最顶端的那个“Search your computer”按钮,搜索qt,选择绿色那个qt creator图标,单击即可进入。
软件的主界面如下图所示,可以看到有很多模板可以使用。qt可以跨平台使用,做出的界面可以在linux开发板运行,也可以在ubuntu系统使用,也可以在window系统运行,前提是要有针对不同平台的编译工具。
正点原子的镜像中,已经为我们复制好了例程的源代码,代码目录是Home---qt_demo
本文以qpushbutton为例。文件目录如下图所示。
文件夹内的目录如下图所示,注意图中有编译完成的可执行文件,原本的工程目录文件要少好几个。
使用菜单打开工程
工程文件是pro后缀文件
文件目录以及核心代码打开后如下图所示,具体内容就不再详细介绍。我建议先不要进行到这一步的时候,再花时间学习什么信号核槽,信号连接,主窗口样式等等。现在最关键的是看一下它运行起来的样子,以及它怎么样放到开发板运行。
点击界面左下角的绿色三角按钮,
运行效果
点击不同的按钮,串口的背景颜色就会更换,例如点击“窗口皮肤2"按钮,就会变成紫色。
这个编译好的可执行文件位置在哪里呢?它并不在源代码目录,而是在与源代码同级别的目录下,生成的文件夹名字叫做build-04_qpushbutton-Desktop_Qt_5_12_9_GCC_64bit-Debug。
它里面包含了编译生成的可执行文件,双击它,就可以看到刚才在IDE点击RUN按钮相同的效果。
不过。。。。。
这个程序还是不能在Linux开发板运行的,为什么呢?
因为它支持的平台还没有ARM,而开发板处理器是ARM架构
方法是在可执行文件的目录下右键打开终端,Open in Terminal
可以看到输入命令的路径已经自动更新为当前路径,省去了cd指令之苦。
使用指令file来查看文件的属性,这里有一个小技巧,就是tab键可以自动补齐文件名,这个对于诸如交叉工具链动辄几十个字符的文件名来说,非常重要。
运行file指令,可以看到它支持哪些平台,可以看到它只是支持X86平台的,也就是我们常用的PC机,都是X86平台的。那么它肯定不可以用在正点原子的开发板上。
而在快速体验手册中
第94页提到,看到ARM字样才能在开发板上跑。所以我们还要再专门编译成在开发板跑的程序才行。
2.3花生心得
使用原子的ubuntu镜像内置的qtcreator编译的可执行文件,不支持ARM平台。因为它前面还需要一些设置,需要专门的编译工具,才能将源代码”解析“成为在ARM开发板上跑的程序。那么是不是这个步骤就没用了呢?当然不是,它仍然很重要,重要之处在于我们可以快速预览设计的程序样子长什么样,跑起来是啥效果。在电脑上能跑,在开发板上跑的效果也是一样的,可以把电脑上运行的效果当作是STM32时代的”仿真“操作。
3.使用命令行编译第一个程序
3.1参考资料
还是参考qt开发指南手册
第83页搭建编译环境
第93页,编译qt工程
3.2操作步骤
基本的步骤是:安装交叉编译工具链,配置环境变量,生成makefile文件,编译成可执行文件。
翻译成大白话就是:安装能生成ARM开发板程序的编译工具,把编译工具所在的一长串文件夹简化,按照C++语言的标准编译,先编译成.o,然后再链接成.bin或者.hex的可执行文件。
首先将编译工具从开发板光盘中复制到ubuntu。注意,正点原子的帮助文档中提到了很多种工具。
![](https://i-blog.csdnimg.cn/blog_migrate/b0dcbee95076fc65899425ac3b765fae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/40ce5493cdb76d55488279a04f550b0d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/17066b1696abf62f5d4142ef362dc542.png)
ubuntu系统下,这个共享文件夹目录在哪里呢?在computer--mnt--hgfs目录下,可以看到刚才我们定义的共享文件夹(作者命名的是ubuntu_share)。这样就起到了不用优盘考来考去的作用。
我们刚才复制的文件就是正点原子的交叉编译包,它是.sh格式的,在linux下,就好像是windows下的.exe可执行文件的格式。接下来我们安装它。
在这个目录下右键选择打开终端,然后键入指令./f,再用tab键补齐。
补齐文件的名字,尽管这么长,但是自动输入。
回车之后,会提示安装到哪个目录下,正点原子为我们设置好了默认文件夹,就是/opt/fsl-imx-x11/4.1.15-2.1.0。
再次回车,就会自动安装到这个目录了。由于作者已经安装完了。所以会提示覆盖,在这里我们选择不覆盖。如果您是首次安装,那么等待安装完毕即可。不要管窗口下print了多少行的文字,都是自动完成的,把它想象成为windows下安装程序的”进度条“即可。
安装完成后,就在computer--opt文件夹下有了交叉编译工具链。为什么叫一个这种洋气的名字呢?作者也不知道,但是”交叉“和“链”确实为我带来了很多困惑。交叉我就认为它可能涉及到硬件连接,是不是在ubuntu下,需要“交叉网线”连接开发板?“链”我就会联想到特别复杂的一系列操作。总之是非常困惑,是不是这个“交叉编译工具链”非常难以操作!
实际上并非如此,交叉编译工具链也只是名字上高大上而已。
我们就把他理解成为比turbo c还low(实际上并不low)一点的c语言编译工具得了。
它只是没有界面而已。
再进一步,我们可以把它理解成为可以将c代码编译成可以在正点原子Linux开发板运行的程序的工具。
它怎么操作呢?当然是命令行(正点原子也推荐使用命令行,尽管qtcreator配置一下,也能生成ARM可执行文件)。
我们知道,在linux下,如果运行一个可执行文件,需要在对应目录下右键打开终端,然后./指令运行它,那么我们在其他文件夹下(例如qpushbutton源代码目录下)运行一个指定的程序呢?
当然可以,就是用到“环境变量”。没错,在Linux下也需要环境变量!其作用跟windows下一模一样。就是相当于省略了一个非常长的目录。
没有环境变量之前,我们需要输入的指令是
/aaa/bbb/ccc/ddd/eee/fff/hhh/xxx.sh
有了环境变量之后,我们输入的指令是,这就是区别。环境变量让系统知道,无论你在任何位置调用xxx.sh指令,都是调用的特定的文件夹下的某个程序。
xxx.sh
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
![](https://i-blog.csdnimg.cn/blog_migrate/b9d1681ce69aa27a5045f553f97501b9.png)
接下来使用env指令查看环境变量,出现这些字样的配置选项之后,就可以了。它表示我们已经将刚安装的“交叉编译工具链”设置到环境变量了。
接下来就开始编译,根据快速体验手册,需要首先qmake,然后make。
我们使用指令,逐个指令是在ubuntu下的终端中运行的。
qmake 04_qpushbutton.pro
可以看到执行完之后没有什么额外的提示。
qmake生成了makefile文件。
makefile文件打开之后内容很长。这个文件的作用请自行学习,不展开讲。
接下来运行make
make
make 之后,就生成了可执行文件。
我们可以再查看一下属性,查看它是否支持ARM平台了。到这里,可执行文件就编译完毕。于qtcreator运行查看效果不同的是,它双击之后没有任何反应。因为它只支持ARM平台,而不支持X86。要想让它能够在多种平台使用,就需要其他设置了。本文不进行讨论。
3.3花生心得
不要被“交叉编译工具链”这个高大上的名词吓住。它其实就是一个没有界面的编译工具而已,再说的简单点,就像是一个没有界面的turbo c 编程环境。它可以用命令行方式编译,也可以用qtcreator进行调用。不过正点原子推荐使用命令行。因为它简单到只需要设置一下环境变量,然后qmake,再make就搞定了。学习Linux,要强制自己适应各种命令行操作。qt程序,在不同平台都能用,但是要针对不同平台设置不同的编译工具。
4.让程序在开发板跑起来
4.1 参考资料
ubuntu下,如何将程序下载到开发板?在STM32时代,可以通过仿真器,可是Linux开发板没有仿真器,那么如何下载呢?大家可以参考网上的文章。有用网线连接电脑与开发板的,也有用U盘的。本文推荐用U盘。理由是可以让初学者更直观地感受到程序是怎么跑起来的。
ubuntu下把程序下载到开发板执行_Mr-LiangYizhao的博客-CSDN博客
4.2操作步骤
首先把U盘插入到ubuntu 系统下,将编译好的可执行文件复制到U盘,这个比较简单。
然后回到windows系统下。用USB线连接开发板与电脑。等待自动安装驱动
打开串口助理,本文以SSCOM为例,其实有很多都可以使用,Secure CRT和putty都是可以的。
然后将U盘插入开发板的USB HOST插口,通过屏幕看不到U盘在哪里。这是因为Linux系统下不能直接识别并挂载U盘,需要手动挂载才行。
手工挂载的工具是串口助理,工作在windows下(其实在ubuntu下也可以,本文以windows下运行SSCOM为例),当U盘插上开发板之后,开发板的TTL接口通过数据线连接到电脑端,电脑端的SSCOM串口助理会有提示,如下图所示,最关键的是U盘的符号是sda多少,在作者的电脑上显示的是sda1。记住这个编号,接下来要挂载。
在windows电脑端的sscom以115200波特率,输入下面这个指令,它的意思是挂载sda,将u盘的目录显示在mnt文件夹下。
mount -t vfat /dev/sda1 /mnt
使用命令可以查看sda1的信息,这时U盘就挂载成功了。
df -h
下图是挂载成功后的mnt文件夹内容,图片是开发板液晶屏的画面。此时,通过触摸屏是无法让程序运行起来的。仍然需要通过电脑端的串口助理发送指令让程序运行起来。
在windows的sscom输入指令,进入到mnt文件夹下。
cd /mnt
接下来通过windows的sscom串口助理输入./命令,运行mnt文件夹下的可执行文件04_qputshbutton ,这样程序就运行起来了。
./04_qpushbutton
运行的效果如下图所示:
4.3花生心得
自己编写的这个程序是qt程序,按说编译挺简单的,编译完成后,拷贝到开发板,让它执行不久得了?可是仍然遇到了很多坑,比如要用U盘拷贝过去,拷贝还不能通过开发板的触摸屏来操作,因为开发板运行的UI其实地位跟我们编写的俩按钮的地位相同,也只是要给qt程序而已。所以需要用上位机的串口助理来拷贝,而拷贝前,还需要手工挂载U盘。看上去挺复杂的,其实并不复杂,只要跟着做一遍,就能够完全掌握。核心的知识点,其实是文中的一些指令,是通过什么软件,在哪个系统下操作的,是在ubuntu下使用的,还是在windows下操作的?有很多文章是没有说的,本文试图让同学们参考尽可能少的资料,做到不离开文章,就能跟着一步步完成。
以上只是基本步骤的说明。真正要做出产品来,还需要将程序固化到硬件中,还需要设置开机自动启动这个qt程序才行。这些知识后续再发布。
与人玫瑰,手有余香。如果您感到本文有些许帮助,请关注作者,干货知识,持续分享。