NXP

嵌入式Linux基于Qt开发GPIO应用

2019-07-12 13:26发布

By Toradex 秦海 1). 简介 基于Embedded Linux系统的嵌入式设备使用跨平台GUI开发工具Qt来开发嵌入式应用已经非常普遍,本文就以GPIO应用为示例演示下如何通过Qt的集成开发环境Qtcreator来开发嵌入式Linux应用. 本文所采用的硬件平台来自与Toradex发布的基于NXP iMX7 SoC的Colibri iMX7 ARM计算机模块配合Colibri Eva Board. 2). 准备 a). Toradex Colibri iMX7S (基于NXP iMX7S SoC)计算机模块配合Colibri Eva Board开发载板. b). Embedded Linux 使用基于OpenEmbedded框架重新编译的集成Qt5.5 的Toradex Linux image releaseV2.6.1版本以及对应的SDK.这个可以结合这里的说明自己进行编译, 也可以通过这里直接下载编译好的image和SDK文件. c). 合适的Qtcreator版本, 本文使用为3.1.1版本.   3). 软硬件安装 a). 由于只是简单展示利用Qt开发GPIO应用, 本文只使用一个GPIO来驱动Colibri Eva Board上面自带的LED. b). 硬件连接,将Colibri Eva载板X10连接器 SODIMM_127 和X21连接器 LED1连接,并去掉对应的X11 跳线帽。其他就是标准的串口网口等连接用于调试程序. c). 将上面准备好Linux image (如Colibri_iMX7_LinuxImageV2.6.1_20170220.tar.bz2) 按照这里的说明更新到Colibri iMX7计算机模块上面. d). 安装Qtcreator, 具体方法这里不赘述. e). 在Ubuntu开发主机上面, 运行下面命令安装SDK, 安装位置默认为”/usr/local/oecore-x86_64”, 当然也可以自行设置, 本文保留默认选项. ------------------------------ toradex@toradex-ubuntu: chmod a+x angstrom-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”添加GCC C++编译器, 其位置位于”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 codegen flags”设置为”‘${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 -> Qt Widgets 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”控件和一个”line edit”控件. 同时通过”go to slot” 添加”button” 的”clicked” 动作. d). 修改mainwindow header和source文件, 实现GPIO控制 ./ Hearder文件代码如下, 只是声明了几个要用的变量 https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.h ./ source文件代码如下,  在窗口初始化时候同时初始化GPIO (这里使用SODIMM 127作为GPIO输出pin), 另外在”clicked”下面处理按键反转GPIO输出的动作控制. https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.cpp e). 编译应用程序,讲编译号的可执行文件scp复制到Colibri iMX7模块系统上面执行,效果如下: