This service is available only in Japanese-language.

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 }

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