2020年10月16日 星期五

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
      • 1
      • 2
      • 3
    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
      • 1
      • 2
      • 3
      • 4
    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
      • 1
      • 2
      • 3
    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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    14. 下載poky項目,如下所示:

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

Yocto編譯鏡像文件

1. 為emulator (QEMU) 編譯鏡像

  1. Yocto項目搭建

  2. 獲取對應的分支

    cd ~/poky
    git checkout -b rocko origin/rocko
    • 1
    • 2
  3. 初始化編譯環境

    1. 用法如下

      source oe-init-build-env  [your_build_path]
      • 1
    2. 其中your_build_path設置的編譯路徑,默認為”~/poky/build”

    3. 執行之後的輸出結果如下所示:

      You can now run 'bitbake <target>'
      Common targets are:
          core-image-minimal
          core-image-sato
          meta-toolchain
          meta-ide-support
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      根據提示你可以選址編譯對應的對象,點擊查詢不同鏡像的介紹

  4. 編輯local.conf文件以及校驗文件的正確性

    1. 當執行編譯環境初始化之後,在對應的編譯路徑中就會創建,在編譯路徑下的conf目錄下會產生local.conf配置文件
    2. local.conf配置文件相關配置說明
    3. local.conf配置如何加速編譯
  5. 開始編譯

    1. 命令如下所示:

      bitbake core-image-sato
      • 1

      點擊查看更多bitbake的用法

  6. QEMU模擬鏡像

    1. 使用命令如下所示:

      runqemu qemux86
      • 1

      點擊查看更多QEMU的用法

  7. 退出QEMU

    1. 使用Ctrl-C或者點擊退出圖標

2. 為硬件編譯鏡像

  1. Yocto項目搭建

  2. 創建本地的meta-intel倉庫

    1. 進入本地poky目錄

      cd ~/poky
      • 1
    2. 克隆遠程倉庫在poky目錄下

      git clone git://git.yoctoproject.org/meta-intel
      • 1
    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
      • 1
      • 2
    4. 初始化編譯環境

      1. 用法如下

        source oe-init-build-env  [your_build_path]
        • 1
      2. 其中your_build_path設置的編譯路徑,默認為”~/poky/build”

      3. 執行之後的輸出結果如下所示:

        You can now run 'bitbake <target>'
        Common targets are:
           core-image-minimal
           core-image-sato
           meta-toolchain
           meta-ide-support
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

        根據提示你可以選址編譯對應的對象,點擊查詢不同鏡像的介紹

    5. 配置編譯信息,需要編譯bblayer.conf以及local.conf文件,這兩個文件都在build/conf中

      1. 添加layer信息

        cd ~/poky/build
        bitbake-layers add-layer "~/poky/meta-intel"
        • 1
        • 2
      2. 編輯local.conf文件

        • 修改machine的信息如下所示:
        MACHINE = "intel-corei7-64"
        • 1
        • 可以修改為對應的32位的
    6. 選擇需要編譯的基礎鏡像

      • 具體命令如下所示:
      bitbake core-image-base
      • 1
      • 如果編譯成功,會在編譯目錄中查看到如下文件:
       tmp/deploy/images/intel-corei7-64/core-image-base-intel-corei7-64.wic
      • 1
    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
        • 1
      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
        • 1
        • 2
        • 3
        • 4
        • 32位的引導如下:
          Shell> connect -r
          Shell> map -r
          Shell> fs0:
          Shell>  bootia32
          • 1
          • 2
          • 3
          • 4

開發中的一些概念

這裡會有更詳細的介紹開發流程。下面這張圖更好的說明了了在開發中的流程。

  • 總的來說,開發包括了以下幾塊
    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”的結構:

    這裡寫圖片描述

  • 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 : BSPlayer提供machine配置

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

  • 下面這張如展示了Metadata, Machine Configuration, and Policy Configuration

    這裡寫圖片描述

  • 所有的layer都有相似的結構,包含許可文件,README文件,配置目錄以及recipe 目錄

local.conf配置文件詳解

  • 常見的配置描述
名稱示例描述
MACHINEMACHINE ?= “qemux86”選擇目標機器更多介紹
DL_DIR下載目錄
SSTATE_DIRShared State Directory
CORE_IMAGE_EXTRA_INSTALLCORE_IMAGE_EXTRA_INSTALL += “openssh”需要安裝的軟件
EXTRA_IMAGE_FEATURESEXTRA_IMAGE_FEATURES ?= “debug-tweaks”安裝軟件
IMAGE_INSTALL_appendIMAGE_INSTALL_append = ” package-name”安裝軟件
TMPDIRTMPDIR = “${TOPDIR}/tmp”構建目錄中使用的輸出目錄
PACKAGE_CLASSESPACKAGE_CLASSES ?= “package_rpm”OE構建使用哪種打包文件
USER_CLASSESUSER_CLASSES ?= “buildstats image-mklibs image-prelink”
OE_TERMINALOE_TERMINAL = “auto”系統終端選擇,包括: auto、gnome、xfce、rxvt 、screen、konsole、none
PATCHRESOLVEPATCHRESOLVE = “noop”
BB_DISKMON_DIRSBB_DISKMON_DIRS = “ABORT,TMPDIR,1G,100KWARN,{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 \
        "
        • 1
        • 2
        • 3
        • 4
        • 5
    2. 方式2

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

        bitbake-layers create-layer your_layer_name
        • 1
      2. 將創建好的layer添加到配置中(bblayers.conf)

        bitbake-layers add-layer your_layer_name
        • 1
    3. 獲取更多layer的方式

      1. 方式1
      2. 方式2

資料來源: https://blog.csdn.net/qq_21178933/article/details/80081898

沒有留言: