2020年5月29日 开源

在Wind River Linux上开发Qt5应用程序

由内森•哈特曼

Nathan_Hartman-empshot-small”></p>
          <h2 id=介绍

风河系统公司Linux为您的嵌入式设备构建一个灵活、稳定和安全的平台提供必要的技术。

基于Yocto项目的openenembedded版本,它可以让你定制自己的平台,只包含你需要的包和特性。通过bitbake的支持,它提供了通过遵循可重复的食谱从源代码构建整个Linux发行版的能力。这是非常强大的,但是对于已经有了自己熟悉的工作流的应用程序开发人员来说可能是陌生的。

构建图形用户界面(GUI)的开发人员有他们自己依赖的一组工具。通常,他们更喜欢使用与他们所使用的语言和框架相适应的集成开发环境(IDE)。通常情况下,这个IDE和它使用的工具在它们所构建的相同平台上本机运行。

幸运的是,这些开发人员仍然可以在Wind River Linux上这样做。本教程描述了使用GCC工具链和包含的Qt Creator来构建Wind River Linux,以支持本地应用程序开发。

需求

构建整个平台需要开始一些简单的要求。许多Linux发行版是自托管的,这意味着您只能用以前的发行版构建发行版的下一个版本。

Wind River Linux支持多种主机。下面是官方支持的主机列表,但是许多更新的版本已经经过测试,并且已知可以工作。

Wind River Linux LTS 19的支持分发:

  • CentOS 7.6
  • Fedora 30
  • openSUSE飞跃15
  • Red Hat Enterprise Linux 7.6和8.0
  • SUSE Linux Enterprise Desktop 15
  • Ubuntu桌面16.04和18.04 LTS

有关必要的Linux主机系统库和可执行文件的详细信息,请参阅文档

例如,在Ubuntu系统上必须安装以下软件包:

$ sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputills -ping libsdl1.2-dev xterm file git bmap-tools coreutils parted e2fsprogs

此外,部署步骤需要root或sudo访问权限,以便部署到SD卡或USB闪存设备。

最后,本教程已被验证为覆盆子PI 4和英特尔NUC设备(NUC5I3MYBE,NUC6I7KYK,NUC7I5DNK)。这些说明应该在其他设备上工作,但我们专门测试了这些设备,以确保启用了硬件加速以进行最佳性能。

克隆风河Linux存储库

第一步是克隆风河Linux GitHub库

  1. 为创建Wind River Linux映像所需的工具创建一个目录。从现在开始,这个目录将被称为父目录:

    $ mkdir wrlinux_qt
  2. 在Linux终端中,使用以下命令将存储库克隆到Build文件夹中:

    $ git clone https://github.com/WindRiver-Labs/wrlinux-x.git

    注意:wrlinux-x的一个克隆默认为WRLINUX_10_19_BASE分支,并标记了最新的更新。树莓派4 BSP需要WRLINUX_10_19_BASE_UPDATE0003及以上版本。本教程使用WRLINUX_10_19_BASE_UPDATE0007编写。

为您的设备配置构建

本节介绍Wind River Setup.sh工具的使用,以便于构建配置。我们将使用它来指定目标板,下载所需的图层,并预先填充配置文件。

  1. 在Wrlinux-x被克隆到(wrlinux_qt)中,运行setup.sh脚本。接受最终用户许可协议(EULA)。

    树莓派4使用:

    $ ./wrlinux-x/setup.sh——machine bcm-2xxx-rpi4——dl-layers

    对于Intel NUC的使用:

    $ ./wllinux-x/setup.sh --machine Intel-x86-64-DL层

    注意:——machine标志指定它应该包含你的设备的板支持包,——dl-layers标志现在下载包源代码,而不是稍后构建时下载。

    过一段时间,你会看到:

    获取项目:100%(16/16),完成。同步工作树:100%(16/16),完成

    此时,应生成以下文件和目录:

    $ ls -al total 64 drwxr-xr-x 8 nhartman用户4096 5月25日16:53。drwxr-xr-x 3 nhartman用户4096 5月25日15:44 .. drwxr-xr-x 5 nhartman用户4096 5月25日16:53 bin lrwxrwxrwx 1 nhartman用户22 5月25 16:53 Bitbake  - >层/ oe-core /bitbake drwxr-xr-x 5 nhartman用户4096 5月25 16:42 config-r  -  r-- 1 nhartman用户2279 5月25 16:42 default.xml lrwxrwxrwx 1 nhartman用户89 5月25日16:42环境设置-x86_64-wrlinuxsdk-linux  - > / home / nhartman / wrlinux_qt / bin / buildtools /环境 -  setup-x86_64-wrlinuxsdk-linux drwxr-xr-x 8 nhartman用户4096 5月25 16:53 .git -rw-r--r-- 1纳特曼用户111月25日16:42 .gitconfig -rw-r  -  r  -  r-- 1 nhartman用户147年5月25日16:42 .gitignore -rw-r  -  r-- 1 nhartman用户61月25日16:42 .gitmodules drwxr-xr-x 16 nhartman用户4096 5月25日16:53层lrwxrwxrwx 1 nhartman用户19月19日16:53 meta  - > meta-> ee-core / meta lrwxrwxrwx 1 nhartman用户32月25日16:53-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用户409625 16:53。repo -rw-r  -  r-- 1 nhartman用户205年5月25日16:42。repo_.gitconfig.json lrwxrwxrwx 1 nhartman用户22 5月25日16:53脚本 - >层/ oe-core / scripts -rw-r  -  r-- 1 nhartman用户73 5月25日16:42 .teplateconf drwxr-xr-x-x 5 nhartman用户4096 5月25日13:53 wrlinux-x
  2. 运行在父目录中生成的环境设置脚本。他们将创建并更改build子目录。

    $。./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添加所需的模板文件。

  1. 将meta-qt5和meta-qt5-extra存储库克隆到my-layers目录中

    $ mkdir my-tillers $ git clone -b zeus https://github.com/meta-qt5//github.com/meta-qt5.git my图层/ meta-qt5 $ git clone -b zeus https://github.com/schnitzelton/ meta-qt5-extra.git我的图层/ meta-qt5  - 额外
  2. 下载下面列出的所需补丁到wrlinux_qt /构建目录:

    感谢我的同事王全阳,他在风河Linux上创建了集成LxQt桌面的补丁。

  3. 在meta-qt5-extra目录中,应用第一个补丁:

    $ CD My-Players / Meta-Qt5  - 额外$ Git AM ../../0001-Polkit-Qt-1-fix-compile-Error.patch $ CD $ BuildDir
  4. 在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工具链和桌面环境

本节描述如何克隆meta-qt5和meta-qt5-extra层存储库。此外,如何添加图层,GCC工具链和桌面环境到映像。

  1. 使用Bitbake-Tallers工具,将图层添加到conf / bblayers.conf文件。这允许BitBake在构建图像时找到自定义层。此外,如果使用Raspberry PI添加Raspberry PI图形层以启用硬件加速。

    $ Bitbake-Plays添加图层My-Players / Meta-Qt5 $ Bitbake-图层添加图层My-Players / Meta-Qt5  - 额外

    如果构建树莓派,添加另外的硬件加速:

    $ bitbake-tayers添加图层../layers/bcm-2xxx-rpi/rpi ~graphics/
  2. 编辑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 =“商业”
  3. 如果为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.lpm_enable = 0控制台= serial0,115200 root = / dev / mmcblk0p2 rootfstype = ext4 rootwait ip =DHCP $ echo'dwc_otg.lpm_enable = 0控制台= tty root = / dev / mmcblk0p2 rootfstype = ext4 rootwait'> ../layers/bcm-2xxx-rpi/recipes-bsp/boot-config/boot-config/cmdline.txt

    注意:这些更改可确保在HDMI显示屏上显示控制台输出,引导序列不适用于DHCP连接。

建立映像

本节描述如何构建Wind River Linux映像

  1. 建立你选择的形象。如步骤4中的图像所示,有几个建议的图像。我们将构建wrlinux-image-std-sato,这是一个针对桌面环境进行优化的映像。

    $ bitbake wrlinux-image-std-sato处理风河模板文件…解析配方:2% |#####

    一段时间后,当构建完成时,你会看到以下内容:

    初始化任务:100%| ################################################################## |时间:0:00:07 SSTATE摘要:想要3536发现0遗漏了3536次电流0(0%匹配,0%完成)注意:SetScene任务已完成注意:任务摘要:尝试4643哪个任务0需要重新rerun,都成功了。

识别您的USB设备

本节介绍如何使用fdisk识别您的USB SD卡适配器或USB闪存盘。

  1. 使用fdisk命令列出Linux检测到的块设备:

    $ sudo fdisk -l
  2. 通过型号名称或容量识别您的设备。

    硬盘/dev/sdx: 7.43 GiB, 7969177600 bytes, 15564800 sectors硬盘型号:SD卡读卡器单位:1 * 512 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I/O大小(最小/最优):512字节/ 512字节磁盘标签类型:dos磁盘标识:类型/dev/sdx1 * 8192 532479 524288 256M c W95 FAT32 (LBA) /dev/sdx2 532480 3133739 2601260 1.2G 83 Linux

    注意:在这种情况下,设备是“/ dev / sdx”,如容量和“磁盘模型”所示。设备名称应采用“/ dev / sdx”的格式,其中x是特定于计算机的字母。

闪烁的图像

本节介绍如何将生成的.wic和.wic.bmap或.iso文件写入SD卡或USB闪存驱动器。

对于覆盆子pi 4:

  1. 定位bitbake生成的图像。相对于构建目录,映像路径是:

    tmp-glibc /部署/图片/ bcm-2xxx-rpi4
  2. 具体来说,我们需要wrlinux-image-std-sato-bcm-2xxx-rpi4.wicwrlinux-image-std-sato-bcm-2xxx-rpi4.wic.bmap文件。

  3. 使用BMAPTOOL,将生成的文件闪光到USB设备

    $ sudo bmaptool copy --bmap  /image_name-bcm-2xxx-rpi4.wic.bmap  /image_name-bcm-2xxx-rpi4.wic / dev / sdx
  4. 几分钟后(取决于你的USB设备的速度),你应该看到:

    ——bmap wrlinux-image-std-bcm-2xxx-rpi4.wic。bmap wrlinux-image-std-bcm-2xxx-rpi4。wic /dev/sdx [sudo] password for nhartman: bmaptool: info: block map format version 2.0 bmaptool: info: 391718 blocks of size 4096 (1.5 GiB), mapped 247338 blocks (996.2 MiB or 63.1%)Wic '以块设备'/dev/sdx使用bmap文件'wrlinux-image-std-bcm-2xxx-rpi4.wic。bmap' bmaptool: info: 100%拷贝bmaptool: info:正在同步'/dev/sdx' bmaptool: info:拷贝时间:43.7s,拷贝速度22.1 MiB/sec

英特尔NUC:

  1. 定位bitbake生成的图像。相对于构建目录,映像路径是:

    tmp-glibc /部署/图片/英特尔- x86 - 64
  2. 具体来说,我们需要wrlinux-image-std-sato-intel-x86-64.iso文件。

  3. 使用'dd'刷您的图像

    $ sudo dd if = path_to_image / wrlinux-std-sato-intel-x86-64.hddimg = / dev / sdx status =进度&& sync

    在某些情况下,dd可能在从内存向USB写入时出现挂起。检查进展与:

    $ sudo cat /proc/meminfo | grep脏

    当写完成时,它应该接近较低的100。

调整根分区和文件系统的大小

介绍如何调整根文件系统的大小,使其占用SD卡的全部容量。插入USB设备后,运行以下命令,将' /dev/sdx '替换为您的设备。

  1. 将第二个分区的大小调整为存储设备的100%。
    $ sudo parted /dev/sdx resizepart 2 100%信息:您可能需要更新/etc/fstab。
  2. 在第二个分区上运行EXT2/3/4文件系统检查工具,以修复任何潜在的问题。
    $ sudo e2fsck -f /dev/sdx2 e2fsck 1.45.3 (14- july2019)通过1:检查inodes, blocks, and sizes通过2:检查目录结构通过3:检查目录连通性通过4:检查引用计数通过5:检查组摘要信息root: 52648/1796640文件(0.4%非连续),662799/3723264块
  3. 使用resize2fs调整EXT4文件系统的大小,以扩展它并填充整个分区。
    $ sudo resize2fs /dev/sdx2 resize2fs 1.45.3 (14- 7 -2019)/dev/sdx2上的文件系统现在是3723264 (4k)块长。

结果

对于LxQt桌面,登录和密码是' wrluser ', $HOME目录是/ HOME /wrluser。

登录后,您将使用LXQT桌面呈现:

LxQt桌面”></p>
          <p>注意:如果您选择使用XFCE桌面,登录名是“root”,没有密码,并且$HOME目录是/root。</p>
          <h2 id=在运行示例之前

示例应用程序来自Qt git存储库。克隆存储库需要有一个工作的网络连接。如果由于任何原因,您的设备没有自动获得动态IP地址,您可以使用以下命令获得一个。

  1. 点击左下角的图标打开QTerminal,然后点击系统工具> QTerminal

    开启qterminal.”></p></li>
           <li><p>在QTerminal中,执行su命令成为root用户。</p></li>
           <li><p>然后执行“IP A”命令以验证您的设备已检索IP地址。请参阅eth0下的INET线路以查看您的IP地址。</p><p><img src=样本应用:GLXGEARS

    本节演示mesa-demos glxgears应用程序。

    1. 点击左下角的图标打开QTerminal,然后点击系统工具> QTerminal

    2. 执行glxgears来尝试OpenGL的例子。如果硬件加速工作,它应该报告60帧每秒的树莓派4。

      glxgears”></p></li>
          </ol>
          <h2 id=示例应用程序:OpenGLwindow

      本节演示一个来自Qtbase存储库的OpenGL示例。

      1. 使用git克隆包含OpenGL示例的存储库

        // dev git://code.qt.io/qt/qtbasegit克隆到'qtbase'…计数对象:23735,完成。remote:压缩对象:100%(18386/18386),完成。remote: Total 23735 (delta 5511), reuse 16062 (delta 3270)接收对象:100% (23735/23735),63.00 MiB | 3.92 MiB/s, done。解决增量:100%(5511/5511),完成。更新文件:100%(23031/23031),完成。
      2. 从qtbase目录中复制示例文件夹,以便Qt Creator允许我们构建项目。

        $ cp -r qtbase/examples $HOME
      3. 从GUI启动Qt Creator

        发射Qt的创造者”></p></li>
           <li><p>打开<em>openglwindow.pro</em>通过选择来文件<em>文件>打开文件或项目</em>从菜单中。</p><p><img src=示例应用程序:QtCluster

        本节展示了QTBase文档存储库的QtCluster示例。

        1. 打开终端并克隆包含Qt Docs的存储库:

          git克隆git: / / code.qt.io / qt / qtdoc。git——branch 5.10克隆到'qtdoc'…计数对象:24976,完成。remote: compessing objects: 100% (12628/12628), done。remote: Total 24976 (delta 17217), reuse 17635 (delta 11944)接收对象:100% (24976/24976),42.44 MiB | 6.23 MiB/s, done。解决增量:100%(17217/17217),完成。
        2. 从GUI启动Qt Creator

        3. 打开qtcluster-base.pro.通过选择来文件文件>打开文件或项目从菜单中。

        4. 导航到$ HOME / qtdoc / doc / src / / qtcluster / qtcluster-base.pro片段。然后单击,打开。

          OpenGL三角形”></p></li>
           <li><p>选择<em>QTCluster基地</em>“*<em>积极的项目</em>,然后单击<em>配置项目</em>按钮。</p></li>
           <li><p>通过单击生成并运行应用程序<em>构建>运行</em>在菜单。</p><p><img src=结论

          今天的嵌入式设备比以往任何时候都更强大,能够显示漂亮的图形用户界面。这使得GUI开发人员可以直接在设备上工作,这在以前可能是不可能的。通过在嵌入式设备上提供支持硬件加速的驱动程序,它有助于简化开发过程并加速开发。

          参考

          所有产品名称、标志和品牌都是各自所有者的财产。
          本软件中使用的所有公司,产品和服务名称仅用于识别目的。Wind River是Wind River Systems的注册商标。

          担保声明/不支持:根据风河标准软件支持和维护协议或其他方式,风河不为本软件提供支持和维护服务。除非适用法律要求,风河公司提供软件(和每个贡献者提供其贡献)在“是”的基础上,没有任何种类的保证,无论是明示的或暗示的,包括但不限于,所有权,不侵权,适销性,或适合特定目的的任何保证。您完全有责任决定使用或重新分发软件的适当性,并承担与您行使许可证下的许可相关的风险。

          OpenGL是Silicon Graphics, Inc.在美国和其他国家的注册商标。

          Qt是The Qt Company Ltd在美国等国家的注册商标。

以前的NVIDIA Contract Contract Runtime用于Wind River Linux
下一个风河云平台荣获2020年美国商业奖(American Business Awards) Stevie®铜奖得主