在Wind River Linux上开发Qt5应用程序
由Nathan Hartman.
介绍
风河Linux提供为为嵌入式设备构建灵活,稳定和安全的平台至关重要的技术。
基于yocto项目的OpeneMbedded版本,它旨在让您自定义平台,仅包含您需要的包和功能。由Bitbake提供支持,它提供了通过以下可重复配方从源构建整个Linux发行版的能力。这真的很强大,但可以是外国应用程序开发人员,已经拥有了他们舒适的工作流程。
开发人员构建图形用户界面(GUI)有自己的一组他们依赖的工具。通常,他们更喜欢使用他们正在使用的语言和框架量身定制的集成开发环境(IDE)。通常,此IDE和它使用的工具在其构建的同一平台上自然运行。
幸运的是,这些开发人员仍然可以在风河Linux上这样做。本教程描述了与GCC Toolchain和Qt Creator一起建造的Wind River Linux,以启用本机应用程序开发。
需求
构建整个平台需要开始一些简单的要求。许多Linux发行版是自托管的,这意味着您只能用以前的发行版构建发行版的下一个版本。
Wind River Linux支持各种各样的主机。官方支持的主机列表如下,但已经测试了许多较新的版本并已知工作。
Wind River Linux LTS 19的支持分发:
- CentOS 7.6
- Fedora 30.
- opensuse Leap 15.
- redhat Enterprise Linux 7.6和8.0版本
- SUSE Linux Enterprise Desktop 15
- Ubuntu Desktop 16.04和18.04 LTS
有关必要的Linux主机系统库和可执行文件的详细信息,请参阅文件。
例如,在Ubuntu Systems上,必须安装以下软件包:
$ sudo apt安装gawk wget git-core diffstat解压缩texinfo gcc-multilib build-ensigs chrpath socat cpio python python3 python3-pip python3-pexpect xz-ilms debianutils iputils-ping libsdl1.2-dev xterm文件git bmap-tools coreutils分割了e2fsprogs
此外,部署步骤还需要root或sudo访问部署到SD卡或USB闪存设备。
最后,本教程已经验证了树莓派4和英特尔NUC设备(NUC5i3MYBE, NUC6i7KYK, NUC7i5DNK)。这些指令应该适用于其他设备,但我们测试了这些设备,以确保硬件加速启用最高性能。
克隆Wind River Linux存储库
第一步是克隆风河Linux GitHub库。
为创建Wind River Linux映像所需的工具创建一个目录。从现在开始,这个目录将被称为父目录:
$ mkdir wrlinux_qt
在Linux终端中,使用以下命令将库克隆到build文件夹中:
$ git clone https://github.com/windriver-labs/wllinux-x.git
注意:WRLINUX-X的克隆默认为WRLINUX_10_19_BASE分支,最新更新标记为标记。Raspberry PI 4 BSP需要WRLinux_10_19_Base_update0003或更大。使用wrlinux_10_19_base_update0007编写本教程。
为您的设备配置构建
本节介绍Wind River setup.sh工具的使用方法,以方便对构建进行配置。我们将使用它来指定目标板,下载所需的层,并预填充配置文件。
在wrlinux-x被克隆到的父目录(wrlinux_qt)中,运行setup.sh脚本。接受最终用户许可协议(EULA)。
树莓派4使用:
$ ./wllinux- x/setup.sh - machine bcm-2xxx-rpi4-dl-layers
对于英特尔NUC使用:
$ ./wllinux-x/setup.sh --machine Intel-x86-64-DL层
注意:——machine标志指定它应该包含你的设备的板支持包,——dl-layers标志现在下载包源代码,而不是稍后构建时下载。
一段时间后,你会看到:
取出项目:100%(16/16),完成。同步工作树:100%(16/16),完成。
此时,应生成以下文件和目录:
$ ls -al总计64 drwxr-xr-x 8 nhartman用户4096 May 25 16:53。drwxr-xr-x 3 nhartman users 4096 May 25 15:44 ..drwxr-xr-x 5 nhartman用户4096年5月25日16:53本lrwxrwxrwx 1 nhartman用户5月22日25日16:53 bitbake - >层/ oe-core / bitbake drwxr-xr-x 5 nhartman用户4096年5月25日16:42配置-rw-r - r - 1 nhartman用户2279年5月25日16:42 default.xml lrwxrwxrwx 1 nhartman用户89年5月25日16:42 environment-setup-x86_64-wrlinuxsdk-linux - - - >/home/nhartman/wrlinux_qt/bin/buildtools/environment-setup-x86_64-wrlinuxsdk-linux drwxr-xr-x 8 nhartman用户4096年5月25日16:53 . -rw-r - r - 1 nhartman用户111年5月25日16:42 .gitconfig -rw-r - r - 1 nhartman用户147年5月25日16:42 .gitignore -rw-r - r - 1 nhartman用户61年5月25日16:42 .gitmodules drwxr-xr-x 16 4096年5月25日16:53 nhartman用户19层lrwxrwxrwx 1 nhartman用户5月25日16:53 meta - >层/ oe-core / 32元lrwxrwxrwx 1 nhartman用户5月25日16:53 oe-init-build-env - >层/ oe-core / oe-init-build-env -rw-r - r - 1 nhartman用户2882年5月25日16:42 README drwxr-xr-x 7 nhartman用户4096年5月25日16:53 .repo -rw-r - r - 1 nhartman用户205年5月25日16:42 .repo_.gitconfig。. json lrwxrwxrwx 1 nhartman users 22 May 25 16:53 scripts -> layers/oe-core/scripts -rw-r——r——1 nhartman users 73 May 25 16:42 .templateconf drwxr-xr-x 5 nhartman users 4096 May 25 13:53 wrlinux-x . js
运行父目录中生成的环境设置脚本。它们将创建和更改为构建子目录。
$。./environment-setup-x86_64-wllinuxsdk-linux $。./oe-init-build-env你没有conf / local.conf文件。因此,已为您的一些默认值创建此配置文件。您可能希望将其编辑为例如其他计算机(目标硬件)。有关详细信息,请参阅conf / local.conf作为详细配置选项。你没有cenf / bblayers.conf文件。因此,已为您的一些默认值创建此配置文件。要将其他元数据图层添加到配置中,请将条目添加到conf / bblayers.conf。Yocto项目具有广泛的文档,关于OE,包括参考手册,可以找到:http://yctoproject.org/documentation有关Openembedded的更多信息,请参阅他们的网站:http://www.openembedded.org/这个项目被配置了 with the following options: --machine bcm-2xxx-rpi4 --dl-layers Common Wind River images are: wrlinux-image-small (suggests distro: wrlinux and feature/busybox) wrlinux-image-core (suggests distro: wrlinux) wrlinux-image-std (suggests distro: wrlinux) wrlinux-image-std-sato (requires distro: wrlinux-graphics) Common Yocto Project images, typically built with distro poky, are: core-image-minimal core-image-base core-image-sato You can also run generated qemu images with a command like 'runqemu qemux86-64'
这些脚本将为构建工具设置环境变量,并生成一些预构建配置文件。
注意:如果先前已构建图像,则运行这些脚本不会覆盖现有配置。重命名,移动或删除以前的配置文件以确保生成正确的配置文件。
修补项目目录
本节介绍如何使用Git添加所需的模板文件。
将meta-qt5和meta-qt5-extra存储库克隆到my-layers目录中
$ mkdir my-layers $ git clone -b Zeus https://github.com/meta-qt5/meta-qt5.git my-layers/meta-qt5
下载下面列出的所需补丁wrlinux_qt / build.目录:
- 0001-wrlinux-template-add-template-qt5-for-wrlinux.patch
- 0002-wrlinux-template-add-lxqt-support-for-wrlinux.patch
- 0001 - polkit qt - 1 -修正-编译- error.patch
Credit通过Quanyang Wang来到我的同事,为创建修补程序在Wind River Linux上集成LXQT桌面。
在Meta-Qt5-extration目录中,应用第一个修补程序:
$ CD My-Players / Meta-Qt5 - 额外$ Git AM ../../0001-Polkit-Qt-1-fix-compile-Error.patch $ CD $ BuildDir
在wrlinux层目录下应用wrlinux补丁:
$ cd ../layers/wllinux $ git am ../../0001-wllinux-template-add-template-qt5-for-wlinux.patch $ git am ../../0002-wllinux-template-dd-lxqt-support-for-wrlinux.patch $ cd $ builddir
添加Qt5层,GCC Toolchain和桌面环境
本节描述如何克隆meta-qt5和meta-qt5-extra层存储库。此外,如何添加图层,GCC工具链和桌面环境到映像。
使用Bitbake-Tallers工具,将图层添加到conf / bblayers.conf文件。这允许BitBake在构建图像时找到自定义层。此外,如果使用Raspberry PI添加Raspberry PI图形层以启用硬件加速。
$ bitbake-layers add-layer my-layers/meta-qt5-extra . $ bitbake-layers add-layer my-layers/meta-qt5-extra
如果构建树莓派,添加另外的硬件加速:
$ bitbake-tayers添加图层../layers/bcm-2xxx-rpi/rpi ~graphics/
编辑conf/local.conf配置文件,添加GCC工具链、Qt5所需包和桌面环境。在conf/local.conf文件的末尾追加以下几行:
BB_NO_NETWORK = "0" BB_NUMBER_THREADS = "16" PARALLEL_MAKE = "-j 16" WRTEMPLATE = "feature/qt5 feature/lxqt" IMAGE_INSTALL_append += "\ packagegroup-core-buildessential \ xserver-xorg \ xserver-xorg-extension-glx \ mesa \ mesa-demos \ openssh \ git" DISTRO_FEATURES_append += " x11 opengl polkit"
注意:本教程使用LXQT桌面,但如果您希望使用Raspberry PI Foundation Image和Raspberry PI Foundation Image上的桌面功能,请替换具有功能/ XFCE的功能/ LXQT。
如果为树莓派构建,也添加以下内容来启用硬件加速:
LICENSE_FLAGS_WHITELIST = "商业"
如果为raspberry pi构建,编辑../layers/bcm-2xxx-rpi/recipes-bsp/boot-config/boot-config/cmdline.txt文件要调整内核参数。
$ cat ./layers/bcm-2xxx-rpi/recipes-bsp/boot-config/boot-config/cmdline.txt dwc_otg. txtLpm_enable =0 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 root twwait ip=dhcp $ echo 'dwc_otg. exe 'root=/dev/mmcblk0p2 rootfstype=ext4 roottwwait ' > ../layers/bcm-2xxx-rpi/recipes-bsp/boot-config/boot-config/cmdline.txt
注意:这些变化确保控制台输出出现在HDMI显示屏上,引导序列不会等待DHCP连接。
建立映像
本节介绍建设风河Linux图像
构建您选择的形象。如在步骤4中的图像中所见,有几个建议的图像。我们将构建Wrinux-Image-STD-Sato,这是一个针对桌面环境进行优化的图像。
$ bitbake wrlinux-image-std-sato处理风河模板文件...解析配方:2%| #####
一段时间后,您将在构建完成后看到以下内容:
初始化任务:100 % |######################################################################| 时间:0:00:07 Sstate简介:想3536发现目前0错过3536 0(0%,0%完成)注:执行任务注意:Setscene注意:任务完成任务简介:尝试4643任务的0不需要重新运行成功。
识别USB设备
本节介绍如何使用FDISK识别USB SD卡适配器或USB闪存驱动器。
使用fdisk命令列出Linux检测到的块设备:
$ sudo fdisk -l
通过型号名称或容量识别您的设备。
磁盘/ dev / sdx:7.43 gib,7969177600字节,15564800扇区磁盘型号:SD卡读卡器单元:1 * 512 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I / O大小(最小/最优):512字节/ 512字节DiskLabel类型:DOS磁盘标识符:0x70E121A4设备启动启动端扇区尺寸ID类型/ DEV / SDX1 * 8192 532479 524288 256M C W95 FAT32(LBA)/ DEV / SDX2 5324801133739 2601260 1.2G 83 Linux
注意:在这种情况下,设备是'/dev/sdx',通过容量和'磁盘型号'看到。设备名称应该采用'/dev/sdx'的格式,其中x是一个特定于您的机器的字母。
闪烁图像
本节描述如何编写生成的.wic和.wic。bmap或.iso文件到SD卡或USB闪存驱动器。
对于覆盆子pi 4:
定位bitbake生成的图像。相对于构建目录,映像路径是:
TMP-GLIBC /部署/图像/ BCM-2xxx-RPI4
具体来说,我们需要WRLINUX-IMAGE-STD-SATO-BCM-2xxx-RPI4.WIC和WRLINUX-IMAGE-STD-SATO-BCM-2xxx-RPI4.WIC.BMAP文件。
使用BMAPTOOL,将生成的文件闪光到USB设备
$ sudo bmaptool copy --bmap
/image_name-bcm-2xxx-rpi4.wic.bmap /image_name-bcm-2xxx-rpi4.wic / dev / sdx 高达几分钟(取决于USB设备的速度),您应该看到:
$ sudo bmaptool copy --bmap wrlinux-image-std-bcm-2xxx-rpi4.wic.bmap wrlinux-offic-std-bcm-2xxx-rpi4.wic / dev / sdx [sudo] nhartman的密码:bmaptool:信息:块地图格式版本2.0 BMAPTOOL:INFO:391718尺寸4096(1.5 GIB),映射247338块(996.2 MIB或63.1%)BMAPTOOL:INFO:复制图像'WRLINUX-IMAGE-STD-BCM-2xxx-RPI4.wic'通过BMAP文件'wrlinux-image-std-bcm-2xxx-rpi4.wic.bmap'bmaptool:Info:100%复制的BMAPTOOL:INFO:同步'/ dev / sdx'bmaptool:信息:复制时间:43.7s,复印速度22.1 MIB /秒
对于英特尔NUC:
定位bitbake生成的图像。相对于构建目录,映像路径是:
TMP-GLIBC /部署/图像/英特尔-X86-64
具体来说,我们需要wrlinux-image-std-sato-intel-x86-64.iso文件。
使用' dd ' Flash你的图像
$ sudo dd if = path_to_image / wrlinux-std-sato-intel-x86-64.hddimg = / dev / sdx status =进度&& sync
在某些情况下,dd可能在从内存向USB写入时出现挂起。检查进展与:
$ sudo cat /proc/meminfo | grep脏
当写完成时,它应该接近数百个。
调整根分区和文件系统的大小
本节介绍如何调整根文件系统大小以占用SD卡的全部容量。插入USB设备,运行以下命令,用设备替换“/ dev / sdx”。
- 将第二个分区的大小调整为存储设备的100%。
$ sudo parted / dev / sdx resizepart 2 100%信息:您可能需要更新/ etc / fstab。
- 在第二个分区上运行ext2 / 3/4文件系统检查工具以修复任何潜在问题。
$ sudo e2fsck-f / dev / sdx2 e2fsck 1.45.3(14-jul-2019)通过1:检查inode,块和尺寸通过2:检查目录结构通过3:检查目录连接通行证4:检查参考计数通过5:检查组摘要信息root:52648/1796640文件(无连续0.4%),662799/3723264块
- 使用Resize2FS调整Ext4文件系统的大小以展开它并填充整个分区。
$ sudo resize2fs / dev / sdx2 resize2fs 1.45.3(2019年7月14日 - 2019)调整文件系统的大小大小/ dev / sdx2到373264(4k)块。/ dev / sdx2上的文件系统现在是3723264(4k)块长。
结果
对于LxQt桌面,登录和密码是' wrluser ', $HOME目录是/ HOME /wrluser。
登录后,您将使用LXQT桌面呈现:
在运行示例之前
示例应用来自Qt Git存储库。克隆存储库要求您具有工作网络连接。如果由于任何原因您的设备未自动获得动态IP地址,则可以使用以下命令获取一个。
点击左下角的图标打开QTerminal,然后点击系统工具> Qterminal。
示例应用程序:glxgears
本节演示mesa-demos glxgears应用程序。
点击左下角的图标打开QTerminal,然后点击系统工具> Qterminal。
执行glxgears.尝试OpenGL示例。如果硬件加速正常工作,则应在覆盆子PI 4上报告每秒60帧。
示例应用:OpenGLWindow
本节演示了来自QTBase存储库的OpenGL示例。
使用git来克隆包含OpenGL示例的存储库
$ git clone - depth 1 -b dev git://code.qt.io/qt/qtbase.git克隆到'qtbase'...远程:计数对象:23735,完成。遥控:压缩对象:100%(18386/18386),完成。遥控器:总计23735(Δ5511),重新使用16062(Delta 3270)接收对象:100%(23735/23735),63.00 MIB |3.92 MIB / s,完成。解决Δ:100%(5511/5511),完成。更新文件:100%(23031/23031),完成。
从qtbase目录中复制示例文件夹,以便Qt Creator允许我们构建项目。
$ cp -r qtbase/examples $HOME
从GUI启动Qt Creator
示例应用:QTCluster
本节展示了QTBase文档存储库的QtCluster示例。
打开一个终端,克隆包含Qt文档的库:
git clone git://code.qt.io/qt/qtdoc.git --branch 5.10克隆到'qtdoc'...远程:计数对象:24976,完成。遥控器:Comrpessing对象:100%(12628/12628),完成。遥控器:总计24976(达达17217),重新使用17635(达达11944)接收对象:100%(24976/24976),42.44 MIB |6.23 MIB / s,完成。解决Δ:100%(17217/17217)完成。
从GUI启动Qt Creator
打开qtcluster-base.pro文件通过选择文件>打开文件或项目从菜单。
导航$ home / qtdoc / doc / src / src / scippets / qtcluster / qtcluster-base.pro。然后单击,打开。
结论
今天的嵌入式设备比以往任何时候都更强大,能够显示漂亮的图形用户界面。这使得GUI开发人员可以直接在设备上工作,这在以前可能是不可能的。通过在嵌入式设备上提供支持硬件加速的驱动程序,它有助于简化开发过程并加速开发。
参考文献
所有产品名称,徽标和品牌都是其各自所有者的财产。
本软件中使用的所有公司,产品和服务名称仅用于识别目的。Wind River是Wind River Systems的注册商标。担保声明/不支持:根据风河标准软件支持和维护协议或其他方式,风河不为本软件提供支持和维护服务。除非适用法律要求,风河公司提供软件(和每个贡献者提供其贡献)在“是”的基础上,没有任何种类的保证,无论是明示的或暗示的,包括但不限于,所有权,不侵权,适销性,或适合特定目的的任何保证。您完全有责任决定使用或重新分发软件的适当性,并承担与您行使许可证下的许可相关的风险。
OpenGL是Silicon Graphics, Inc.在美国和其他国家的注册商标。
QT是美国和其他国家QT有限公司的注册商标。