This service is available only in Japanese-language.

Column & Tips

2020年4月9日、10日のWebinarで実演したdevtoolを使用したレシピ作成の内容


2020年4月9日、10日のWebinarで実演したdevtoolを使用したレシピの作成の内容です。

devtool を使用した外部ソースツリーのレシピ化

1. 動作環境の設定

devtool は、拡張SDKの中でも実行可能ですが、今回のBSPではbitbake 環境下で
  実施しています。

BSPを展開したディレクトリで、初期化実行後の環境設定スクリプトを
  プロジェクトのビルドディレクトリ"build" を指定して実行します。

  $ source setup-environment build

2. devtool を使用して外部ソース(localのソースツリー)を指定して
  レシピを作成する

  devtool でレシピを作成する際は サブコマンド add に続けて
  作成するレシピ名、ソースコードの保存されている場所 を指定して
  実行します。

  $ devtool add cui-helloworld ./cui_helloworld-1.0

初めて devtool を実行した場合、build ディレクトリ以下に、workspace
という名称のレイヤーが作成され、自動的に conf/bblayers.conf に追加
されます。

3. 生成されたレシピを指定してパッケージの生成を行う

  $ devtool build cui-helloworld

4. 生成されたパッケージをターゲットボードに転送する(当日、未実行)

  ターゲットボードに対してアクセス可能なユーザー名とIPアドレスを指定して
  ターゲットボードに生成したパッケージを転送、ターゲット上で展開して
  動作確認が可能となります。

  $ devtool deploy-target cui-helloworld ユーザー名@IPアドレス

5. workspaceに含まれるレシピを加えたイメージを生成する

現在workspaceで作業を行っているレシピを追加してイメージを生成します。

  $devtool build-image fsl-image-qt5-validation-imx

付録

生成された workspace 内のファイル一覧
---------------------------------------------------------
$ tree workspace/
workspace/
|-- README
|-- appends
| `-- cui-helloworld_1.0.bbappend
|-- conf
| `-- layer.conf
`-- recipes
`-- cui-helloworld
`-- cui-helloworld_1.0.bb
---------------------------------------------------------

conf/layer.conf の内容を確認する
---------------------------------------------------------
$ cat -n workspace/conf/layer.conf
1 # ### workspace layer auto-generated by devtool ###
2 BBPATH =. "${LAYERDIR}:"
3 BBFILES += "${LAYERDIR}/recipes/*/*.bb \
4 ${LAYERDIR}/appends/*.bbappend"
5 BBFILE_COLLECTIONS += "workspacelayer"
6 BBFILE_PATTERN_workspacelayer = "^${LAYERDIR}/"
7 BBFILE_PATTERN_IGNORE_EMPTY_workspacelayer = "1"
8 BBFILE_PRIORITY_workspacelayer = "99"
9 LAYERSERIES_COMPAT_workspacelayer = "${LAYERSERIES_COMPAT_core}"
---------------------------------------------------------
3行目、4行目で本レイヤーに含まれる.bb 及び .bbappend の場所を
定義しているが、.bb と .bbappend が別のディレクトリに存在するなど
少し変わった作りとなっている。
7行目の "BBFILE_PATTERN_IGNORE_EMPTY" 変数は、レイヤー内にBBFILESが
1つもない場合の警告を無視する設定(devtool実行中.bb 及び .bbappend を
移動または削除する事があるため)。
8行目、このレイヤーの優先度は99と非常に高い値が設定されている。

レシピファイルの中身を確認
---------------------------------------------------------
$ cat -n workspace/recipes/cui-helloworld/cui-helloworld_1.0.bb
1 # Recipe created by recipetool
2 # This is the basis of a recipe and may need further editing in order to be fully functional.
3 # (Feel free to remove these comments when editing.)
4
5 # WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
6 # your responsibility to verify that the values are complete and correct.
7 LICENSE = "GPLv3"
8 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
9
10 # No information for SRC_URI yet (only an external source tree was specified)
11 SRC_URI = ""
12
13 # NOTE: if this software is not capable of being built in a separate build directory
14 # from the source, you should replace autotools with autotools-brokensep in the
15 # inherit line
16 inherit autotools
17
18 # Specify any options you want to pass to the configure script using EXTRA_OECONF:
19 EXTRA_OECONF = ""
20
---------------------------------------------------------
ライセンスの表示及び、ソースコードの種別が autotools を使用することの指定のみ。
ソースコードの場所の定義は、 .bb では行われていない。

bbappendファイルの確認
---------------------------------------------------------
$ cat -n workspace/appends/cui-helloworld_1.0.bbappend
1 inherit externalsrc
2 EXTERNALSRC = "/home/lineo/imx/4.14.98-2.0.0GA/build/cui_hellowolrd-1.0"
---------------------------------------------------------
bbappendファイルの中で、1行目で、外部ソースツリーを使用する際に使用するクラスを
読み込む指定を行い、2行目で、外部ソースツリーのパスを指定している。

動作確認に使用したソースは以下となります。
---------------------------------------------------------
cui_helloworld-1.0/
|-- AUTHORS
|-- COPYING
|-- ChangeLog
|-- Makefile.am
|-- NEWS
|-- README
|-- configure.ac
`-- cui_helloworld.c
---------------------------------------------------------
ls -l
合計 48
-rw-rw-r-- 1 lineo lineo 0 12月 27 2016 AUTHORS
-rw-r--r-- 1 lineo lineo 35147 12月 27 2016 COPYING
-rw-rw-r-- 1 lineo lineo 0 12月 27 2016 ChangeLog
-rw-rw-r-- 1 lineo lineo 71 12月 27 2016 Makefile.am
-rw-rw-r-- 1 lineo lineo 0 12月 27 2016 NEWS
-rw-rw-r-- 1 lineo lineo 0 12月 27 2016 README
-rw-rw-r-- 1 lineo lineo 563 12月 27 2016 configure.ac
-rw-rw-r-- 1 lineo lineo 327 12月 27 2016 cui_helloworld.c
---------------------------------------------------------

COPYING ファイルは、GPLv3のライセンス文書(元々のサンプルはgnu)

---------------------------------------------------------

Makefile.am

1 bin_PROGRAMS = cui_helloworld
2 cui_helloworld_SOURCE = cui_helloworld.c

---------------------------------------------------------

configure.ac

1 # -*- Autoconf -*-
2 # Process this file with autoconf to produce a configure script.
3
4 AC_PREREQ([2.69])
5 AC_INIT([cui_hellowolrd], [1.0])
6 AC_CONFIG_SRCDIR([cui_helloworld.c])
7 AC_CONFIG_HEADERS([config.h])
8 AM_INIT_AUTOMAKE
9
10 # Checks for programs.
11 AC_PROG_CC
12
13 # Checks for libraries.
14
15 # Checks for header files.
16 AC_CHECK_HEADERS([stdlib.h sys/time.h])
17
18 # Checks for typedefs, structures, and compiler characteristics.
19
20 # Checks for library functions.
21 AC_CHECK_FUNCS([gettimeofday])
22
23 AC_CONFIG_FILES([Makefile])
24 AC_OUTPUT

---------------------------------------------------------

1 #include "config.h"
2
3 #include <stdio.h>
4 #include <stdlib.h>
5
6 #ifdef HAVE_SYS_TIME_H
7 #include <sys/time.h>
8 #endif
9
10 void print()
11 {
12
13 #ifdef HAVE_SYS_TIME_H
14 struct timeval tv;
15 gettimeofday(&tv,NULL);
16 printf("tv_sec:%ld\n",tv.tv_sec);
17 #endif
18 printf("hello world\n");
19
20 }
21
22 int main(int argc, char**argv)
23 {
24 print();
25 exit(0);
26 }

---------------------------------------------------------

2020年4月9日、10日のWebinarで実演したSDKを使用したアプリケーション構築の内容


2020年4月9日、10日に実演したSDKを使用したアプリケーション構築の内容です。

1) native 構築の確認
$ gcc -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-3.0`

2) 構築されたプログラムの動作確認
$ ./helloworld

3) 構築環境(pkg-config)の確認
$ pkg-config --cflags --libs gtk+-3.0
-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/mirclient -I/usr/include/mircore -I/usr/include/mircookie -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

4) cross 構築環境の設定
$ source /opt/fsl-imx-xwayland/4.14-sumo/environment-setup-aarch64-poky-linux

5) 設定された環境の確認
$ printenv CC
aarch64-poky-linux-gcc --sysroot=/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux

CC環境変数に、クロスコンパイラであるaarch64-poky-linux-gcc と、/usr/include や /usr/lib にある
ことを期待するファイルを検索する際の起点をクロス構築用に置き換える sysroot が指定されています。

6) cross 構築
$ $CC -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-3.0`

native構築で、gcc と指定した分を $CC に置き換えるだけで、arm 向けの構築が可能となります。

7) 構築環境(pkg-config)の確認
$ pkg-config --cflags --libs gtk+-3.0
-DLINUX -DEGL_API_FB -DWL_EGL_PLATFORM -pthread -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/gtk-3.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/at-spi2-atk/2.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/at-spi-2.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/dbus-1.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/lib/dbus-1.0/include -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/gtk-3.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/gio-unix-2.0/ -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/cairo -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/libdrm -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/pango-1.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/harfbuzz -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/pango-1.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/atk-1.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/cairo -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/pixman-1 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/freetype2 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/libpng16 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/gdk-pixbuf-2.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/libpng16 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/include/glib-2.0 -I/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux/usr/lib/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

付録

ソースコード helloworld.c

=============================================================================================
1 #include <gtk/gtk.h>
2
3 static void
4 print_hello (GtkWidget *widget,
5 gpointer data)
6 {
7 g_print ("Hello World\n");
8 }
9
10 static void
11 activate (GtkApplication *app,gcc -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-3.0`
12 gpointer user_data)
13 {
14 GtkWidget *window;
15 GtkWidget *button;
16 GtkWidget *button_box;
17
18 window = gtk_application_window_new (app);
19 gtk_window_set_title (GTK_WINDOW (window), "Window");
20 gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
21
22 button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
23 gtk_container_add (GTK_CONTAINER (window), button_box);
24
25 button = gtk_button_new_with_label ("Hello World");
26 g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
27 g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
28 gtk_container_add (GTK_CONTAINER (button_box), button);
29
30 gtk_widget_show_all (window);
31 }
32
33 int
34 main (int argc,
35 char **argv)
36 {
37 GtkApplication *app;
38 int status;
39
40 app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
41 g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
42 status = g_application_run (G_APPLICATION (app), argc, argv);
43 g_object_unref (app);
44
45 return status;
46 }
=============================================================================================

Yocto2.6のリリース時期について


本来であれば10/26 リリース予定のYocto2.6(thud)ですが、ようやくgitサーバーにbranch thud が登録されリリース候補版の
Fixが迫ってきました。
http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=thud

一通りのFixが終わり、meta-poky/conf/poky.conf のDISTRO_VERSION が"2.5+snapshot-${DATE}" から2.6に変わるタイミングで
QAに回り、正式リリースとなる予定です。
http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta-poky/conf/distr...

Update:2018/10/30
2018-10-29 17:32:20 +0000 に、DISTRO_VERSIONが正式に2.6となりました。
https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?h=thud&id=4e6ce6...

2018/11/14 から開催のET2018では、最新版のYocto Project Thudをカスタマイズしたデモを展示予定ですので
展示会にお越しの皆様、是非ともリネオブースにお立ち寄りください。

Update: 2018/11/05
Yocto2.6での変更点に関しては、以下のページをご参照ください。
リリース後に公開となるリファレンスマニュアルに記載される情報です。
https://wiki.yoctoproject.org/wiki/FutureMigrationGuide

Update 2018/11/15
当初予定は2018/10/26、RC1のQA開始後は2018/11/09にリリース予定でしたが、QAで複数の構築エラーが発生しリリースが延期となっています。
原因を確認しBUGの登録が済み” Known Issues”への追記が行われておりますので、間もなくリリースのアナウンスが流れる予定です。

組み込みLinux超入門セミナー NXP i.MX8編で行ったdemoについて


使用したソースコード
buildディレクトリ以下の
tmp/work/aarch64-mx8mq-poky-linux/qtbase/5.9.4+gitAUTOINC+0d9208cecb-r0/git/examples/widgets/graphicsview/collidingmice
を任意の場所にコピーして実施。

構築手順
1) source /opt/fsl-imx-xwayland/4.9.88-2.0.0/environment-setup-aarch64-poky-linux を実行して、cross構築の環境設定を行う。
2) ソースコードをコピーしたディレクトリに移動する。
3) qmake コマンドを実施して、qtのbuild環境の設定を行う。
4) make コマンドを実行して、アプリケーションの構築を行う。
5) 構築されたcollidingmice を 転送を行うためホームディレクトリにコピーする。
6) ターゲットボードから、ftpget コマンドを使用して colldingmice を開発ホストからダウンロードする。
7) ターゲットボード上で、collifdingmice を chmod +x を行い、実行属性を設定する。
8) collidingmice を実行する。
9) 表示させるネズミの数を変更する場合は、collidingmice.cpp の57行目の static const int MouseCount = の値を変更する。
10) 変更の確認 4)-6) を繰り返す。

2. マルチメディアデモ

使用した動画ファイル
meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb を使用

bitbake-layers コマンドを使用して、meta-openembedded/meta-multimedia を bblayers.conf に追加する。
conf/local.conf に、IMAGE_INSTALL_append = " bigbuckbunny-1080p" を追記し、rootfsに組み込むように指定。

 
動画再生例
1) gplay を使用
gplay-1.0 /usr/share/movies/big_buck_bunny_1080p_surround.avi

2) gst-launch を使用
gst-launch-1.0 \
playbin uri=file:///usr/share/movies/big_buck_bunny_1080p_surround.avi

Yocto2.5の新機能 その1


現在4月末にリリース予定(延期の可能性もあります)のYocto2.5(Sumo)のリリース候補版の評価をおこなっています。
数回に別けて、新規に追加された機能を紹介していきたいと思います。

LAYERSERIES変数の追加
この変数は、conf/bblayers.conf に登録されている各レイヤーのconf/layer.conf に記述する変数で、layerの各レシピが
yoctoのどのバージョンと互換性を持つのかを記述可能となっています。

OpenEmbedded Layer Index で Branch master で検索によってヒットしたレシピやレイヤー、喜んで取得したものの
古すぎて使えなかったという経験をされた方も多いと思います。
#OpenEmbedded Layer Index ↓
http://layers.openembedded.org/layerindex/branch/master/layers/

Yocto2.5から、LAYERSERIES変数が設定されていないlayerを conf/bblayers.conf に含んだ状態でbitbakeを実行した
場合、warningを出して確認を求めるような仕様変更が行われています。
http://lists.openembedded.org/pipermail/openembedded-core/2018-April/149...

pokyにて配布するpoky/meta に含まれてない基本的なレシピ(日本語のフォント等も提供されています)を集めた
base layer の meta-openembedded/meta-oe では、4月13日付けで対応が行われ、現在branch master で取得可能な
レイヤーは sumo 互換であることが確認できます。

chromiumのレシピが含まれるmeta-browser レイヤーについては4/7付けで対応が行われており、現在のbranch master
は、rocko/sumo の2バージョン対応となっています。
https://github.com/OSSystems/meta-browser/commit/2b9134ff33c4680ee0f52a3...

Yocto2.5 M3にて、RPMを使用したpackage-indexのbugが修正されています


Yocto 2.3 からパッケージ形式にRPMを指定した場合、bitbake package-index で、repodataが tmp/deploy/rpm/ 直下にのみ生成してしまうというbugがあり、
DNFを使用したパッケージ管理を行う場合にcreaterepoコマンドを別途インストールして実行する必要がありましたが、本日リリースのアナウンスされた
Yocto 2.5M3 にて修正が行われていました。

Yocto 2.3/ 2.4 ベースのBSPで、パッケージ形式にRPMを使用している場合、2018/4/13 現在、yocto 2.3 / 2.4 に向けて package_manager.py の修正の
コミットは行われておりませんが、Yocto 2.5M3 の meta/lib/oe/package_manager.py に置き換えることで、bitbake package-index 実行後 tmp/deploy/rpm/[arch]/ 以下に
repodataが生成されることを確認できております。

gcc6系列は6.4に移行


morry-next,pyro-nexr,rocko-nextで動作確認が行われていたgcc6.4が3/14付けでmort,pyro,rockoにマージされました。
従来mortyはgcc6.2 pyro及びrockoはgcc6.3でリリースされていましたが、gcc6系列は6.4を使用する方針となりました。
2018年4月リリース予定のYocto2.,2.4(mory)及び2.3.4(pyro)は、gcc6.4のマージにより、予定どおりQAに入る模様です。

Yocto ProjectのWebSiteで紹介されている書籍


新しくなったYoctoProjectのWebSiteで、以前はblogで紹介されていた関連書籍情報が更新されて
掲載されています。一覧は、以下のURLとなります。
https://www.yoctoproject.org/learn/books/

リンクの有るもの無いもの、有ってもUSのサイトにリンクが張られているため日本のamazonのリンクを
記載します。

Embedded Linux Systems with the Yocto Project (Pearson Open Source Software Development Series)
著者:Rudolf J. Streif
発行日:2016/5/12
http://amzn.asia/ipEiBUy

Embedded Linux Development Using Yocto Project Cookbook
著者;Alex Gonzalez
発行日:2018/1/25
http://amzn.asia/679ouYz

Linux: Embedded Development
著者:Alexandru Vaduva,‎ Alex Gonzalez,‎ Chris Simmonds
発行日:2016/9/27
http://amzn.asia/8U3zVLO

Mastering Embedded Linux Programming-Second Edition
著者:Chris Simmonds
発行日:2017/6/30
http://amzn.asia/0vaZIR8

Using Yocto Project with BeagleBone Black
著者:H M Irfan Sadiq
発行日:2015/6/30
http://amzn.asia/1gsBBYy

Learning Embedded Linux Using the Yocto Project
著者:Alexandru Vaduva
発行日:2015/6/30
http://amzn.asia/i2pXcT0

Embedded Linux Projects Using Yocto Project Cookbook
著者:Alex Gonzalez
発行日:2015/3/30
http://amzn.asia/d5Pm8HS

Yocto ProjectのWebSiteがリニューアルしました


本日(2018年3月6日)、YoctoProjectのWebSite https://www.yoctoproject.org/ がリニューアルしました。
リニューアルに伴い、ページ構成ががらりと変わってしまい、本サイトからリンク切れが生じております。
ご迷惑をおかけしますが、順次修正を行っていきますので、ご了承くださいますようよろしくお願いします。

Spectre及びMeltdown対応版のリリース予定


先日までTBDとなっていたSpectre 及びMeltdown 対応版のリリースについてですが、
2.2.4 / 2.3.4 は 2018年4月 、2.4.2 は 2018年3月 をめどにリリースを行うようスケジューリング
されています。
2.4.2 に関しては、gccのバージョンを 7.2 から 7.,3 に上げることで対応を行いますが
2.2.4 / 2.3.4 に関しては、 upstreamのバックポートの対応が行われた後に、QAを経ての
リリースとなる予定です。

ページ