From 7141bebc47d258d4e3bfe9bb084551d4c4a69a8e Mon Sep 17 00:00:00 2001 From: ilisimin Date: Wed, 23 Mar 2022 10:30:12 +0000 Subject: [PATCH 1/2] =?UTF-8?q?update=20docs/source/yocto/quickbuild/quick?= =?UTF-8?q?start.rst.=20=E6=9B=B4=E6=96=B0yocto=E7=8E=AF=E5=A2=83=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=8F=8A=E7=BC=96=E8=AF=91=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/yocto/quickbuild/quickstart.rst | 105 ++++++++++---------- 1 file changed, 53 insertions(+), 52 deletions(-) diff --git a/docs/source/yocto/quickbuild/quickstart.rst b/docs/source/yocto/quickbuild/quickstart.rst index f1e21599784..d770b95a05a 100644 --- a/docs/source/yocto/quickbuild/quickstart.rst +++ b/docs/source/yocto/quickbuild/quickstart.rst @@ -1,60 +1,63 @@ openEuler快速构建指导 -==================== +====================== 构建环境的准备 ********************************************* -* 主机工具 +yocto中主机端命令使用 +^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Yocto或者说Bitbake本质上一组python程序,其最小运行环境要求如下: -- Python3 > 3.6.0 -- Git > 1.8.3.1 -- Tar 1.28 -在构建过程中所需要的其他工具,Yocto都可以根据相应的软件包配方自行构建出来,从而达到自包含的效果。 -在这个过程中,Yocto还会依据自身需要,对相应的工具打上yocto专属补丁(如dnf, rpm)等。这些主机工具 -会在第一次的构建中从源码开始构建,因此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构建时也会 -报错找不到相应的工具。相应流程如下图所示: +Yocto是通过HOSTTOOLS变量来实现主机工具的引入,为会每个在HOSTTOOLS中列出的工具建立相应的软链接。为了避免来自主机对构建环境的污染,Yocto会重新准备不同于主机的环境,例如PATH变量等,因此如果新增依赖主机上的某个命令,需显示在Yocto的HOSTTOOLS变量中增加,否则即使主机上存在,Yocto构建时也会报错找不到相应的工具。相应流程如下图所示: .. image:: ../../../image/yocto/hosttools.png -当前openEuler Embedded所需要主机工具已经默认在local.conf.sample中的HOSTTOOLS定义,各个工具描述如下: +当前openEuler Embedded所需要主机工具已经默认在local.conf.sample中的HOSTTOOLS定义,主要工具描述如下: ========= ============= 工具名 用途 ========= ============= cmake cmake构建工具 -ninjia cmake构建后端 +ninjia ninja构建系统 ========= ============= -* 预编译的交叉工具链和库 -Yocto可以构建出交叉编译所需的交叉工具链和C库,但整个流程复杂且耗时,不亚于内核乃至镜像的构建,而且除了第一次构建,后面很少会再涉及。同时,绝大部分开发者 -都不会直接与工具链和C库构建打交道。所以为了简化该流程,openEuler Embedded采取的策略是采用预编译的交叉工具链和库,会专门维护和发布相应的带有C库的工具链。 -目前我们提供了对arm32位和aarch64位两种架构的工具链支持, 通过下方链接可以获得: +openEuler Embedded所需构建工具 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1)构建os + - `操作系统:openEuler-20.03-LTS-SP2 `_ + +2)安装系统额外工具 + - 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 + +3)预编译的交叉工具链和库 + | Yocto可以构建出交叉编译所需的交叉工具链和C库,但整个流程复杂且耗时,不亚于内核乃至镜像的构建,而且除了第一次构建,后面很少会再涉及。同时,绝大部分开发者都不会直接与工具链和C库构建打交道。所以为了简化该流程,openEuler Embedded采取的策略是采用预编译的交叉工具链和库,会专门维护和发布相应的带有C库的工具链。 + | 目前我们提供了对arm32位和aarch64位两种架构的工具链支持, 通过下方链接可以获得: - - `ARM 32位工具链 `_ - - `ARM 64位工具链 `_ + - `ARM 32位工具链 `_ + - `ARM 64位工具链 `_ -* 构建容器 +已安装好工具的构建容器 +^^^^^^^^^^^^^^^^^^^^^^^^^^^ -openEuler Embedded的构建过程中会使用到大量的各式各样的主机工具。如前文所述,为了加速构建,openEuler Embedded依赖主机事先安装好相应的工具,但这也会带 -来一不同主机环境会有不同的工具版本的问题,例如构建需要cmake高于1.9版本,但主机上最高只有cmake 1.8。为了解决这一问题,openEuler Embedded提供了专门的构 -建容器,提供统一的构建环境。 +openEuler Embedded的构建过程中会使用到大量的各式各样的主机工具。如前文所述,为了加速构建,openEuler Embedded依赖主机事先安装好相应的工具,但这也会带来一不同主机环境会有不同的工具版本的问题,例如构建需要cmake高于1.9版本,但主机上最高只有cmake 1.8。为了解决这一问题,openEuler Embedded提供了专门的构建容器,提供统一的构建环境。 -使用者可以通过如下链接获得容器构建文件和基础镜像,构建出相应的容器: +使用者可以通过如下链接获得容器镜像直接用于编译: - - `openEuler Embedded构建容器的构建文件 `_ - `openEuler Embedded构建容器的基础镜像 `_ -完整的预编译好的容器镜像稍后会提供 -构建代码与软件包代码的下载与准备 +构建代码下载与准备 ********************************************* openEuler Embedded整个构建工程的文件布局如下,假设openeuler_embedded为顶层目录: @@ -65,40 +68,38 @@ openEuler Embedded整个构建工程的文件布局如下,假设openeuler_embe ├── 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配置下代码 -* 准备Yocto构建代码相关仓库,请在src目录下克隆如下仓库, 并切换到相应分支: +2)执行下载脚本 + | 下载最新代码: ``sh src/yocto-meta-openeuler/scripts/download_code.sh`` + | 下载指定版本代码: ``sh src/yocto-meta-openeuler/scripts/download_code.sh "" "" "manifest.xml"`` - - Yocto核心组件: - + poky: https://gitee.com/openeuler/yocto-poky - + pseudo: https://gitee.com/src-openeuler/yocto-pseudo - + opkg-utils: https://gitee.com/src-openeuler/yocto-opkg-utils + - 指定openEuler Embedded版本的代码的manifest.xml文件从openEuler Embedded发布件目录embedded_img/source-list/下获取 - - 核心开发工具: - + yocto-embedded-tools: https://gitee.com/openeuler/yocto-embedded-tools - - openEuler Embedded构建模板和方法: - + yocto-meta-openeuler: https://gitee.com/openeuler/yocto-meta-openeuler -* 软件包源代码的准备,请在src目录根据需要下载或克隆内核和软件包仓库 - -稍后会提供工具,帮助使用者快速构建好相应的环境。 - -版本构建及使用 -*********************** +openEuler Embedded版本构建 +***************************** 一键式构建脚本::file:`src/yocto-meta-openeuler/scripts/compile.sh` , 具体细节可以参考该脚本 -以编译标准arm架构为例: - -:: - - source src/yocto-meta-openeuler/scripts/compile.sh arm-std - bitbake openeuler-image #执行第一条source后,会提示出bitbake命令 - -主要流程说明: +编译脚本的主要流程: 1. 设置PATH增加额外工具路径 #. TEMPLATECONF指定local.conf.sample等配置文件路径 #. 调用poky仓的oe-init-build-env进行初始化配置 #. 在编译目录的conf/local.conf中配置MACHINE,按需增加额外新增的层 -#. 在编译目录执行bitbake openeuler-image编译openeuler的image和sdk +#. 在编译目录执行bitbake openeuler-image编译openEuler Embedded的image和sdk #. 执行完发布件在编译目录的output目录下 + +以编译标准arm架构为例,编译方法如下: + +:: + + source src/yocto-meta-openeuler/scripts/compile.sh arm-std + bitbake openeuler-image #执行第一条source后,会提示出bitbake命令 \ No newline at end of file -- Gitee From aed140484d1f52716d5a592ee31cf687abc37197 Mon Sep 17 00:00:00 2001 From: ilisimin Date: Wed, 23 Mar 2022 10:36:22 +0000 Subject: [PATCH 2/2] =?UTF-8?q?update=20docs/source/getting=5Fstarted/inde?= =?UTF-8?q?x.rst.=20=E4=BF=AE=E5=A4=8Dsdk=E4=BD=BF=E7=94=A8=E4=B8=AD?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=8F=8F=E8=BF=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/source/getting_started/index.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/source/getting_started/index.rst b/docs/source/getting_started/index.rst index 05d921d9e3f..5fde474d098 100644 --- a/docs/source/getting_started/index.rst +++ b/docs/source/getting_started/index.rst @@ -172,16 +172,16 @@ openEuler Embedded登陆后,执行如下命令: .. note:: - 如需openEuler embedded借助宿主机访问互联网,则需要在宿主机上建立网桥,此处不详述,如有需要,请自行查阅相关资料。 + 如需openEuler Embedded借助宿主机访问互联网,则需要在宿主机上建立网桥,此处不详述,如有需要,请自行查阅相关资料。 -基于openEuler embedded的sdk应用开发 +基于openEuler Embedded的sdk应用开发 ******************************************** -当前发布的镜像除了体验openEuler Embedded的基本功能外,还可以进行基本的应用开发,也即在openEuler embedded上运行用户自己的程序。 +当前发布的镜像除了体验openEuler Embedded的基本功能外,还可以进行基本的应用开发,也即在openEuler Embedded上运行用户自己的程序。 -**1 执行sdk脚本** +**1 执行sdk脚本安装工具链** | 例如 ``sh openeuler-glibc-x86_64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.sh`` | 根据提示输入工具链的安装路径,默认路径是"/opt/openeuler//"; | 若不设置,则按默认路径安装;也可以配置相对路径或绝对路径 @@ -201,7 +201,7 @@ openEuler Embedded登陆后,执行如下命令: **2 source环境变量设置脚本** | 前一步执行结束最后已打印source命令 - | 例如以上: + | 按前一步脚本执行提示,则执行以下命令设置环境: | ``. /usr1/openeuler/myfiles/sdk/environment-setup-armv7a-openeuler-linux-gnueabi`` **3 使用sdk编译** @@ -209,7 +209,7 @@ openEuler Embedded登陆后,执行如下命令: 使用sdk编译hello world样例: 1). **准备代码** -以构建一个hello world程序为例,运行在openEuler根文件系统镜像中。 +以构建一个hello world程序为例,运行在openEuler Embedded根文件系统镜像中。 创建一个hello.c文件,源码如下: @@ -240,11 +240,11 @@ openEuler Embedded登陆后,执行如下命令: cmake .. make -把编译好的hello程序拷贝到/tmp/某个目录下(例如/tmp/myfiles/)。 +把编译好的hello程序拷贝到openEuler Embedded系统的某个目录下(例如/tmp/myfiles/)。 3). **运行用户态程序** -在openEuler系统中运行hello程序。 +在openEuler Embedded系统中运行hello程序。 .. code-block:: console -- Gitee