摘要:学Linux不难,难的是没有找对教程,没有人快速的带你。开发板买了之后就放在那里吃灰,看视频也看不下去,看文档又看不懂,太难了!本文以通俗易懂的方式讲一下在正点原子Linux开发板上跑一个qt程序的基本步骤,争取让初学者能够在半天的时间跑通第一个程序。
硬件:正点原子 Linux mini开发板
软件:win10,vmware,ubuntu,qtcreator
运行效果如下图所示,就是在正点原子默认的UI界面基础上,运行了一个serialport
例程。
先说一下初学Linux嵌入式开发的感受,学习STM32时 ,熟悉了Keil或IAR这个集成开发环境,也可以用简单的寄存器来控制某一个引脚。上手做Linux开发之后,首先被几十个G的安装镜像吓住了,感觉Linux编译起来特别复杂很难。还有就是密密麻麻的动辄上百个字符的命令,对于习惯图形化开发的我们来说,实在是感到太难了。还有卖家那动不动就几十个小时的视频,视频还分好几期:驱动开发、应用开发、Qt开发等。

每个视频都又长又硬,我本开买个板子是想玩一下,结果要看这么多视频,瞬间就不想学了,结果从入门到放弃,板子放那里吃灰。本文的目的就是让大家抛开视频,把这个十几小时的视频浓缩成一篇文章,让你快速体验嵌入式Linux的开发乐趣!当然我建议官方也出一个快速把玩教程,让开发者快速体验乐趣,这样我想效果会更好!
一、下载资料
首先去正点原子论坛下载资料,注意不要下载视频,视频你可以在B站随时随地看,没人会这么无聊把视频下载下来吧!

你就可以下载你想要的的资料了,资料大多是百度网盘,如果不开会员的话会很慢,建议下载资料时买个临时的会员下载,资料下载完了进行下一步。
二、安装虚拟机
安装虚拟机基本在正点原子的大多数PDF教程里面都有,这里就不需要在多说了。如果看文章不清楚,也可以去B站看视频。

建议初学者仔细的看一遍,如果装错了,没事大不了删了在再装一次。
在安装ubuntu这个步骤中,强烈建议直接下载正点原子已经打包好qtcreator的镜像,将这个镜像安装完毕后,就不用再一步步配置了。对于需要快速跑通第一个linux程序的同学来说,可以避免学的越细越糊涂的陷阱。跳过这些繁琐的步骤,可以让我们快速站在全局高度理解整个开发过程。
这是啥意思呢?就是你新安装的ubuntu不是啥环境啥软件都没有嘛,你需要自己安装一遍,比较麻烦。但是你可以用别人的正点原子的他们电脑里面的那个ubuntu系统,他把这个系统打包好了给你,你只需要把他的打包好的系统安装你的虚拟机就可以了,怎么样?是不是很神奇,你还可以在你的电脑安装别人的电脑系统。这个系统在哪里呢?

下载下来是这样

然后按照这里的说明就可以安装正点原子给你打包好的系统了。

文件名:【正点原子】I.MX6U 虚拟机使用参考手册V1.3.pdf
三、配置网络环境
你安装完ubutn后很可能不能上网,这个问题每个人遇到的都不一样,建议按照正点原子的教程把你的windows、ubuntu、开发板让他们网络连接都正常。可以参考:【正点原子】I.MX6U网络环境TFTP&NFS搭建手册V1.3.1.pdf

如果文档看不明白也有视频,对照着视频一步一步也可以。

所以网络这一块你也不需要担心了。
四、安装qtcreator
同样安装qtcreator软件可以参考:【正点原子】I.MX6U嵌入式Qt开发指南V1.1.pdf

在ubuntu安装完qtcreator软件后,你就可以像windows下编写程序,然后在ubuntu下面运行了。但是我们的目的是让qt软件运行在我们的arm开发板下面对吧!这时我们自然想到在ubuntu下面安装一个编译工具把程序编译成可以在arm开发板运行的代码吧!这个就叫做“交叉编译链”。交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。
五、安装qt交叉编译器
可以参考:【正点原子】I.MX6U 出厂系统Qt交叉编译环境搭建V1.6.pdf第一章的内容,安装交叉编译器,你只有安装了这个,你才能在ubuntu中编译出可以在arm开发板上运行的代码。这一步必须做。而且还要按照她的教程一步一步来。

5.1 编译器拷贝
把开发板光盘 A-基础资料->5、开发工具->1、交叉编译器->fsl-imx-x11-glibc-x86_64-meta- toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
拷贝到 Ubuntu 虚拟机。
拷贝软件可以用MobaXterm
软件,这个软件的使用可以参考这篇文章:2022第一篇文,全能终端神器MobaXterm

如下图本文已经把交叉编译工具拷贝到了Ubuntu 虚拟机。

执行下面的指令修改脚本的权限,修改权限后可以看到此脚本颜色显示改变,说明修改成功。
chmod u+x fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
直接执行脚本安装交叉编译工具,连续敲下两次回车键确认,再输入用户密码即可。本次安装的目录为脚本所指定的默认安装的目录,后面的内核编译环境的交叉编译都是按这个安装目录去操作。

5.2 配置环境变量
我们知道,在linux下,如果运行一个可执行文件,需要在对应目录下右键打开终端,然后./
指令运行它,那么我们在其他文件夹下运行一个指定的程序呢?
当然可以,就是用到“环境变量”。没错,在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
指令查看环境变量,出现这些字样的配置选项之后,就可以了。它表示我们已经将刚安装的“交叉编译工具链”设置到环境变量了。

使用arm-poky-linux-gnueabi-gcc -v
指令可以查看 gcc 版本,表明环境变量已经生效。

OK,至此你的qt交叉编译器就安装好了。
5.3 安装交叉编译环境
上面你只是在ubuntu下你装了交叉编译器器,想编译 Qt 应用程序在开发板上运行起来,那么还需要搭建交叉编译环境,使用 ARM平台的交叉编译器编译的程序才能在I.MX6U 开发板上运行起来。
主要就是在 配置 Qt Creator中配置Kits,Kit 译作套件,也就是开发编译环境套件,可以搭建不同平台的套件,以不同的套件编译出不同平台的应用程序,也验证了 Qt 跨平台的特性!如果你安装了Android的套件,你还可以在你的手机上运行qt程序。
参考文档:【正点原子】I.MX6U 出厂系统Qt交叉编译环境搭建V1.6.pdf 2.3小节。
这里我们需要在脚本里写入设置使能环境变量的指令,首先打开此脚本。
sudo vi /opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh
在qtcreator.sh
里的第一行插入如下指令,如下图所示。
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

保存脚本文件(ESC : wq)。使用如下指令打开Qt Creator。“&”的作用是后台运行
/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh &

5.4 安装kits
在你安装qtcreater软件后默认只有这一个kits,然后按照教程搭建另外两个kits,其中ATK-I.MX6U是用来大imx6ull ARM平台运行的套件。IMX6U-rsync是用来网络调试下载程序到开发板的套件,就是你在qtcreater上面编译好后,点击运行,就会直接在开发板上main显示你的程序效果。

在 Qt Creator 中默认情况下,会使用 sftp 或 rsync 发送程序到板卡。由于正点原子 I.MX6U 出厂 Qt 文件系统(文件系统 V1.9 及之后的)里有 rsync 指令,因此可以很方便地使用此方式进行 Qt 远程调试。首先我们要确认下当前出厂文件系统版本号,在出厂系统执行以下指令。
cat /etc/version

如果文件系统不是 V1.9 的,或者不支持 rsync 指令,请去网盘下载最新的出厂系统,使用最新的系统来进行。
设置开发板静态 ip
由于LAN8720PHY 网络芯片没有MAC地址,系统启动时会生成随机MAC地址给网络使用。每次都生成一个MAC地址,导致每次开机网络获取的ip不是固定的。(v2.3 版本文件系统已固定一个随机MAC地址,不会因每次开机改变,请更新到最新文件系统)所以我们要设置给它一个静态的ip,不因MAC地址的改变而改变,设置固定ip方法调试。开发板启动时会自动获取ip,最简单的方法是直接设置一个ip给它。这样我们就在出厂文件系统里/etc/rc.local 文件里如图位置添加以下文件。
vi /etc/rc.local
添加以下内容,请根据个人使用的路由器,设置相应网段的ip地址。下图为设置 eth0 的静态ip地址。请注意这个 ip 与其他设备的ip冲突!
PATH=/sbin:/bin:/usr/sbin:/usr/bin
ifconfig eth0 192.168.1.115 netmask 255.255.255.0
route add default gw 192.168.1.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf

这样之后没每次开发板连接网线上电后,开发板的IP地址就为192.168.1.115
。
加下来参考 【正点原子】I.MX6U 出厂系统Qt交叉编译环境搭建V1.6.pdf 2.5.1小节,完成rsync方式Qt远程调试kits安装。

六、实战开搞
我们打开正点原子自带的例程,这里以Qt/03/03_serialport为例。双击03_serialport.pro
。

打开后选择IMX6U-rsync套件

打开后软件会自动编译,一般是没有错误的,直接点击左下角的绿色三角号编译运行。

然后你就可以在开发板上面看到神奇的一幕,你的上位机跑到开发板上面了,之后你连接开发板上面的串口就可以愉快的玩耍了。
注:因为开发板有正点原子的开机qt桌面,你可以禁止它不让他显示,参考如下:

最终效果:
怎么样?可能你不知道为啥这么做,但是学习一个新东西最快的就是先玩起来,反向学习才能增加学习的兴趣!
Good respond in return of this issue with solid arguments and explaining everything concerning that. Gregorio Cranson
Pretty! This has been an extremely wonderful post. Thank you for supplying these details. Adolfo Galeotti
Very good article! We are linking to this great article on our site. Malcolm Medious
For latest information you have to pay a quick visit web and on the web I found this website as a finest web site for most up-to-date updates. Trenton Respicio
Hi, I want to subscribe for this web site to get hottest updates, thus where can i do it please assist. Toby Ninos
I really liked your blog article. Much thanks again. Cool. Dong Ruhman
Wonderful, what a website it is! This blog provides helpful facts to us, keep it up. Dallas Jagneaux
Hello mates, good post and good urging commented at this place, I am really enjoying by these. Eldon Dopf
Excellent post! We will be linking to this particularly great article on our site. Keep up the great writing. Ronny Westling
Heya this is kinda of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have to manually code with HTML. Rolando Ollhoff
This paragraph is genuinely a nice one it helps new the web people, who are wishing for blogging. Florencio Nez
Someone necessarily assist to make severely articles I might state. Anderson Uutela
I really like and appreciate your article. Much thanks again. Awesome. Hiram Lefore
I am so grateful for your blog. Much thanks again. Want more. Jonathon Sorrell
I do follow both of you already! Lucky me! Viola from Twelfth Night. Tine Marchall Moyers
Hi my friend! I want to say that this post is amazing, great written and include almost all vital infos. I would like to see more posts like this. Joey Lawer
We can see that we need to develop policies to deal with this trend. Mohamed Penrod