嵌入式Linux基于Qt开发GPIO应用
1).简介
基于Embedded Linux系统的嵌入式设备使用跨平台GUI开发工具Qt来开发嵌入式应用已经非常普遍,本文就以GPIO应用为示例演示下如何通过Qt的集成开发环境Qtcreator来开发嵌入式Linux应用.
本文所采用的硬件平台来自与Toradex发布的基于NXPiMX7 SoC的ColibriiMX7 ARM计算机模块配合ColibriEva Board.
2). 准备
a).Toradex ColibriiMX7S (基于NXPiMX7S SoC)计算机模块配合ColibriEva Board开发载板.
b). EmbeddedLinux 使用基于OpenEmbedded框架重新编译的集成Qt5.5的Toradex Linux imagereleaseV2.6.1版本以及对应的SDK.这个可以结合这里的说明自己进行编译,也可以通过这里直接下载编译好的image和SDK文件.
c).合适的Qtcreator版本,本文使用为3.1.1版本.
3). 软硬件安装
a).由于只是简单展示利用Qt开发GPIO应用,本文只使用一个GPIO来驱动ColibriEva Board上面自带的LED.
b).硬件连接,将ColibriEva载板X10连接器SODIMM_127 和X21连接器LED1连接,并去掉对应的X11跳线帽。其他就是标准的串口网口等连接用于调试程序.
c).将上面准备好Linux image (如Colibri_iMX7_LinuxImageV2.6.1_20170220.tar.bz2)按照这里的说明更新到ColibriiMX7计算机模块上面.
d).安装Qtcreator, 具体方法这里不赘述.
e).在Ubuntu开发主机上面,运行下面命令安装SDK, 安装位置默认为”/usr/local/oecore-x86_64”,当然也可以自行设置, 本文保留默认选项.
------------------------------
toradex@toradex-ubuntu:chmod a+xangstrom-glibc-x86_64-armv7at2hf-vfp-neon-v2015.12-toolchain.sh
toradex@toradex-ubuntu:./angstrom-glibc-x86_64-armv7at2hf-vfp-neon-v2015.12-toolchain.sh
------------------------------
4).Qtcreator配置
a).打开Ubuntu开发主机命令行,通过下面命令启动Qtcreator
------------------------------
toradex@toradex-ubuntu: source/usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi
toradex@toradex-ubuntu: $ echo$OE_QMAKE_CXX
arm-angstrom-linux-gnueabi-g++-march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard--sysroot=/usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi
toradex@toradex-ubuntu:qtcreator
------------------------------
b).在qtcreator界面下,进入Tools->Options选项菜单,进入Device选项
./点击”Add”, 并选择”Generic Linux Device”添加新设备,设置好设备名字和IP地址,用户名默认为”root”,密码空.
c). 进入Build & Run菜单选项
./首先进入Qt Versions, 点击”Add”添加,指定SDK qmake, 其位置位于”/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/qt5/qmake”.
./进入Compilers, 点击”Add”添加GCCC++编译器,其位置位于”usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-g++”,不过更新版本的Qtcreator下这里还需要添加C编译器,也在同一目录下,为”arm-angstrom-linux-gnueabi-gcc”. 另外其他配置上”Platform codegenflags”设置为”‘${CFLAGS}’”,“Platform linker flags”设置为”‘${LDFLAGS}’”.
./进入Debuggers, 点击”Add”添加GDB,其位置位于”/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gdb”
./进入Kits, 点击”Add”添加,如下讲上述设定的内容适配,新版本Qtcreator在Compiler这里会分开C和C++分别设定.
5). Qtcreator GPIO应用开发
a). Qtcreator 创建一个新项目, New Project-> Applications -> QtWidgets Application -> Location (任意)-> Kit (指定上面创建的kit)-> Class Information (默认).
b). 在qtcreator项目下新建GPIO操作相关的header和source文件
./ Header 文件代码如下,主要定义一些全局环境变量和声明GPIO基本的操作函数
https://github.com/simonqin09/QtGPIOProject/blob/master/GPIOSet.h
./ source文件代码如下,主要是GPIO基本操作函数
https://github.com/simonqin09/QtGPIOProject/blob/master/GPIOSet.cpp
c). 进入Forms -> mainwindow.ui, 如下编辑界面,添加一个”button”控件和一个”lineedit”控件.同时通过”go to slot” 添加”button” 的”clicked” 动作.
d). 修改mainwindow header和source文件,实现GPIO控制
./ Hearder文件代码如下,只是声明了几个要用的变量
https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.h
./ source文件代码如下, 在窗口初始化时候同时初始化GPIO(这里使用SODIMM127作为GPIO输出pin),另外在”clicked”下面处理按键反转GPIO输出的动作控制.
https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.cpp
e). 编译应用程序,讲编译号的可执行文件scp复制到ColibriiMX7模块系统上面执行,效果如下:
提交
在 Linux 系统上 Docker 容器的性能影响
上游优先 - Toradex 采用主线内核支持
NXP iMX8M Plus M7核心FreeRTOS开发
嵌入式Linux上使用Ramoops
使用容器编译Yocto镜像