长期支持版本

    社区创新版本

      快速构建指导

      本章主要介绍如何构建openEuler Embedded。

      环境准备

      Yocto中主机端命令使用

      Yocto或者说Bitbake本质上是一组python程序,其最小运行环境要求如下:

      • Python3 > 3.6.0
      • Git > 1.8.3.1
      • Tar > 1.28

      在构建过程中所需要的其他工具,Yocto都可以根据相应的软件包配方自行构建出来,从而达到自包含的效果。在这个过程中,Yocto还会依据自身需要,对相应的工具打上yocto专属补丁(如dnf,rpm等)。这些主机工具会在第一次的构建中从源码开始构建,因此Yocto第一次构建比较费时。

      为了加速构建特别是第一次构建,openEuler Embedded采取了"能用原生工具就用原生工具,能不构建就不构建"的策略,尽可能使用主机上预编译的原生的工具。这就需要依赖主机上软件包管理工具(apt, dnf, yum, zypper等)事先安装好。

      Yocto是通过HOSTTOOLS变量来实现主机工具的引入,为每个在HOSTTOOLS中列出的工具建立相应的软链接。为了避免来自主机对构建环境的污染,Yocto会重新准备不同于主机的环境,例如PATH变量等,因此如果新增依赖主机上的某个命令,需显示在Yocto的HOSTTOOLS变量中增加,否则即使主机上存在,Yocto构建时也会报错找不到相应的工具。相应流程如下图所示:

      当前openEuler Embedded所需要主机工具已经默认在local.conf.sample中的HOSTTOOLS定义,主要工具描述如下:

      工具名用途
      cmakecmake构建工具
      ninjianinja构建系统

      openEuler Embedded所需构建工具

      yum -y install tar cmake gperf sqlite-devel chrpath gcc-c++ patch rpm-build flex autoconf automake m4 bison bc libtool gettext-devel createrepo\_c rpcgen texinfo hostname python meson dosfstools mtools parted ninja-build autoconf-archive libmpc-devel gmp-devel
      
      • 预编译的交叉工具链和库

        Yocto可以构建出交叉编译所需的交叉工具链和C库,但整个流程复杂且耗时,不亚于内核乃至镜像的构建,而且除了第一次构建,后面很少会再涉及。同时,绝大部分开发者都不会直接与工具链和C库构建打交道。所以为了简化该流程,openEuler Embedded采取的策略是采用预编译的交叉工具链和库,会专门维护和发布相应的带有C库的工具链。

        目前我们提供了对arm32位和aarch64位两种架构的工具链支持,通过如下方式可以获得:

        • 下载rpm包: wget https://repo.openeuler.org/openEuler-22.03-LTS/EPOL/main/x86_64/Packages/gcc-cross-1.0-0.oe2203.x86_64.rpm
        • 解压rpm包: rpm2cpio gcc-cross-1.0-0.oe2203.x86_64.rpm | cpio -id
        • 解压后可以看到当前路径下会有tmp目录,编译链存放于该目录下
          • ARM 32位工具链: openeuler_gcc_arm32le.tar.xz
          • ARM 64位工具链: openeuler_gcc_arm64le.tar.xz

      已安装好工具的构建容器

      openEuler Embedded的构建过程中会使用到大量的各式各样的主机工具。如前文所述,为了加速构建,openEuler Embedded依赖主机事先安装好相应的工具,但这也会带来不同主机环境会有不同的工具版本的问题,例如构建需要cmake高于1.9版本,但主机上最高只有cmake 1.8。为了解决这一问题,openEuler Embedded提供了专门的构建容器,提供统一的构建环境。

      使用者可以通过如下链接获得容器镜像直接用于编译:

      openEuler Embedded构建容器的基础镜像

      具体构建指导请参考容器构建指导

      版本构建

      构建代码下载

      openEuler Embedded整个构建工程的文件布局如下,假设openeuler_embedded为顶层目录:

      <顶层目录openeuler_embedded> ├── src 源代码目录,包含所有软件包代码、内核代码和Yocto构建代码 ├── build openEuler Embedded的构建目录,生成的各种镜像放在此目录下

      1. 获取源码下载脚本

        将脚本下载到指定目录,例如下载到src/yocto-meta-openeuler目录下:

        git clone https://gitee.com/openeuler/yocto-meta-openeuler.git -b openEuler-22.03-LTS -v src/yocto-meta-openeuler
        

        脚本为src/yocto-meta-openeuler/scripts/download_code.sh,此脚本有3个参数:

        • 参数1:下载的源码路径,默认相对脚本位置下载,例如前面样例,代码仓会下到src/下
        • 参数2:下载的分支,默认值见脚本,不同分支按版本确定
        • 参数3:下代码的xml文件,标准manifest格式,按xml配置下代码
      2. 通过脚本下载源码

        • 下载最新代码:

          sh src/yocto-meta-openeuler/scripts/download_code.sh
          
        • 下载指定版本代码:

          sh src/yocto-meta-openeuler/scripts/download_code.sh "" "" "manifest.xml"
          

          指定openEuler Embedded版本的代码的manifest.xml文件从openEuler Embedded发布件目录embedded_img/source-list/下获取。

      编译构建

      一键式构建脚本:src/yocto-meta-openeuler/scripts/compile.sh, 具体细节可以参考该脚本。

      编译脚本的主要流程说明:

      1. 设置PATH增加额外工具路径
      2. TEMPLATECONF指定local.conf.sample等配置文件路径
      3. 调用poky仓的oe-init-build-env进行初始化配置
      4. 在编译目录的conf/local.conf中配置MACHINE,按需增加额外新增的层
      5. 在编译目录执行bitbake openeuler-image编译openEuler Embedded的image和sdk
      6. 执行完发布件在编译目录的output目录下

      运行编译脚本,以编译标准arm架构为例,编译方法如下:

      source src/yocto-meta-openeuler/scripts/compile.sh arm-std
      bitbake openeuler-image  #执行第一条source后,会提示出bitbake命令
      

      构建结果说明

      结果件默认生成在构建目录下的output目录下,例如上面arm的构建结果件生成在/usr1/build/output目录下,如下表:

      filenamedescription
      Image-*openEuler Embedded image
      openeuler-glibc-x86_64-openeuler-image-*-toolchain-*.shopenEuler Embedded sdk toolchain
      openeuler-image-qemu-aarch64-*.rootfs.cpio.gzopenEuler Embedded file system
      zImageopenEuler Embedded compressed image

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份