前提
yoctoのフルビルドは1回終わっているものとする
Autotoolsでアプリを作成
ファイル作成
main.c, configure.ac, Makefile.amを用意する
# include <stdio.h>
int main(int argc, char *argv[])
{
printf("hello, world\n");
return 0;
}
AC_INIT([Tutorial Program], 1.0)
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
bin_PROGRAMS = tut_prog
tut_prog_SOURCES = main.c
automakeがエラーしないようにファイルを作成しておく(忘れるとbitbakeが途中で止まる)
$ touch NEWS README AUTOURS ChangeLog
LICENSEファイルも用意してmd5sumを求めておく(レシピファイルで使用)
ビルド確認
$ aclocal
$ autoconf
$ automake --add-missing --foreign -c
$ ./configure
$ make
$ ./tut_prog
hello, world
Yoctoでビルド
本来であればyocto-layer
でレイヤーを作ったり、既存のレイヤーに追加するのが正しいのだが、今回はソースディレクトリをレイヤーにしてしまう。
ソースディレクトリ以下にrecipes/tut-prog/tut-prog_0.1.bbとconf/layer.confを作成
(bitbakeは最後の_
(アンダースコア)以下をバージョン名と見るのでtut_prog.bbのような名前はNG?)
BBPATH .= ":${LAYERDIR}"
BBFILES += "${LAYERDIR}/recipes/*/*.bb \
${LAYERDIR}/recipes/*/*.bbappend \
"
DESCRIPTION = "Tutorial Program"
HOMEPAGE = "http://itage.co.jp"
LICENSE = "MIT"
LIC_FILES_CHKSUM = " \
file://LICENSE;md5=44098158ddc38babf0e3ad46849b7ce3 \
"
inherit autotools
S="<プロジェクトの絶対パス>"
do_fetch() {
}
__BB_DONT_CACHE = "1"
LIC_FILES_CHKSUM
のmd5の値は$ md5sum LICENSE
した値を記入する。
__BB_DONT_CACHE = "1"
がないとソースディレクトリがまるごとビルドディレクトリへ移動させられてしまう。
Yoctoのbuild/conf/bblayers.confのBBLAYERS
にプロジェクトの絶対パスを追加しておくのも忘れずに。
後はbitbakeするだけ。
# 環境変数ファイルは読み込んでいる前提
$ bitbake tut-prog
問題点
- LISECEファイルなしで済ます方法がわからない
make distclean
が必要ですという旨のエラーが発生し、build/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/tut-prog/0.1-r0以下にコピーされたプロジェクト内でmake distclean
する必要がある