みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

YoctoProject devtoolを使ってみる(modify編)

はじめに

下記ではdevtoolについて解説してきた。

devtoolでは以下のことができる。

  • レシピの新規作成
  • レシピの編集
  • レシピのアップグレード

今回はレシピの編集に注目してみる。

環境構築

作業用レイヤ

作業用レイヤとしてmeta-modifyを作成する。

$ bitbake-layers create-layer ../poky/meta-modify
$ bitbake-layers add-layer ../poky/meta-modify

サンプルレシピ

YoctoProject devtoolを使ってみる(add編)で作成したhello-autotoolsのレシピであるhello_0.0.1.bb使用する。

devtoolによるレシピの編集

ワークスペースへの登録

$ devtool modify hello

ワークスペースを確認する。

workspace
├── README
├── appends
│   └── hello_0.0.1.bbappend
├── conf
│   └── layer.conf
└── sources
    └── hello
        ├── LICENSE
        ├── Makefile.am
        ├── README.md
        ├── configure.ac
        └── src
            ├── Makefile.am
            ├── hello.cpp
            ├── hello.h
            └── main.cpp

ちなみにdevtool modifyの場合はYoctoProject devtool addでローカルのソースをレシピ化することを考えるで扱ったhelloworldの様にローカルのソースを持ったレシピでもワークスペースのsourcesディレクトリにソースを展開してくれる。

initial-revの確認

hello_0.0.1.bbappendでinitial-revを確認する。

$ grep 'initial_rev' workspace/appends/hello_0.0.1.bbappend
# initial_rev: 36ef62fd0cd05f72f589a296e39044d71371a46b

このリビジョンが修正差分の基点となる。

ソースを修正する

ソースを修正してみる。 もともと大した処理はしていないのでループにしてみる。

diff --git a/src/main.cpp b/src/main.cpp
index ae9fcb0..3ae5264 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,6 +1,11 @@
 #include "hello.h"
+#include <iostream>

 int main() {
-    Hello("world").say();
+    Hello hello("world");
+    for (int i = 0; i < 10; ++i) {
+        std::cout << "i = " << i << " : ";
+        hello.say();
+    }
     return 0;
 }

コミットする。

$ git commit -m "Modify to loop"

ついでにREADME.mdも修正してみる。

diff --git a/README.md b/README.md
index 9a047d9..fe1b69e 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
 # hello-autotools

 This repository contains a sample project using the Autotools.
+
+The sample program says "hello" to the world.

こちらもコミットする。

$ git commit -m "Update README"

コミット履歴を見る。

$ git log --oneline
5344599 (HEAD -> devtool) Update README
0bc1094 Modify to loop
36ef62f (tag: devtool-patched, tag: devtool-base, origin/main, origin/HEAD, main) Add the program
5b8d63b Initial commit

2つコミットが積まれている。

meta-modifyに修正内容を登録

devtool finishを行いmeta-modifyにレシピの修正差分を登録する。

$ devtool finish -r hello ../poky/meta-modify

meta-modifyの内容を確認する。

../poky/meta-modify/
├── COPYING.MIT
├── README
├── conf
│   └── layer.conf
├── recipes-app
│   └── hello
│       ├── hello
│       │   ├── 0001-Modify-to-loop.patch
│       │   └── 0002-Update-README.patch
│       └── hello_%.bbappend
├── recipes-example
│   └── example
│       └── example_0.1.bb
└── recipes-recipetool

bbappendが作成されinitial-rev以降の2つのコミットがパッチとしてレシピに登録されている。 このパッチはgit format-patchによって生成されている。

この時点のworkspaceを確認する。

workspace/
├── README
├── appends
├── conf
│   └── layer.conf
└── sources

初期状態に戻っている。

まとめ

devtool modifyは文句なく便利。