硬件:郑点Atom Alpha Linux开发板
软件:win10、vmware、ubuntu、qtcreator
目录

运行效果如下图所示,显示了基于正点Atom默认UI界面运行了一个qpushbutton例程。
在正式开始之前我先讲一下我刚开始学习Linux嵌入式开发时的经历。
在搞stm32的时候习惯了keil的界面,也能用简单的寄存器控制一个引脚。开始做Linux开发之后,首先被几十GB的安装镜像震惊了。安装镜像那么大,编译Linux是不是很复杂?而且密密麻麻的几百个字符的命令,对于习惯了图形化开发的我们来说太难了。以前都是按编译,连上仿真器就行,现在还想搞什么驱动开发?哈哈,又太难了。
其实,我们只要克服心理上的恐惧,完成第一步,就不会再害怕了。
我们面前的障碍很多:基本的Linux命令、Ubuntu系统安装,甚至数百页令我们不知从何下手的说明书。
本文的目的是让大家抛开手册,只要读这篇文章就能知道每一步要用到什么软件,硬件要怎么连接,命令要怎么输入,参考资料去哪里找。。。。。
跟我来!
每个步骤都有简单的解释,建议你仔细阅读。
1.安装Ubuntu系统 1.1参考
这里有一篇关于如何在郑电Atom的Alpha Linux开发板中安装和使用Ubuntu的教程,建议先看完这个教程,不需要详细了解,形成初步的印象。
1.2 操作步骤
不建议按照视频介绍一步步安装纯Ubuntu系统。
建议下载已经安装好qtcreator并做过初步配置的正点Atom镜像,省去几个步骤,链接如下:
i.MX6ULL Linux Alpha 开发板 - 郑电原子数据下载中心 1.0.0 文档 (openedv.com)
下载虚拟机镜像的时候一定要保证网络畅通,下载之后是一个4部分的压缩包,需要解压成单独的镜像文件,如果网络不够好的话,可能出现看似下载完成,但是解压的时候会出现CRC校验错误,稍有不慎就会导致解压失败。
安装步骤请参考驱动开发指南PDF文档
第1章讲的是Ubuntu系统的安装,请切记安装正点Atom打包好的镜像,不要安装光盘自带的纯净版Ubuntu镜像。
根据自己电脑的配置,分配虚拟机硬件。下图是参考配置。因为笔者的台式机配置还可以,8核CPU,32G内存,所以虚拟机的配置稍微高一点。另外我给虚拟机用了一整个分区。
安装时会设置一个系统登录密码,这个密码以后在使用 sudo 命令时会经常用到,比如下载一些软件时,一般都需要输入密码确认权限后才能下载安装,进入系统后的界面如下图所示。
1.3 花生体验
我们平时不会去想为什么要安装Ubuntu系统,而是按照教程一步一步来就行了。但是不安装Ubuntu系统是不是就没问题了呢?我的理解是没问题。为什么呢?因为不管是什么系统,只要有对应开发板硬件架构的编译工具(官方叫“交叉编译链”),就能成功编译出可以在开发板上运行的程序,编译出来的几十KB的可执行文件才真正脱离了Ubuntu。但是我们学Linux开发的时候,习惯先装Ubuntu,这就导致了不做Ubuntu虚拟机就不能开发Linux的信念。笔者这样理解的原因是什么呢?就是之前没有用Ubuntu,而是在Windows系统下配置交叉编译链开发ESP32程序的经历。另外,在安装Ubuntu的步骤中,笔者强烈建议直接下载正点Atom已经打包好的qtcreator的镜像,安装完这个镜像之后,就不需要再一步一步配置了。 对于需要快速运行第一个Linux程序的同学来说,可以避免越学越糊涂的陷阱,跳过这些繁琐的步骤可以让我们从全局的角度快速了解整个开发流程。
2.使用qtcreator编译第一个程序 2.1参考文献
本节参考搭建QT交叉编译环境的PDF文档,该文档位于开发板光盘A盘根目录下。
打开文档第24页,里面有打开源代码的基本步骤
2.2 操作步骤
正点Atom镜像安装完成后,桌面上是没有QtCreator图标的,需要通过侧边栏上方的“搜索你的计算机”按钮,搜索Qt,选择绿色的Qt Creator图标,点击进入。
软件主界面如下图,可以看到有很多模板可以使用,Qt是可以跨平台使用的,界面可以在Linux开发板上运行,也可以在Ubuntu系统上运行,也可以在Windows系统上运行,只要有不同平台的编译工具就可以了。
在正点Atom镜像中,例程的源代码已经帮我们复制过来了,代码目录为Home---qt_demo
本文以qpushbutton为例,文件目录如下图所示。
文件夹内的目录如下图所示,注意图中是编译好的可执行文件,原工程目录下的文件比原工程目录少了几个。
使用菜单打开项目
项目文件是后缀为pro的文件
文件目录和核心代码如下图所示,具体内容我就不详细介绍了,建议到了这一步就不要再花时间去学习信号核心槽,信号连接,主窗口样式等了,现在最重要的是看它怎么运行,怎么放到开发板上运行。
点击界面左下角的绿色三角形按钮。
运行结果
点击不同的按钮,串口的背景颜色会发生变化,例如点击“Window Skin 2”按钮,就会变成紫色。
编译出来的可执行文件在哪里呢?不是在源代码目录下,而是在源代码同一个目录下,生成的文件夹名为build-04_qpushbutton-Desktop_Qt_5_12_9_GCC_64bit-Debug。
里面就是编译好的可执行文件,双击它就可以看到和刚才点击IDE中的RUN按钮一样的效果。
但.....
这个程序在Linux开发板上还是不能运行,为什么?
因为它支持的平台还没有ARM,而开发板处理器是ARM架构的
方法是在可执行文件目录右键打开终端,Open in Terminal
可以看到输入命令的路径已经自动更新为当前路径,省去了cd命令的麻烦。
使用命令文件可以查看文件的属性,这里有一个小技巧:tab键可以自动补全文件名,这对于像交叉工具链这种动辄几十个字符的文件名来说非常重要。
运行file命令看看它支持哪些平台,可以看到它只支持X86平台,也就是我们常用的PC都是X86平台的,所以肯定不能在正点Atom开发板上使用。
在快速体验手册中
第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里,注意正点Atom的帮助文档里提到了很多工具。
-> 开发板光盘 -> 5、开发工具 -> 1、交叉编译器 -> fsl-imx-x11-glibc-x86_64-meta-toolchain-q
将yocto编译出来的SDK工具包t5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh复制到Ubuntu虚拟机中(可以使用Winscp、FileZilla或者建立Samba复制到Ubuntu虚拟机中,本次假设你已经将脚本复制到Ubuntu虚拟机中)。
不管是什么工具,其实要实现的功能很简单:就是把Windows系统下的一个文件复制到Ubuntu系统中就可以了,相当于用U盘复制一个文件,然后在Ubuntu下找到,然后粘贴就可以了。
笔者推荐的方法是“共享文件夹”的方式。也就是在Windows系统下建立一个文件夹,让同样在Windows虚拟机下工作的Ubuntu可以访问它。这个操作在VMWARE中就可以完成。方法是在虚拟机中选择设置,然后选择“选项”,然后在“共享文件夹”下进行设置。
然后
这样我们在D盘下建立的共享文件夹ubuntu_share(随便起个名字)就可以被Ubuntu访问了。
我们将交叉编译工具链粘贴到Windows下的这个共享文件夹目录中,这样Ubuntu系统就可以访问它了。
这个共享文件夹目录在Ubuntu里哪里呢?在计算机--mnt--hgfs目录下,就可以看到我们刚刚定义的共享文件夹(笔者将其命名为ubuntu_share)。这样就不用再使用USB驱动了。
我们刚刚复制的文件就是正点Atom的交叉编译包,是.sh格式的,在Linux下就像是Windows下的.exe可执行文件格式,接下来我们进行安装。
在此目录中单击鼠标右键,选择“打开终端”,然后输入命令./f,并使用tab键完成。
完成文件名,即使很长,也会自动输入。
回车之后会提示安装到哪个目录,郑点Atom已经给我们设置了默认文件夹,就是/opt/fsl-imx-x11/4.1.15-2.1.0。
再按回车,就会自动安装到这个目录下。由于笔者已经安装过了,所以会提示覆盖,这里我们选择不覆盖。如果是第一次安装,就等着安装完成就行了。不用担心窗口里打印了多少行文字,都是自动完成的。就当做是Windows下安装程序的“进度条”就行了。
安装完成后在电脑--opt文件夹里会发现一个交叉编译工具链,为什么叫这么花哨的名字呢?笔者并不清楚,但是“交叉”和“链”这两个词确实给我带来了不少困惑。一想到交叉,我就觉得可能涉及到硬件连接,Ubuntu下连接开发板是不是需要“交叉线”?一想到“链”,我就想到特别复杂的一系列操作。总之,我很困惑,这个“交叉编译工具链”是不是操作起来特别难?
其实不然,交叉编译工具链只不过是一个花哨的名字而已。
我们可以把它看成是一个比turbo C稍微低一点的C语言编译工具(其实也没有那么低)。
它只是没有界面。
进一步来讲,我们可以将其理解为一个可以把C代码编译成能在郑电Atom Linux开发板上运行的程序的工具。
那具体怎么操作呢?当然是命令行了(正点Atom也建议使用命令行,虽然qtcreator经过一些配置也可以生成ARM可执行文件)。
我们知道在Linux下,如果要运行某个可执行文件,需要在相应目录下右键打开终端,然后使用./命令来运行。那么我们如何在其他文件夹(如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 调用。不过郑点 Atom 更推荐使用命令行。因为它太简单了,只需要设置环境变量,然后 qmake,再 make,就大功告成了。学习 Linux 的时候,一定要逼着自己去适应各种命令行操作。Qt 程序可以在不同平台上使用,但是不同平台要设置不同的编译工具。
4.在开发板上运行程序 4.1 参考文献
Ubuntu下如何下载程序到开发板?STM32时代可以用模拟器,但是Linux开发板没有模拟器,那怎么下载呢?可以参考网上的文章,有的用网线连接电脑和开发板,有的用U盘,本文推荐用U盘,原因是可以让初学者更直观的感受程序运行的样子。
Ubuntu下下载程序到开发板并执行_梁益昭先生的博客-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,并在mnt文件夹中显示USB驱动器的目录。
mount -t vfat /dev/sda1 /mnt
使用命令查看sda1的信息,USB盘挂载成功。
df -h
下图是挂载成功后的mnt文件夹内容,图片是开发板LCD的屏幕。此时还不能通过触摸屏运行程序,还是需要通过电脑上的串口助手发送指令才能运行程序。
在Windows的sscom中输入命令,进入mnt文件夹。
cd /mnt
接下来通过Windows sscom串口助手输入./命令,运行mnt文件夹下的可执行文件04_qputshbutton,这样程序就会运行起来。
./04_qpushbutton
运行效果如下图所示:
4.3 花生体验
我写的程序是qt程序,应该很容易编译,编译完之后就复制到开发板运行一下就可以了。但是还是遇到了不少坑,比如要用U盘来复制,而复制出来的内容无法通过开发板的触摸屏来操作,因为开发板运行的UI其实和我们写的那两个按钮状态是一样的,只是针对qt程序而言的。所以需要用上位机的串口助手来复制,而且复制前需要手动挂载U盘。看起来很复杂,其实并不复杂,只要照着做一次就能完全掌握。核心知识点其实就是文章里的一些说明,用什么软件,在什么系统下操作?是在Ubuntu下用还是在Windows下用?很多文章都没有说这些,本文试图让同学们参考尽可能少的资料,让他们不用脱离文章就能跟着步骤来。
以上只是基本步骤的描述,真正做出产品还需要把程序固化到硬件中,并设置为开机自动启动Qt程序,这些知识后面会陆续放出。
赠人玫瑰,手心留香。如果觉得这篇文章对你有帮助,请关注作者,继续分享有用的知识。