Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Yocto projectを用いたCustom Linux Image のつくりかた/How to build Custom Linux Image with Yocto project

Yocto projectを用いたCustom Linux Image のつくりかた/How to build Custom Linux Image with Yocto project

Yocto projectを用いたCustom Linux imageの作り方について解説します。
Yocto projectの全体像からパッケージの追加の方法までをなるべくわかりやすくご紹介します。

Toshifumi NISHINAGA

March 08, 2019
Tweet

More Decks by Toshifumi NISHINAGA

Other Decks in Programming

Transcript

  1. © 2019 NTT Communications Yocto projectを用いた Custom Linux Image のつくりかた

    Toshifumi NISHINAGA 1
  2. © 2019 NTT Communications $ who • Name: Toshifumi NISHINAGA

    • Activities: ◦ Google Summer of Code 2016(Linux Foundation) ▪ https://summerofcode.withgoogle.com/archive/2016/projects/6617849892175872/ ▪ Porting Linux to ARM Cortex-M7 microcontroller. ◦ U-Boot contributor(not active recently…) • link: ◦ https://github.com/tnishinaga ◦ https://speakerdeck.com/tnishinaga 2
  3. © 2019 NTT Communications 今のお仕事の目的 • Kamueeを配布するための Kamuee Image Builderを更改したい

    • Cutting Edge側の希望 ◦ VyOSのようなISOインストーラーがほしい ◦ ソフトウェアバージョンの冪等性確保 ◦ ビルド時間短縮 ◦ ライセンス管理の簡略化 ◦ version切り替え及びUpdateが容易な仕組み 3 Yocto Custom Linux Installer
  4. © 2019 NTT Communications 目次 1. Custom Linux ImageとYocto project

    2. Handson: Let's build linux image with yocto project 3. Yocto project overview 4. Handson: Add new package to reference image 5. Appendix 4
  5. © 2019 NTT Communications Custom Linux ImageとYocto project 5

  6. © 2019 NTT Communications なぜカスタムLinuxイメージを作るのか • Debian等のディストリをベースに改造したほうが便利 • custom linux

    imageが必要になる場面 ◦ ストレージ容量が極端に少ない ◦ 余計なソフトウェアを入れたくない ◦ 入っているソフトウェアのライセンスをすべて把握したい ◦ ソフトウェアバージョンの冪等性を確保したい 6
  7. © 2019 NTT Communications Custom Linux Imageを作るソフトウェア • Yocto project

    ◦ https://www.yoctoproject.org ◦ 流行ってる方。将来性があるかを確かめるためにも今回開発に利用 ◦ Buildrootに比べると最初のビルドからちょっと大変 • Buildroot ◦ https://buildroot.org ◦ Linux kernelのmenuconfigの感覚でCustom Linux Imageが簡単に作れる。 ◦ Yoctoに比べると最初のビルドは簡単 7 Ref: [Deciding between Buildroot & Yocto](https://lwn.net/Articles/682540/)
  8. © 2019 NTT Communications Yocto projectとは • Custom Linux Imageを作るため

    の巨大なプロジェクト • ビルドシステム、標準ディストリ ビューションなどを内包 https://www.yoctoproject.org/ 8
  9. © 2019 NTT Communications Simple Image: Yocto project Tux: ©

    Larry Ewing, Simon Budig and Anja Gerwinski http://www.home.unix-ag.org/simon/penguin/README 9 Yocto project Build Linux Kernel + Rootfs
  10. © 2019 NTT Communications Yocto features(pickup) • Binary Reproducibility ◦

    アプリケーションバージョンの冪等性を保てる (ビルド番号とcommit idがあれば) • License Manifest ◦ イメージに含まれるソフトウェアのライセンスはすべて把握可能 ◦ 拒否したいライセンスの除外も可 • Supports Partial Builds ◦ 2度目以降はキャッシュが使えて高速ビルドができる。ただし 1度目は遅い。 • その他 ◦ Webビルドの仕組みがある(2019/02前半にバグが直って使えるようになった) ◦ Cross Toolchain(SDK)の作成も一緒にできる 10 Ref: https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#gs-features
  11. © 2019 NTT Communications Tutorial: Let's build linux image with

    yocto project 11
  12. © 2019 NTT Communications Tutorial: Let's build linux image with

    yocto • Contents ◦ build machine requirements ◦ build machine setup ◦ build ◦ run on QEMU 12
  13. © 2019 NTT Communications build machine requirements(my experience) • CPU

    ◦ more than 4 core(high performance as possible as you can) • Memory ◦ more than 1GB x (cpu cores) • Storage ◦ more than 120GB(minimal) • High speed Internet • OS ◦ Ubuntu 16.04 LTS 13
  14. © 2019 NTT Communications Build machine setup • Install packages

    ◦ 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 xsltproc docbook-utils fop dblatex xmlto \ python-git • Reference ◦ https://www.yoctoproject.org/docs/2.6/ref-manual/ref-manual.html#requir ed-packages-for-the-build-host 14 Ref: https://www.yoctoproject.org/docs/2.6/brief-yoctoprojectqs/brief-yoctoprojectqs.html
  15. © 2019 NTT Communications Build machine setup • Clone poky

    repository ◦ git clone git://git.yoctoproject.org/poky ~/poky • Switch to newest stable branch(thud:2.6) ◦ cd ~/poky ◦ git checkout -b thud origin/thud 15 Ref: https://www.yoctoproject.org/docs/2.6/brief-yoctoprojectqs/brief-yoctoprojectqs.html
  16. © 2019 NTT Communications Build • load yocto toolchains ◦

    cd ~/poky ◦ source oe-init-build-env ▪ *** this script creates build directory(~/poky/build) and cd to it *** ▪ *** it loads yocto build system tools(bitbake, devtool, etc...) *** • build reference image ◦ bitbake core-image-minimal • Have a coffee break(more than 1 hour) ◦ ☕☕☕ 16
  17. © 2019 NTT Communications Run on QEMU • runqemu qemux86

    core-image-minimal nographic 17
  18. © 2019 NTT Communications 前半おしまい 18

  19. © 2019 NTT Communications 簡単そう? 難しそう? 19

  20. © 2019 NTT Communications ここからがたいへん 20

  21. © 2019 NTT Communications Yocto Challenges • Steep Learning Curve

    • Understanding What Changes You Need to Make For Your Design Requires Some Research ◦ チュートリアル以降の難易度がゲキムズ ◦ 「同じことをするために複数の方法があるので迷う」と公式にあるが、それどこ ろか1つもわからないときがある ◦ わからない→わかる→なんもわからんの繰り返し ◦ ようこそ組み込み開発の世界へ。 21 Ref: https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#gs-challenges
  22. © 2019 NTT Communications • Linuxとその周辺に関する深い知識 ◦ bootloaderからlogin shellが出るまでに何がどう動くかの知識 ◦

    Linuxのディレクトリ構造の知識 ◦ package作成手順の知識 • アプリケーションのビルド経験 ◦ 問題切り分け能力 ▪ Yoctoの特殊環境が原因? ただのバグ? CPUアーキテクチャ固有の問題 ? ◦ 経験からくるエスパー力 ▪ 情報のないエラーログからも10の原因を想定し試して解決する • エラーに絶対負けないという根気 Yocto projectを使うのに必要な能力 22
  23. © 2019 NTT Communications • 自分が初心者の頃わからなかったことを解決していく ここからの方針 23

  24. © 2019 NTT Communications • Yocto projectの全体像 ◦ recipe, config,

    layer, bitbakeの関係 ◦ ソースコードの概要 • 何をしたいときに何をすれば良い? • イメージの変更方法 ◦ パッケージの追加方法(recipe作成) ◦ Kernel moduleの追加(kernel config) ◦ CPUアーキテクチャの設定方法(Machine BSP Config) わからなかったこと 24
  25. © 2019 NTT Communications 今後の目次 • Yoctoの全体像と用語を知る ◦ Overview ◦

    レイヤシステム ◦ build system ◦ ソースコードの概要 • 何をしたいときに何をすれば良い? • Handson: パッケージを追加してみる 25
  26. © 2019 NTT Communications 今後の目次 • Yoctoの全体像と用語を知る ◦ Overview ◦

    レイヤシステム ◦ build system ◦ ソースコードの概要 • 何をしたいときに何をすれば良い? • Handson: パッケージを追加してみる 26
  27. © 2019 NTT Communications Yocto project overview 27

  28. © 2019 NTT Communications Yocto project overview • Yocto projectを構成する要素を分解する

    • 出てくる用語に迷わないようにする ◦ open-embedded(oe) ◦ poky ◦ version(develop name) ◦ bitbake ◦ layer ◦ recipe ◦ etc... 28 Ref: https://www.yoctoproject.org/docs/2.5.2/mega-manual/mega-manual.html#what-is-the-yocto-project
  29. © 2019 NTT Communications Image from : https://www.yoctoproject.org/docs/2.5.2/meg a-manual/figures/key-dev-elements.png Yocto

    project overview • Yocto is not distribution name ◦ Yocto is project name ◦ It contains build-tools, distribution, etc… • Poky ◦ Reference Distribution • OpenEmbedded ◦ Build framework ◦ It provide build system(bitbake, recipe, etc...) 29
  30. © 2019 NTT Communications Simple Image: Yocto project 30 Yocto

    project Poky OpenEmbedded Recipe sets build system Poky based distribution (Linux Kernel + rootfs) Tux: © Larry Ewing, Simon Budig and Anja Gerwinski http://www.home.unix-ag.org/simon/penguin/README
  31. © 2019 NTT Communications Yocto project version • Here is

    version number and codename ◦ 2.6 : thud (latest at 2019/02/01) ◦ 2.5 : sumo ◦ 2.4 : rocko • Yocto using both name ◦ https://git.yoctoproject.org/cgit/cgit.cgi/poky/refs/ ◦ when checkout 2.6 branch(it has update since released) ▪ git checkout -b thud origin/thud ◦ when checkout 2.6 release ▪ git checkout tags/yocto-2.6 -b yocto-2.6 31
  32. © 2019 NTT Communications Build System Overview(simple version) 32 bitbake

    Metadata Configurations Poky based distribution (Linux Kernel + rootfs) Tux: © Larry Ewing, Simon Budig and Anja Gerwinski http://www.home.unix-ag.org/simon/penguin/README
  33. © 2019 NTT Communications Build System Concepts • Metadata(recipe +

    patch) • Configurations ◦ User configuration ◦ Machine BSP Configuration ◦ Policy Configuration • Layer • bitbake 33 https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#openembedded-build-system- build-concepts
  34. © 2019 NTT Communications Recipe • パッケージ作成の素 • ビルド手順(tasks)等が書いてある •

    拡張子は.bbと.bbappendの2種類ある ◦ .bb : オリジナルのレシピファイル ◦ .bbappend : オリジナルに変更を加える 34
  35. © 2019 NTT Communications • イメージに簡易な変更を加える設定集 • 拡張子は.conf • 大まかに以下の3つがある

    ◦ User config(ここではUser configを紹介) ◦ Machine BSP config ◦ Policy Configuration Configurations 35 https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#metadata-machine-configuration-and-poli cy-configuration
  36. © 2019 NTT Communications User configuration • ユーザーの希望する設定をビルドシステムに 伝えるもの •

    build/conf以下にファイルがある • 詳細は次ページ 36 https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#user-configuration
  37. © 2019 NTT Communications User configuration files 37 • conf/bblayers.conf

    ◦ レイヤの登録 ◦ レイヤの順序関係もここで設定 • conf/local.conf ◦ ターゲットマシンの設定や出力イメージタイプの設定な どができる ◦ 追加パッケージ設定もここで行える ◦ 軽微な変更はとりあえずここに書けばOK https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#user-configuration
  38. © 2019 NTT Communications Layer(meta-XXX) • レシピやconfigを集めたもの • イメージはこのレイヤーを重ねて作っ ていく

    • 下のレイヤでappendレシピを書くと 上のレイヤのレシピを加筆修正でき る • レイヤの順序はconf/bblayers.conf に定義されている Distribution layer1 layer3 layer2 38 append append
  39. © 2019 NTT Communications bitbake • イメージをビルドするシステム • Recipeとconfigを参考にソースの取得、ビ ルド、イメージ生成、SDK生成等を行う

    • bitbakeコマンドで使える 39 https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#bitbake-dev-environment
  40. © 2019 NTT Communications これまでの用語まとめ 40 用語 概要 Yocto プロジェクト名

    OpenEmbedded(OE) ビルドシステム Poky ディストリビューション名 thud 開発名。Versionでは2.6 bitbake ビルドシステムのコマンド recipe パッケージビルド方法を書いたもの layer パッケージやconfigをまとめたもの
  41. © 2019 NTT Communications source code overview 41

  42. © 2019 NTT Communications Yocto project source code • Poky

    repository ◦ https://git.yoctoproject.org/git/poky ◦ Yocto projectのシステムが全て入ったリポジトリ • 今後のためPokyディレクトリ以下の構造を簡単にご説明 42
  43. © 2019 NTT Communications tree -L 1 poky 43

  44. © 2019 NTT Communications tree -L 1 poky 44 bitbakeコマンドなど

    ビルドシステムのファイルが 入っている
  45. © 2019 NTT Communications tree -L 1 poky 45 ビルド用ディレクトリ

    ビルド済みイメージや user configなどが入る
  46. © 2019 NTT Communications tree -L 1 poky 46 最初から用意されている

    layer たち
  47. © 2019 NTT Communications tree -L 1 poky 47 環境設定用ファイル

    最初にsourceコマンドで読み 込む
  48. © 2019 NTT Communications tree -L 1 poky 48 開発を便利にするスクリプトた

    ちがあるところ wicやrunqemuはここにある
  49. © 2019 NTT Communications その他知ると便利なディレクトリ • build/tmp/deploy/images/[machine] ◦ ビルド後のイメージが入っているディレクトリ ◦

    .ext4やbzImageなど • build/tmp/deploy/licenses ◦ packageのライセンスが集められているディレクトリ 49
  50. © 2019 NTT Communications 今後の目次 • Yoctoの全体像と用語を知る ◦ Overview ◦

    レイヤシステム ◦ build system ◦ ソースコードの概要 • 何をしたいときに何をすれば良い? • Handson: パッケージを追加してみる 50
  51. © 2019 NTT Communications 何をしたいとき何をすれば良い? 51

  52. © 2019 NTT Communications 何をしたいときに何をすれば良いかのまとめ 52 やりたいこと 方法 パッケージの追加したい recipeの追加、新規作成

    既存パッケージの編集したい recipeの加筆修正 既存パッケージのconfigを変更したい local.conf修正など Linux Kernel configを変更したい recipeの加筆修正 ISOイメージからインストールしたい local.conf修正、recipeの加筆修正 Target CPUを変更したい Machine BSP configの作成 local.confの修正
  53. © 2019 NTT Communications 今後の目次 • Yoctoの全体像と用語を知る ◦ Overview ◦

    レイヤシステム ◦ build system ◦ ソースコードの概要 • 何をしたいときに何をすれば良い? • Handson: パッケージを追加してみる 53
  54. © 2019 NTT Communications Handson: Add new package to reference

    image 54
  55. © 2019 NTT Communications • Add cowsay command with devtool

    ◦ cowsay: 牛が話すジョークアプリ ◦ devtool: レシピの追加等をサポートする ヘルパーツール ◦ https://github.com/schacon/cowsay Handson: Add new package to reference image 55
  56. © 2019 NTT Communications • レシピの書き方 ◦ https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#new-recipe-writing-a- new-recipe ◦

    https://www.slideshare.net/iwamatsu/ss-31662659 • devtoolの使い方 ◦ https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#using-devtool-in-your- sdk-workflow ◦ https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#ref-devtool-reference ◦ https://kumadasu.com/2017/05/14/devtool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96 %B9-1%EF%BC%9A%E7%92%B0%E5%A2%83%E6%BA%96%E5%82%99%E3%81%A8% E3%83%AC%E3%82%B7%E3%83%94%E4%BD%9C%E6%88%90%E3%81%AE%E6%B5 %81%E3%82%8C/ Reference: devtool, recipe 56
  57. © 2019 NTT Communications devtoolを用いたレシピ作成手順 1. レシピの雛形作成 2. レシピ編集 3.

    ビルド 4. テスト 5. 2. から 4.の繰り返し 6. layerへのレシピ追加 7. ビルドテスト 57
  58. © 2019 NTT Communications 雛形作成 • レシピの雛形作成 ◦ devtool [options]

    [package name] [source url] ◦ example: devtool add cowsay https://github.com/schacon/cowsay • options ◦ add : recipeの新規作成(.bb) ◦ modify: 既存recipeの修正(.bbappend) ◦ upgrade: recipeのバージョンUP 58
  59. © 2019 NTT Communications devtool add 実行後の変化 59 build/workspace レイヤが増える

  60. © 2019 NTT Communications workspaceディレクトリの中身 60 レシピ(.bb)ファイル のあるところ

  61. © 2019 NTT Communications workspaceディレクトリの中身 61 ビルドに使うソース gitで管理されてる 編集内容はパッチにできる

  62. © 2019 NTT Communications cowsay_git.bb 62

  63. © 2019 NTT Communications cowsay_git.bb 63 Variables Tasks

  64. © 2019 NTT Communications cowsay_git.bb 64 ライセンス指定 known licenseなら自動設定

  65. © 2019 NTT Communications cowsay_git.bb 65 ソースコードの取得指定

  66. © 2019 NTT Communications cowsay_git.bb 66 Yocto側のパッケージ バージョン指定

  67. © 2019 NTT Communications cowsay_git.bb 67 ソースコードのリビジョン (gitのcommit id)

  68. © 2019 NTT Communications cowsay_git.bb 68 ビルドする ソースコードの場所指定

  69. © 2019 NTT Communications cowsay_git.bb 69 build taskたち makeでは以下に対応 ./configure

    make make install
  70. © 2019 NTT Communications Tips: ビルド手順の指定(tasks) • recipeはbuild tasks(do_***)を記述するもの •

    基本はdo_configure, do_compile, do_installの3つ • known build system(make, cmake)は省略可(inherit) ◦ ただし変更がある場合はtasksの記述が必要 • 参考 ◦ https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html# normal-recipe-build-tasks 70
  71. © 2019 NTT Communications tasksの書き方 1. 通常のインストール手順を確認する 2. recipeのdo_***に記述 3.

    ビルド 4. デバッグ 71
  72. © 2019 NTT Communications cowsay_git.bb diff 72 • ./install.sh PREFIX_PATHでインストールできる

    • インストール先は ${D}/${prefix}
  73. © 2019 NTT Communications Tips: ${prefix}などの変数定義 • ${D}の他にも変数がある ◦ ${prefix}

    : /usr ◦ ${bindir} : ${prefix}/bin ◦ ${datadir} : ${prefix}/share ◦ … • 詳細な定義は以下を参照 ◦ http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/conf/bitbake.conf?h=bli nky 73
  74. © 2019 NTT Communications • とりあえずビルドしてみる ◦ devtool build cowsay

    ビルド 74
  75. © 2019 NTT Communications 75 Error

  76. © 2019 NTT Communications エラー修正 • logファイルを格納した場所の案内がある • このファイルを参考に原因を探っていく 76

  77. © 2019 NTT Communications Tips: build/.../[package]/[version]/temp 以下の話 • [package]/[version]/[temp] 以下は各タスクの実行スクリプト

    とそのログがある • エラー原因はここで調べる 77
  78. © 2019 NTT Communications log.do_configure • recipeにはパッケージに含めるファイル一覧記述が必要 • FILESで設定する。設定内容と実態が異なるとエラー。 ◦

    https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#var-FILES 78
  79. © 2019 NTT Communications cowsay_git.bb 79 • ${D}/usr/ 以下にインストールされたファイルたちを列挙 •

    これでビルド成功
  80. © 2019 NTT Communications • パッケージを実際に動くか確かめてみる • devtool deploy-target [package]

    root@192.168.7.2 ◦ runqemuで動かしたイメージにパッケージを転送するコマンド ◦ runqemuで動かすイメージにSSH serverが必要 deploy 80
  81. © 2019 NTT Communications Tips: imageへのSSHサーバー追加 • conf/local.confに変更を加えて再ビルド ◦ EXTRA_IMAGE_FEATURESにssh-server-opensshを追加

    ◦ 再ビルドコマンドは bitbake core-image-minimal 81
  82. © 2019 NTT Communications deploy • Terminal 1でqemuを起動 ◦ runqemu

    nographic core-image-minimal # enter sudo password • Terminal 2でパッケージを転送 ◦ devtool deploy-target cowsay root@192.168.7.2 -c ◦ -c: no ssh-hostkey check 82
  83. © 2019 NTT Communications Test cowsay on qemu 83

  84. © 2019 NTT Communications debug 84 cowsayは入ってる

  85. © 2019 NTT Communications debug 85 shebangがおかしい ビルドマシンのパスを見てる perlが欲しそう

  86. © 2019 NTT Communications debug 86 Perl入ってない

  87. © 2019 NTT Communications 解決すべき問題 • 依存パッケージのperlを入れる • recipeを修正してshebangを正す 87

  88. © 2019 NTT Communications Fix runtime package dependency problems 88

    • 正しい手順 ◦ 依存情報をレシピに記載する(RDEPENDS) ◦ RDEPENDS_${PN} += "perl perl-modules" とレシピに書いておけばビルド時に勝手に依存関係が解決 • 今回の手順 ◦ devtoolはruntime依存パッケージインストールができない ▪ 知らないだけ…? ◦ local.confに書いて最初から入れる方法を取る
  89. © 2019 NTT Communications Tips: DEPENDS と RDEPENDS • DEPENDS

    ◦ build time depend packageを追加する変数 ◦ 参考 ▪ https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#var-DEPENDS • RDEPENDS ◦ runtime depend packageを追加する変数 ◦ ここに書いたパッケージは依存で勝手にインストールされる ▪ (はずなのだけど私の環境ではうまく動いてない時がある ) ◦ RDEPENDS_${PN} += "perl perl-modules" を書いておく 89
  90. © 2019 NTT Communications Add package to image 90 •

    conf/local.conf に以下を追記 ◦ CORE_IMAGE_EXTRA_INSTALL += "perl perl-modules" • rebuild ◦ bitbake core-image-minimal
  91. © 2019 NTT Communications shebang修正 91 Installerがshebangを書き換え $usethisperlにはビルドシステム のperlのパスが入ってる

  92. © 2019 NTT Communications shebang修正 • workspace/sources/cow say/cowsay を修正 ◦

    envコマンドでperlを参照 ◦ cowsのパスを固定 92
  93. © 2019 NTT Communications Success! 93

  94. © 2019 NTT Communications 残りの作業 • デバッグ後はレシピをレイヤに登録する • レイヤがないときは新規作成する 94

  95. © 2019 NTT Communications Add new layer • poky/build/meta-joke layerを作る

    ◦ bitbake-layers create-layer "$BUILDDIR/meta-joke" • poky/build/meta-joke layerをlayerとして追加する ◦ bitbake-layers add-layer "$BUILDDIR/meta-joke" 95
  96. © 2019 NTT Communications Layerへのレシピ登録 • devtool finish cowsay meta-joke

    ◦ devtoolで作ったrecipe(cowsay)をlayer(meta-joke)に登録する • sourceを編集した場合 ◦ workspace/sourceで変更点をgit commitする ◦ untracked fileなどが残ってるとdevtool finishがエラーになる ◦ in-source buildなコードはこのあたりで辛くなる ◦ 絶対にout-of-source buildしよう!! 96
  97. © 2019 NTT Communications Add package to image 97 •

    CORE_IMAGE_EXTRA_INSTALLにパッケージを書く • conf/local.conf に以下を追記 ◦ CORE_IMAGE_EXTRA_INSTALL += "cowsay" • rebuild ◦ bitbake core-image-minimal
  98. © 2019 NTT Communications Finish!! 98

  99. © 2019 NTT Communications まとめ 99

  100. © 2019 NTT Communications • Yocto project makes that easy(:thinking_face:)

    to create custom linux image. まとめ 100
  101. © 2019 NTT Communications Certificate You are master of Yocto

    because you finished this handson. Welcome to embedded world!! 101
  102. © 2019 NTT Communications Yoctoの学び方 • エラー内容でググる • やりたいことの単語でググる •

    既存のレシピを読んで書き方を覚える • ビルドシステムのコードを読んで理解する 102
  103. © 2019 NTT Communications Appendix 103

  104. © 2019 NTT Communications 1. Machine BSP Configのつくりかた 2. Installerのつかいかた

    Appendix 104
  105. © 2019 NTT Communications Appendix 1. Machine BSP configの作り方 105

  106. © 2019 NTT Communications • ターゲットマシンを定義するconfig ◦ local.confのMACHINE変数で選択してるやつ • なぜ作るか

    ◦ 既存のMACHINEで希望が満たせないときに作る ◦ 例:Core iシリーズ以降でないと動かないプログラムを使いたい • 書く場所 ◦ meta-hoge/conf/machine/[machine-name].conf Machine BSP configとは 106
  107. © 2019 NTT Communications おすすめの書き方 • すでに書かれたconfigを参考に作る ◦ meta-intel ◦

    https://git.yoctoproject.org/cgit.cgi/meta-intel/tree/conf/machine/intel-corei 7-64.conf?h=thud • 107
  108. © 2019 NTT Communications Machine BSP Configに書くこと • 実機で動かす向けの設定 ◦

    DEFAULTTUNE ◦ MACHINE_FEATURES ◦ KERNEL_FEATURES • qemu向けの設定(runqemu動かすのに必要) ◦ virtioの追加 ◦ QB_***変数の追加 108
  109. © 2019 NTT Communications 実機で動かす向け設定 • アーキテクチャやCPUを設定する • 既存の.incファイルは以下にある ◦

    poky/meta/conf/machine/ • 例: core-iシリーズ(nehalem)以降が欲しい時 ◦ DEFAULTTUNE ?= "corei7-64" ◦ require conf/machine/include/tune-corei7.inc ◦ require conf/machine/include/genericx86-common.inc 109
  110. © 2019 NTT Communications qemu向けの設定 • runqemuを動かすための設定がいる ◦ virtioドライバ追加 ◦

    kernel optionの追記 ◦ その他 • QB_***の設定を行っていく 110
  111. © 2019 NTT Communications kamuee-corei7-64.conf 111

  112. © 2019 NTT Communications kamuee-corei7-64.conf 112 qemuを依存に追加

  113. © 2019 NTT Communications kamuee-corei7-64.conf 113 image class追加

  114. © 2019 NTT Communications kamuee-corei7-64.conf 114 kamuee-corei7-64でつかうqemu バイナリの指定

  115. © 2019 NTT Communications kamuee-corei7-64.conf 115 qemuとkvmで使うCPU設定

  116. © 2019 NTT Communications kamuee-corei7-64.conf 116 その他qemuオプション追記

  117. © 2019 NTT Communications kamuee-corei7-64.conf 117 メモリサイズ設定

  118. © 2019 NTT Communications kamuee-corei7-64.conf 118 Kernel cmdline設定

  119. © 2019 NTT Communications kamuee-corei7-64.conf 119 virtioモジュール追加 ※ストレージアクセスに必要 無いとKernelがrootfs検出に失敗 する

  120. © 2019 NTT Communications Appendix 2. Installerの使い方 120

  121. © 2019 NTT Communications • Yoctoが標準で持ってるinstaller • IMAGE_FSTYPEにISOを追加 するとgrubのエントリとして出てく る

    YoctoのInstaller 121
  122. © 2019 NTT Communications Installerの実態 • initrd-scriptsパッケージにある a. meta/recipes-core/initrdscripts •

    インストールスクリプト a. meta/recipes-core/initrdscripts/files/init-install*.sh • 起動の流れ a. grub b. linux kernel c. sysinit/systemd d. init-install*.sh 122
  123. © 2019 NTT Communications init-install*.shの動作 • インストール先ディスク選択 • パーティション作成 •

    fstab作成 ◦ init-install*.sh内記述から生成。外部ファイルは参照しない • grubインストール • grubエントリ作成 ◦ こちらもinit-install*.sh内記述から生成 123
  124. © 2019 NTT Communications 注意点 • fstabとgrubエントリはinit-install*.shから作られる ◦ 他のレシピで設定した内容は無視される ◦

    インストール後のFS等を設定したいならinit-install*.shを設定する 124