摘要:本文以大白话讲一下linux开发板上跑一个qt程序的基本步骤,争取让初学者才能在三天的时间跑通第一个程序。

硬件:正点原子AlphaLinux开发板

软件:win10,vmware,ubuntu,qtcreator

目录

运行疗效如右图所示,就是在正点原子默认的UI界面基础上,运行了一个qpushbutton类库。

在即将开始之前,先说一下初学Linux嵌入式开发的体味。

做stm32时,习惯见到keil的界面了,也可以用简单的寄存器来控制某一个引脚。上手做Linux开发以后,首先被几十个G的安装镜像吓住了——安装镜像如此大,是不是linux编译上去非常复杂?还有就是密密妈妈的动辄上百个字符的命令,对于习惯图形化开发的我们来说,实在是倍感太难了。曾经我们习惯按一下编译,联接一下仿真器,如今我们要做哪些驱动开发,呵呵,又是太难了。

虽然,我们只须要过了心理上的惧怕情绪,跑通第一个程序,心中就不再怕了。

挡在我们面前的绊脚石有好多:Linux基本命令,ubuntu系统安装,甚至包括数百页的说明书不晓得从那里看起。

这么本文的目的,就是让你们摒弃说明书,只看一下这篇文章,就晓得每一步该用哪些软件,如何联接硬件,以及如何输入命令,参考资料从那里找。。。。。。

Followme!每一步都有大白话心得感受,建议你们认真看。

1.安装ubuntu系统1.1参考资料

正点原子的阿尔法Linux开发板资料B盘上面,有ubuntu的安装和使用教程。对于这个教程,建议不求甚解地看一遍,产生一个初步印象。

1.2操作步骤

不建议根据视频的介绍,一步步安装纯净的ubuntu系统。

建议下载正点原子早已安装完成qtcreator并做好初步配置的镜像,省去若干步骤。链接如下:

i.MX6ULLLinux阿尔法开发板—正点原子资料下载中心1.0.0文档()

下载虚拟机镜像的时侯,一定要保证网路的通畅,下载以后是4给分压缩包,须要解压缩到一个独立的镜像文件,假如网路不够好,这么可能导致看起来下载完毕,但解压的时侯出现CRC校准错误的问题。有一丁点瑕疵,都会造成解压缩不成。

安装的步骤请参考驱动开发手册PDF文档

第一章讲的就是ubuntu系统安装的内容。请记住一定安装正点原子打包好的镜像,不用安装光碟自带的纯净版的ubuntu镜像。

按照自己笔记本的配置,分配虚拟机硬件,右图是参考的配置。由于作者的台式机配置还可以,8核CPU,32G显存,所以配置的虚拟机稍初一点。另外linux源代码分析,我用一整个分区作供虚拟机使用。

安装的时侯,会设置系统的登陆密码,之后使用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图标的。须要使用侧边栏最顶端的那种“Searchyourcomputer”按钮,搜索qt,选择红色那种qtcreator图标,单击即可步入。

软件的主界面如右图所示,可以看见有好多模板可以使用。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构架

方式是在可执行文件的目录下右键打开终端,OpeninTerminal

可以看见输入命令的路径早已手动更新为当前路径,省去了cd指令之苦。

使用指令file来查看文件的属性,这儿有一个小方法,就是tab键可以手动补足文件名,这个对于例如交叉工具链动辄几十个字符的文件名来说,十分重要。

运行file指令,可以看见它支持什么平台,可以看见它只是支持X86平台的,也就是我们常用的PC机,都是X86平台的。这么它肯定不可以用在正点原子的开发板上。

而在快速体验指南中

第94页提及,见到ARM字样能够在开发板上跑。所以我们还要再专门编译成在开发板跑的程序才行。

2.3核桃心得

使用原子的ubuntu镜像外置的qtcreator编译的可执行文件,不支持ARM平台。由于它上面还须要一些设置,须要专门的编译工具,能够将源代码”解析“成为在ARM开发板上跑的程序。这么是不是这个步骤就没用了呢?其实不是linux 给qt开发程序设置图标,它依然很重要,重要之处在于我们可以快速预览设计的程序样子长哪些样linux培训机构,跑上去是啥疗效。在笔记本上能跑,在开发板上跑的疗效也是一样的,可以把笔记本上运行的疗效当成是STM32时代的”仿真“操作。

3.使用命令行编译第一个程序3.1参考资料

还是参考qt开发手册指南

第83页搭建编译环境

第93页,编译qt工程

3.2操作步骤

基本的步骤是:安装交叉编译工具链,配置环境变量,生成makefile文件,编译成可执行文件。

翻译成大白话就是:安装能生成ARM开发板程序的编译工具,把编译工具所在的一长串文件夹简化,根据C++语言的标准编译,先编译成.o,之后再链接成.bin或则.hex的可执行文件。

首先将编译工具从开发板光碟中复制到ubuntu。注意,正点原子的帮助文档中提及了好多种工具。

把->开发板光碟->5、开发工具->1、交叉编译器->fsl-imx-x11-glibc-x86_64-meta-toolchain-q

t5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh(yocto编译下来的sdk工具包)拷贝到Ubuntu虚拟机(可以使用Winscp、FileZilla或构建Samba搭建文件共享的形式拷贝到Ubuntu虚拟机,本次觉得您早已拷贝了该脚本到Ubuntu虚拟机)。

无论是哪些工具,要实现的功能虽然很简单:就是把windows系统下的一个文件复制到ubuntu系统下。就相当于您用U盘复制一个文件,之后查到ubuntu下,再粘贴。

作者推荐的方式是”共享文件夹“。也就是在windows系统下构建一个文件夹,让同样工作在windows虚拟机下的ubuntu才能访问。这些操作在VMWARE就可以进行。方式是在虚拟机中选择设置,再选择”选项“,之后在”共享文件夹“下进行设置。

之后

这样我们在D盘下构建的共享文件夹ubuntu_share(随意您起哪些名子)就可以被ubuntu访问了。

我们将交叉编译工具链粘贴到windows下的这个共享文件夹目录。这么ubuntu系统就可以访问它。

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下,须要“交叉网线”连接开发板?“链”我都会联想到非常复杂的一系列操作。其实是十分困扰,是不是这个“交叉编译工具链”非常无法操作!

实际上并非这么,交叉编译工具链也只是名子上高大上而已。

我们就把他理解成为比turboc还low(实际上并不low)一点的c语言编译工具得了。

它只是没有界面而已。

再进一步,我们可以把它理解成为可以将c代码编译成可以在正点原子Linux开发板运行的程序的工具。

它如何操作呢?其实是命令行(正点原子也推荐使用命令行,虽然qtcreator配置一下,也能生成ARM可执行文件)。

我们晓得,在linux下,假如运行一个可执行文件,须要在对应目录下右键打开终端linux 给qt开发程序设置图标,之后./指令运行它,这么我们在其他文件夹下(比如qpushbutton源代码目录下)运行一个指定的程序呢?

其实可以,就是用到“环境变量”。没错,在Linux下也须要环境变量!其作用跟windows下一模一样。就是相当于省略了一个特别长的目录。

没有环境变量之前,我们须要输入的指令是

/aaa/bbb/ccc/ddd/eee/fff/hhh/xxx.sh

有了环境变量以后,我们输入的指令是,这就是区别。环境变量让系统晓得,无论你在任何位置调用xxx.sh指令,都是调用的特定的文件夹下的某个程序。

xxx.sh

环境变量的设置方式是source/opt。。。。。。。我们在工程目录下右键打开终端,之后运行环境变量。

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi 

接出来使用env指令查看环境变量,出现这种字样的配置选项以后,就可以了。它表示我们早已将刚安装的“交叉编译工具链”设置到环境变量了。

接出来就开始编译,按照快速体验指南,须要首先qmake,之后make。

我们使用指令,挨个指令是在ubuntu下的终端中运行的。

qmake 04_qpushbutton.pro

可以看见执行完以后没有哪些额外的提示。

qmake生成了makefile文件。

makefile文件打开以后内容很长。这个文件的作用请自行学习,不展开讲。

接出来运行make

make

make以后,就生成了可执行文件。

我们可以再查看一下属性,查看它是否支持ARM平台了。到这儿,可执行文件就编译完毕。于qtcreator运行查看疗效不同的是,它双击以后没有任何反应。由于它只支持ARM平台,而不支持X86。要想让它还能在多种平台使用,就须要其他设置了。本文不进行讨论。

3.3核桃心得

不要被“交叉编译工具链”这个高大上的名词吓住。它虽然就是一个没有界面的编译工具而已,再说的简单点,如同是一个没有界面的turboc编程环境。它可以用命令行形式编译,也可以用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为例,虽然有好多都可以使用,SecureCRT和putty都是可以的。

之后将U盘插入开发板的USBHOST接口,通过屏幕看不到U盘在那儿。这是由于Linux系统下不能直接辨识并挂载U盘,须要自动挂载才行。

手工挂载的工具是并口助理,工作在windows下(虽然在ubuntu下也可以,本文以windows下运行SSCOM为例),当U盘插上开发板以后,开发板的TTL插口通过数据线联接到笔记本端,笔记本端的SSCOM并口助理会有提示,如右图所示,最关键的是U盘的符号是sda多少,在作者的笔记本上显示的是sda1。记住这个编号,接出来要挂载。

在windows笔记本端的sscom以115200码率,输入下边这个指令,它的意思是挂载sda,将硬盘的目录显示在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程序才行。这种知识后续再发布。

与人玫瑰,手有余香。倘若您倍感本文有些许帮助,请关注作者,干货知识,持续分享。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复