This service is available only in Japanese-language.

omap1138向けBSPについて

http://processors.wiki.ti.com/index.php/Processor_SDK_Building_The_SDK
を参考に、omap1138向けに構築を試みています。

MACHINE=omapl138 bitbake tisdk-rootfs-image

を実行すると

ERROR: Failed to obtain external Linaro toolchain version: Execution of '/home/guest/yocto/LOGGER-CSM2CM/Yocto/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/INVALID-linux-gcc -v' failed: command not found

とエラーとなり、先に進めません。
なぜこのような現象になるのでしょうか?

手順で実行すると、同様のエラーが発生しますが最後にヒントが記載されていました。

---------------------------------------------------------------------------------------------------------------
Following is the list of potential problems / advisories:

Please set a valid MACHINE in your local.conf or environment
---------------------------------------------------------------------------------------------------------------
本エラーは、oe-core/meta/classes/sanity.bbclass で出力されています。

上記サイトの記載では、OMAP-L138 LCDKボード向けのMACHINE名はomapl138と記載されていますが、
BSPレイヤー(conf/machine/ 以下にマシン名.conf が存在するもの)に omapl1138.conf は存在しません。
omapl1138関係のMACHINE定義ファイルは、meta-ti/conf/machine/omapl138-lcdk.conf となります。
サイトに記載されたMACHINE名が誤っており、omapl1138-lcdkが正しいMACHINE名となります。  

MACHINE=omapl138-lcdk bitbake tisdk-rootfs-image
と実行したところ、以下のエラーが発生します。
どう対処したら良いのでしょうか?

ERROR: No valid toolchain in PATH
ERROR: Unable to parse /home/yocto/tisdk/sources/bitbake/lib/bb/data_smart.py
Traceback (most recent call last):
File "/home/yocto/tisdk/sources/bitbake/lib/bb/data_smart.py", line 400, in DataSmart.expandWithRefs(s="${@bool(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) and (os.path.exists(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) and os.path.dirname(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) or bb.fatal('No valid toolchain in PATH')) or ''}", varname='TOOLCHAIN_PATH[:=]'):
except Exception as exc:
> raise ExpansionError(varname, s, exc) from exc

bb.data_smart.ExpansionError: Failure expanding variable TOOLCHAIN_PATH[:=], expression was ${@bool(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) and (os.path.exists(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) and os.path.dirname(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) or bb.fatal('No valid toolchain in PATH')) or ''} which triggered exception BBHandledException:

上記エラーは、meta-arago/meta-arago-distro/conf/distro/include/toolchain-external.inc で発生しています。
-------------------------------------------------------------------------------------------------------
1 # Locate the toolchain automatically from PATH
2 TOOLCHAIN_SYSPATH := "${@os.path.abspath(os.path.dirname(bb.utils.which(d.getVar('PATH', d, 1), d.getVar('TOOLCHAIN_PREFIX', d, 1)+'cpp'))+'/../'+d.getVar('TOOLCHAIN_SYS', d, 1))}"
3 TOOLCHAIN_PATH := "${@bool(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) and (os.path.exists(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) and os.path.dirname(d.getVar('TOOLCHAIN_SYSPATH', d, 1)) or bb.fatal('No valid toolchain in PATH')) or ''}"
4 EXTERNAL_TOOLCHAIN = "${TOOLCHAIN_PATH}"
-------------------------------------------------------------------------------------------------------

TOOLCHAIN_PREFIXの値は、meta-arago/meta-arago-distro/conf/distro/include/toolchain-linaro.inc 内で設定となります。
==========================================================================
1 # Select external binary prebuilt Linaro toolchain
2 TCMODE = "external-linaro"
3 TCLIBC = "external-linaro-toolchain"
4
5 ELT_TARGET_SYS = "arm-linux-gnueabihf"
6 ELT_TARGET_SYS_armv5 = "arm-linux-gnueabi"
7 ELT_TARGET_SYS_aarch64 = "aarch64-linux-gnu"
8 TARGET_VENDOR = ""
9
10 PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "external-linaro-toolchain"
11
12 # Set some vars to help locate the toolchain automatically from PATH
13 TOOLCHAIN_SYS := "${ELT_TARGET_SYS}"
14 TOOLCHAIN_PREFIX := "${TOOLCHAIN_SYS}-"
==========================================================================

BSPのサイトでは、linaroのツールチェインを使用する方法が記載されています。
PATHは、$HOME/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
を追加するように指定してあり、その中にはarm-linux-gnueabihf-gcc など、hf(hard float)版の
ツールチェインのみ含まれています。

特に指定を行わない場合、meta-arago/meta-arago-distro/conf/distro/arago.conf の中で
TC_SANE_DEFAULT ?= "linaro"
TOOLCHAIN_TYPE ?= "external"
と、弱いデフォルト値(https://www.yoctoproject.org/docs/2.4.2/bitbake-user-manual/bitbake-user...)
の指定が有効となっているため、linaroの外部ツールチェインを使用する設定となっています。

ここで、ターゲットとなるomapl1138-lcdk ですが、
meta-ti/conf/machine/omapl138-lcd.conf を中に以下の記述があります。
==========================================================================
1 #@TYPE: Machine
2 #@NAME: OMAP-L138 LCDK
3 #@DESCRIPTION: Machine configuration for the TI OMAP-L138 LCDK board
4
5 require conf/machine/include/davinci.inc
6 require conf/machine/include/omapl138.inc
==========================================================================
読み込まれているmeta-ti/conf/machine/include/davinci.inc では
==========================================================================
1 require conf/machine/include/tune-arm926ejs.inc
==========================================================================
と、tune-arm926ejs.inc を読み込み指定となっており、oe-core/meta/conf/machine/include/tune-arm926ejs.inc では
==========================================================================
1 DEFAULTTUNE ?= "armv5te"
2
3 require conf/machine/include/arm/arch-armv5-dsp.inc
==========================================================================
となっており、armv5アーキテクチャであると判断され、meta-arago/meta-arago-distro/conf/distro/include/toolchain-linaro.incで設定されるTOOLCHAIN_PREFIX の値は、""arm-linux-gnueabihe"ではなく”arm-linux-gnueabi" が用いられ、
存在しない"arm-linux-gnueabi-cpp" を呼び出したことになります。

対処方法として
1 linaroのtoolchainを使用してbuildを行う方法
  meta-arago/meta-arago-distro/conf/distro/include/toolchain-linaro.inc
  6 行目の ELT_TARGET_SYS_armv5 = "arm-linux-gnueabi"
  をコメントアウトする。

2. linaroのtoolchainを使用しないでbuildを行う方法
  conf/local.conf 内に
  TOOLCHAIN_TYPE ?= "internal"
  の記述を追加する。

1,2いずれの方法も、TIのSDKのサイトに記載されていない方法ですので、結果に関しては保証いたしかねます。

omapl138-lcdkということで、sgxドライバーのサポートが無く、waylandも使用しないよう以下の設定でbuildを試みましたが、
==================================
MACHINE_FEATURES_remove = "sgx"
PACKAGECONFIG_remove = "wayland-egl"
DISTRO_FEATURES_remove = "wayland"
==================================

以下の4つのレシピの構築に失敗しています。
ERROR: opkg-utils-0.3.2+gitAUTOINC+3ffece9bf1-r0 do_compile: oe_runmake failed
ERROR: zlib-1.2.8-r0 do_configure: Function failed: do_configure
ERROR: libtool-cross-2.4.6-r0 do_configure: configure failed
ERROR: openssl-1.0.2j-r0.arago0 do_compile: oe_runmake failed

これらのエラーは、容易に対処できそうなものなのか、ヒントを頂けるとありがたいです。

クロス構築を行う際、bitbakeでは CC環境変数に arm-linux-gnueabihf-gcc -march=armv5e -marm --sysroot=/home/lineo/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/omapl138-lcdk
を設定しています。
コンパイラのメッセージでは以下のように armv5e をサポートするような記述があります。
arm-linux-gnueabihf-gcc: note: valid arguments to '-march=' are: armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5e armv5t armv5te armv6 armv6-m armv6j armv6k armv6kz armv6s-m armv6t2 armv6z armv6zk armv7 armv7-a armv7-m armv7-r armv7e-m armv7ve armv8-a armv8-a+crc armv8-m.base armv8-m.main armv8-m.main+dsp armv8.1-a armv8.1-a+crc armv8.2-a armv8.2-a+fp16 iwmmxt iwmmxt2 native
実際にコンパイラを起動すると、
Assembler messages:
Error: unknown architecture `armv5e'
とエラーとなっています。
TI OMAP-L138 は、 ARM926EJ-S をコアに使用しており、アーキテクチャはv5TEJとなるため、armv5te(-march=armv5te を指定した場合は
コンパイル可能)を指定できれば良いのですが、現状のBSPではarmv5eを -march に指定しています。

本件の対応を行う場合、次の二点となりますが、いずれも難易度が高いと思われます。
1) コンパイラが-march=armv5eで動作するようにする
2) bitbakeのmeta dataの解析後で -march=armv5te となるような変更

==================================
TOOLCHAIN_TYPE ?= "internal"
MACHINE_FEATURES_remove = "sgx"
PACKAGECONFIG_remove = "wayland-egl"
DISTRO_FEATURES_remove = "wayland"
==================================
の設定でbuildを実行したところ、最終的にimageを生成することができました。

作成したイメージを用いてターゲットをbootさせているのですが、login: のプロンプトが出る場合と出ない場合が有ります。
出ない場合は、kernel起動後の初期化処理の中で止まっているように見えるのですが、対処方法は有りますか?

このBSPは、最近のSoC(複数のCore搭載)向けに構成されているため、起動時にsysv-initではなくsystemdを用いる構成になっています。
シングルCoreのomap1138向けには、ちょっと重い処理ですね。
このBSPの場合、conf/local.conf に ARGO_SYSVINIT = "1" の設定を加えることで、systemdからsysvinit + udev を
使用構成に変更可能です。

http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Over...
上記のサイトでは、従来のwikiにあった、誤った記述等も修正されてだいぶ判りやすくなってきています。