Yocto镜像编译

Yocto2.4.2项目搭建

  • 本文档适用于centos7系统

    1. 该项目支持的系统

    2. ubuntu

      Ubuntu 14.04 (LTS)、Ubuntu 14.10、Ubuntu 15.04、Ubuntu 15.10Ubuntu 16.04

    3. Fedora

      Fedora release 22Fedora release 23、Fedora release 24

    4. CentOS

      Centos7.x

    5. Debian

      Debian GNU/Linux 8.x (Jessie)、Debian GNU/Linux 9.x (Stretch)

    6. openSUSE

      openSUSE 13.2、openSUSE 42.1

    7. 依赖软件要求

    8. Git>=1.8.3.1tar>=1.27Python>=3.4.0

    9. 搭建项目之前需要安装的软件点击查询具体信息

    10. Ubuntu and Debian

      sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
           build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
           xz-utils debianutils iputils-ping libsdl1.2-dev xterm
    11. Fedora

      sudo dnf install gawk make wget tar bzip2 gzip python3 unzip perl patch \
         diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
         ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue perl-bignum socat \
         python3-pexpect findutils which file cpio python python3-pip xz SDL-devel xterm
    12. OpenSUSE

      sudo zypper install python gcc gcc-c++ git chrpath make wget python-xml \
         diffstat makeinfo python-curses patch socat python3 python3-curses tar python3-pip \
         python3-pexpect xz which libSDL-devel xterm
    13. CentOS

      $ sudo yum install -y epel-release
      $ sudo yum makecache
      $ sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \
      diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath socat \
      perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python34-pip xz \
      which SDL-devel xterm
      
    14. 下载poky项目,如下所示:

    git clone git://git.yoctoproject.org/poky

Yocto编译镜像文件

1. 为emulator (QEMU) 编译镜像

  1. Yocto项目搭建

    • 点击查看
  2. 获取对应的分支

    cd ~/poky
    git checkout -b rocko origin/rocko
  3. 初始化编译环境

    1. 用法如下

      source oe-init-build-env  [your_build_path]
    2. 其中your_build_path设置的编译路径,默认为”~/poky/build”

    3. 执行之后的输出结果如下所示:

      You can now run 'bitbake '
      Common targets are:
          core-image-minimal
          core-image-sato
          meta-toolchain
          meta-ide-support

      根据提示你可以选址编译对应的对象,点击查询不同镜像的介绍

  4. 编辑local.conf文件以及校验文件的正确性

    1. 当执行编译环境初始化之后,在对应的编译路径中就会创建,在编译路径下的conf目录下会产生local.conf配置文件
    2. local.conf配置文件相关配置说明
    3. local.conf配置如何加速编译
  5. 开始编译

    1. 命令如下所示:

      bitbake core-image-sato

      点击查看更多bitbake的用法

  6. QEMU模拟镜像

    1. 使用命令如下所示:

      runqemu qemux86

      点击查看更多QEMU的用法

  7. 退出QEMU

    1. 使用Ctrl-C或者点击退出图标

2. 为硬件编译镜像

  1. Yocto项目搭建

    • 点击查看
  2. 创建本地的meta-intel仓库

    1. 进入本地poky目录

      cd ~/poky
    2. 克隆远程仓库在poky目录下

      git clone git://git.yoctoproject.org/meta-intel
    3. 进入meta-intel目录,并且检出8.0-rocko-2.4.2分支,如下所示:

      cd ~/poky/meta-intel
      git checkout tags/8.0-rocko-2.4.2 -b meta-intel-rocko-2.4.2
    4. 初始化编译环境

      1. 用法如下

        source oe-init-build-env  [your_build_path]
      2. 其中your_build_path设置的编译路径,默认为”~/poky/build”

      3. 执行之后的输出结果如下所示:

        You can now run 'bitbake '
        Common targets are:
           core-image-minimal
           core-image-sato
           meta-toolchain
           meta-ide-support

        根据提示你可以选址编译对应的对象,点击查询不同镜像的介绍

    5. 配置编译信息,需要编译bblayer.conf以及local.conf文件,这两个文件都在build/conf中

      1. 添加layer信息

        cd ~/poky/build
        bitbake-layers add-layer "~/poky/meta-intel"
      2. 编辑local.conf文件

        • 修改machine的信息如下所示:
        MACHINE = "intel-corei7-64"
        • 可以修改为对应的32位的
    6. 选择需要编译的基础镜像

      • 具体命令如下所示:
      bitbake core-image-base
      • 如果编译成功,会在编译目录中查看到如下文件:
       tmp/deploy/images/intel-corei7-64/core-image-base-intel-corei7-64.wic
      • 点击查看镜像的比较
    7. 写入镜像

      1. 你可以使用dd工具将镜像写入到可引导媒体中(如USB、SATA驱动器、SD card等),具体命令如下:

        sudo dd if=tmp/deploy/images/intel-corei7-64/core-image-base-intel-corei7-64.wic of=TARGET_DEVICE
      2. 其中TARGET_DEVICE是对应的设备节点(如:/etc/sdc或者/dev/mmcblk0)

    8. 硬件启动

      1. 可以将可引导媒体插入到嵌入式开发板(MinnowBoard Turbot)中并且启动。开发板会自动检测可引导媒体并且加载到引导程序安装系统

      2. 如果开发板没有自动引导,可以从EFI shell中引导,具体引导信息如下:

        • 64 位的引导如下:
        Shell> connect -r
        Shell> map -r
        Shell> fs0:
        Shell> bootx64
        • 32位的引导如下:
          Shell> connect -r
          Shell> map -r
          Shell> fs0:
          Shell>  bootia32

开发中的一些概念

这里会有更详细的介绍开发流程。下面这张图更好的说明了了在开发中的流程。

Yocto镜像编译_第1张图片

  • 总的来说,开发包括了以下几块
    1. User Configuration: 配置的元数据可以控制编译过程。
    2. Metadata Layers: 对于software、machine以及distro MetaData提供不同的层
    3. Source Files: 本地项目、SCM或者Upstream releases
    4. Build System: 这个模块扩展了BitBake获取源、应用补丁、完成编译、分析包生成的输出、创建和测试包、生成图像和生成跨开发工具。
    5. Package Feeds: 包含输出包(RPM、DEB或IPK)的目录,这些目录随后用于构建系统生成的图像或SDK。
    6. Images: 开发过程产生镜像
    7. Application Development SDK: 开发过程中使用的开发工具

1. User configuration

  • 通过配置会告诉BitBake 对应的构建镜像中在哪里存储下载的源码以及其他的构建信息的体系结构。

  • 下图显示了Yocto项目开发环境的“User configuration”的结构:

    Yocto镜像编译_第2张图片

  • BitBake需要一些基本的*.conf配置文件来完成编译

  • meta-poky中包含了Poky的conf路径的配置文件。这些配置文件是最基本的配置。

  • 当你是环境脚本生效的时候,就会创建编译目录(不存在的则创建,存在就不创建)。BitBake在整个编译期间都会使用这个目录来执行它所有的任务。在编译目录中,会有一个conf目录,其中会有默认的local.confbblayers.conf 配置文件。

  • 根据脚本来源的不同,调用不同的子脚本以建立构建目录(Yocto或OpenEmbedded)。具体地说,poky目录中的脚本script/oe-setup-builddir设置了构建目录,并为Yocto项目开发环境的配置文件提供了目录。

  • 配置信息可以在conf/local.conf、conf/site.conf、conf/auto/conf文件中

  • bblayers.conf

    • bblayers.conf配置告诉BitBake在编译的时候采用那一个layer
  • site.conf和auto.conf

    • 这两个文件在执行环境初始化的时候,不会创建,需要自己创建

    • site.conf

    可以用于配置多编译路径

    • auto.cof

    • 功能跟local.conf一样的

  • 执行顺序

    • 先执行auto.conf然后在执行local.conf,如果有相同变量,不同的值,取local.conf的结果。
  • 点击查看对应的配置文件信息

2. Metadata, Machine Configuration, and Policy Configuration

  • Policy Configuration:

    • 当镜像或者sdk在构建的时候,Distribution Layers提供顶级或者一般策略,如:决定BitBake使用RPM或者IPK包。
  • Machine Configuration: BSP layer提供machine配置

  • Metadata:Software layer 包含需要应用的recip文件, patches, and append files.

  • 下面这张如展示了 Metadata, Machine Configuration, and Policy Configuration

    Yocto镜像编译_第3张图片

  • 所有的layer都有相似的结构,包含许可文件,README文件,配置目录以及recipe 目录

local.conf配置文件详解

  • 常见的配置描述
名称 示例 描述
MACHINE MACHINE ?= “qemux86” 选择目标机器更多介绍
DL_DIR 下载目录
SSTATE_DIR Shared State Directory
CORE_IMAGE_EXTRA_INSTALL CORE_IMAGE_EXTRA_INSTALL += “openssh” 需要安装的软件
EXTRA_IMAGE_FEATURES EXTRA_IMAGE_FEATURES ?= “debug-tweaks” 安装软件
IMAGE_INSTALL_append IMAGE_INSTALL_append = ” package-name” 安装软件
TMPDIR TMPDIR = “${TOPDIR}/tmp” 构建目录中使用的输出目录
PACKAGE_CLASSES PACKAGE_CLASSES ?= “package_rpm” OE构建使用哪种打包文件
USER_CLASSES USER_CLASSES ?= “buildstats image-mklibs image-prelink”
OE_TERMINAL OE_TERMINAL = “auto” 系统终端选择,包括: auto、gnome、xfce、rxvt 、screen、konsole、none
PATCHRESOLVE PATCHRESOLVE = “noop”
BB_DISKMON_DIRS BB_DISKMON_DIRS = “ABORT, TMPDIR,1G,100KWARN, T M P D I R , 1 G , 100 K W A R N , {SSTATE_DIR},1G,100K” 监控硬盘空间以及inodes
  • 并发选项
名称 描述
BB_NUMBER_THREADS 在同一时间BitBake最大任务数。默认为4
PARALLEL_MAKE 执行do_cimpile任务(完成并发编译)的最大并发
PARALLEL_MAKEINST 执行do_install任务的最大并发
BB_NUMBER_PARSE_THREADS 设置BitBake使用的线程数

不同基础镜像的比较

镜像名称 镜像介绍
build-appliance-image 一个示例虚拟机,包含使用构建系统以及构建系统本身运行构建所需的所有片段。 您可以使用VMware Player或VMware Workstation启动并运行镜像
core-image-base 仅支持控制台的镜像,完全支持目标设备硬件
core-image-clutter 支持基于Open GL的工具包Clutter的图像,支持开发丰富和动画的图形用户界面。
core-image-full-cmdline 仅安装了控制台的镜像,其中安装了更多全功能的Linux系统功能。
core-image-lsb 符合Linux标准基础(LSB)规范的图像。
core-image-lsb-dev 适合开发的core-image-lsb镜像
core-image-lsb-sdk 一个core-image-lsb镜像,它包含了cross-toolchain中的所有内容,同时还包含开发头文件和库以形成一个完整的独立SDK。
core-image-minimal 一个小镜像,只是允许设备启动。
core-image-minimal-dev 适合进行开发的core-image-minimal镜像
core-image-minimal-initramfs 它具有最小的基于RAM的初始根文件系统(initramfs)作为内核的一部分,这使得系统可以更高效地找到第一个“init”程序
core-image-minimal-mtdutils 支持Minimal MTD实用程序的core-image-minimal镜像,可让用户与内核中的MTD子系统进行交互,以在闪存设备上执行操作。
core-image-rt
core-image-rt-sdk
core-image-sato 镜像支持sato,可与移动设备配合使用的移动环境和视觉风格。 该图像支持带有Sato主题的X11以及诸如终端,编辑器,文件管理器,媒体播放器等应用程序。
core-image-sato-dev 适合进行开发的core-image-sato镜像
core-image-sato-sdk 包含cross-toolchain中所有内容的core-image-sato镜像。 该映像还包含开发头文件和库,以形成一个完整的独立SDK,并适合使用目标进行开发。
core-image-testmaster 设计用于自动运行时测试的“master”映像。 提供部署到单独分区的“know good”映像,以便引导其进入并使用它来部署要测试的第二个映像
core-image-testmaster-initramfs 使用core-image-testmaster映像作为基于RAM的初始根文件系统(initramfs)镜像。
core-image-weston 带有终端的基本的 Wayland镜像。该镜像提供Wayland协议库和参考Weston合成器
core-image-x11 带有终端的非常基础的X11镜像

Layer的理解与创建

  1. Layer就是针对不同的层或者不同的模块创建对应的配置,如:针对machine以及GUI环境可以配置对应的信息。可以在meta, meta-skeleton, meta-selftest, meta-poky, and meta-yocto-bsp中查看不同的layer。

  2. 创建自己的Layer

    可以通过项目中的脚本去创建,可以使用yocto-bsp脚本创建一个BSP layer。查看

    1. 方式1

      1. 查看是否存在Layer

        在创建一个新的layer的时候,应该确认还没有创建一个图层包含你所需要的metadata

      2. 创建一个目录

        为新的layer创建目录,例如: meta-mylayer、meta-GUI_xyz、meta-mymachine

      3. 创建layer配置文件

        在新创建的layer文件夹中,创建conf/layer.conf文件,你可以直接复制一个存在的layer的conf目录,在对其修改

      4. 使用创建好的layer

        将layer的路径添加到构建路径(build Directory)中的conf/bblayers.conf文件,如下所示:

        BBLAYERS ?= " \
        /home/dlm/workspace/test/poky/meta \
        /home/dlm/workspace/test/poky/meta-poky \
        /home/dlm/workspace/test/poky/meta-yocto-bsp \
        "
    2. 方式2

      1. 利用bitbake-layer命令创建layer

        bitbake-layers create-layer your_layer_name
      2. 将创建好的layer添加到配置中(bblayers.conf)

        bitbake-layers add-layer your_layer_name
    3. 获取更多layer的方式

      1. 方式1
      2. 方式2

你可能感兴趣的:(其他分类)