2014年12月29日

[Yocto] Poky Daisy 1.6.2: Intel E38xx BSPのDE3815TYKHEでの動作確認

前記事に書いたとおり、Intel E38xx用のYocto Linuxビルド環境をDaisy 1.6.1からDaisy 1.6.2にバージョンアップしました。Poky(Yocto Project Core)のDaisy 1.6.2版がリリースされたのが2014/12/05で、Valley Island(Intel E38xx)BSPのDaisy 1.6.2版はそれから少し遅れて2014/12/19にリリースにされています。PokyとBSPの両方が揃ったので、年内にDaisy 1.6.2版へのバージョンアップをやってしまいたかったからです。

Valley Island BSPの配布パッケージにはビルド済みのcore-image-satoイメージのhddimgファイルが収納されているので、手っ取り早くこのファイルからLive USBを作成して、それを使ってターゲットで動作確認をやることもできます。すでにそちらは行ってみたのですが、改めてIntel E38xx用のYocto Linux Daisy 1.6.2版ビルド環境を構築して、一からcore-image-satoイメージをビルドして、この自分でクリーン・ビルドしたイメージを使ってDE3815TYKHEでYocto Linuxを動かしてみました。

Daisy 1.6.1版で同じ作業をやっており、その作業記録は09/2410/13の記事に掲載済みですが、改めてDaisy 1.6.2版でのIntel E38xx用Yocto Linuxビルド環境の構築とDE3815TYKHEでの動作確認作業の記録を残します。

まずは、Daisy 1.6.2公式リリース版のパッケージファイルのダウンロードとその展開から始めました。
% cd ~/Yocto
% wget http://downloads.yoctoproject.org/releases/yocto/yocto-1.6.2/poky-daisy-11.0.2.tar.bz2
% tar -jxvf poky-daisy-11.0.2.tar.bz2
% wget http://downloads.yoctoproject.org/releases/yocto/yocto-1.6.2/machines/valleyisland/valleyisland-1.0-daisy-1.6.2.tar.bz2
% tar -jxvf valleyisland-1.0-daisy-1.6.2.tar.bz2
% mv valleyisland-1.0-daisy-1.6.2/meta-intel poky-daisy-11.0.2
$ rmdir valleyisland-1.0-daisy-1.6.2

また、ついでにOpenEmbedded Gitリポジトリからmeta-openembeddedツリーのパッケージレシピ群を取得しておきました。
% cd poky-daisy-11.0.2
% git clone git://git.openembedded.org/meta-openembedded -b daisy

これでIntel E38xx用のビルド環境は完成ですが、DE3815TYKHEをターゲットとしてYocto Linuxをビルドするので、DE3815TYKHE用のBSPを追加しました。同BSPの作成手順は10/25の記事に書いたとおりですが、Valley Island BSP Daisy 1.6.2版はRealtek RTL8111用ドライバが有効になっているので、同ドライバをカーネルへ組み込むための変更は加えていません。一応DE3815TYKHE BSP Daisy 1.6.2版のターゲット定義ファイルとカーネルレシピの内容を以下に掲載しておきます。
#@TYPE: Machine
#@NAME: Intel DE3815TYBE (Thin Canyon) board which is embedded in NUC Kit DE3815TYKHE

#@WEBTITLE: Intel Atom E38xx Processor (DE3815TYBE) 32-bit with Open Source Frame Buffer Graphics

#@DESCRIPTION: Machine configuration for DE3815TYBE 32-bit systems, without Intel-proprietary graphics bits

PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "3.10%"

require conf/machine/include/intel-core2-32-common.inc
require conf/machine/include/intel-common-pkgarch.inc
require conf/machine/include/meta-intel.inc

MACHINE_FEATURES += "pcbios efi"
MACHINE_FEATURES += "wifi"

MACHINE_EXTRA_RRECOMMENDS += "linux-firmware"

XSERVER ?= "${XSERVER_X86_BASE} \
${XSERVER_X86_EXT} \
${XSERVER_X86_FBDEV} \
${XSERVER_X86_I965} \
"

APPEND += "acpi_enforce_resources=lax video=efifb:off vga=0x318"

#@TYPE: Machine
#@NAME: Intel DE3815TYBE (Thin Canyon) board which is embedded in NUC Kit DE3815TYKHE

#@WEBTITLE: Intel Atom E38xx Processor (DE3815TYBE) 64-bit with Open Source Frame Buffer Graphics

#@DESCRIPTION: Machine configuration for DE3815TYBE 64-bit systems, without Intel-proprietary graphics bits

PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "3.10%"

require conf/machine/include/intel-corei7-64-common.inc
require conf/machine/include/intel-common-pkgarch.inc
require conf/machine/include/meta-intel.inc

MACHINE_FEATURES += "pcbios efi"
MACHINE_FEATURES += "wifi"

MACHINE_EXTRA_RRECOMMENDS += "linux-firmware"

XSERVER ?= "${XSERVER_X86_BASE} \
${XSERVER_X86_EXT} \
${XSERVER_X86_FBDEV} \
${XSERVER_X86_I965} \
"

APPEND += "acpi_enforce_resources=lax video=efifb:off vga=0x318"

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

#############################
# MACHINE = de3815tybe-32 #
#############################
COMPATIBLE_MACHINE_de3815tybe-32 = "de3815tybe-32"
KMACHINE_de3815tybe-32 = "valleyisland-32"
KBRANCH_de3815tybe-32 = "standard/base"
KERNEL_FEATURES_de3815tybe-32 = " features/valleyisland-io/valleyisland-io.scc \
features/valleyisland-io/valleyisland-io-pci.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_de3815tybe-32 = "3.10.59"
SRCREV_machine_de3815tybe-32 = "747e1cbd12b15db8bc2ae86e2359c1b113f120d6"
SRCREV_meta_de3815tybe-32 = "8f05306a8e6f5ee422d50c3317acce0cf9e6aada"
SRCREV_valleyisland-io_de3815tybe-32 = "0992d01f5f382f6da60004ef87f67ebd3ca13732"

SRC_URI_de3815tybe-32 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-3.0;name=machine,meta,valleyisland-io"

#############################
# MACHINE = de3815tybe-64 #
#############################
COMPATIBLE_MACHINE_de3815tybe-64 = "de3815tybe-64"
KMACHINE_de3815tybe-64 = "valleyisland"
KBRANCH_de3815tybe-64 = "standard/base"
KERNEL_FEATURES_de3815tybe-64 = " features/valleyisland-io/valleyisland-io.scc \
features/valleyisland-io/valleyisland-io-pci.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_de3815tybe-64 = "3.10.59"
SRCREV_machine_de3815tybe-64 = "747e1cbd12b15db8bc2ae86e2359c1b113f120d6"
SRCREV_meta_de3815tybe-64 = "8f05306a8e6f5ee422d50c3317acce0cf9e6aada"
SRCREV_valleyisland-io_de3815tybe-64 = "0992d01f5f382f6da60004ef87f67ebd3ca13732"

SRC_URI_de3815tybe-64 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-3.0;name=machine,meta,valleyisland-io"

module_autoload_i2c-dev = "i2c-dev"

上ではWi-Fi端末機能と無線LANドライバが有効になっていますが、これはDE3815TYKHEに無線LANカードを取り付け済みだからです。ターゲットに無線LANカードが搭載されていない場合は、ハイライト表示の部分は削除しても構いません。このままビルドしたイメージを無線LANカード未搭載のターゲットで動かしても、特に問題は発生しないと思います。

DE3815TYKHE用のYocto Linuxビルド環境が整ったので、さっそくcore-image-satoイメージをビルドしてみました。まずは、oe-init-build-envスクリプトを使ってビルド作業ディレクトリを作成しました。
% cd ~/Yocto
% cd poky-daisy-11.0.2
% . ./oe-init-build-env de3815tybe

そして、oe-init-build-envスクリプトによって生成されたbblayers.conflocal.confを以下のように編集しました。
--- conf/bblayers.conf.000	2014-12-29 17:45:51.120393760 +0900
+++ conf/bblayers.conf 2014-12-29 18:04:41.401863776 +0900
@@ -9,6 +9,9 @@
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto-bsp \
+ /home/yuhri/Yocto/poky-daisy-11.0.2/meta-intel \
+ /home/yuhri/Yocto/poky-daisy-11.0.2/meta-intel/meta-tlk \
+ /home/yuhri/Yocto/poky-daisy-11.0.2/meta-de3815tybe \
"
BBLAYERS_NON_REMOVABLE ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \

--- conf/local.conf.000	2014-12-29 17:45:51.120393760 +0900
+++ conf/local.conf 2014-12-29 17:53:41.423015554 +0900
@@ -17,18 +17,18 @@
# These two options control how much parallelism BitBake should use. The first
# option determines how many tasks bitbake should run in parallel:
#
-#BB_NUMBER_THREADS ?= "4"
+BB_NUMBER_THREADS ?= "12"
#
# Default to setting automatically based on cpu count
-BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}"
+#BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}"
#
# The second option controls how many processes make should run in parallel when
# running compile tasks:
#
-#PARALLEL_MAKE ?= "-j 4"
+PARALLEL_MAKE ?= "-j 12"
#
# Default to setting automatically based on cpu count
-PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}"
+#PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}"
#
# For a quad-core machine, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
# be appropriate for example.
@@ -55,7 +55,8 @@
#MACHINE ?= "edgerouter"
#
# This sets the default machine to be qemux86 if no other machine is selected:
-MACHINE ??= "qemux86"
+MACHINE ?= "de3815tybe-64"
+MACHINE ??= "valleyisland-64"

これでDE3815TYKHE用にYocto Linuxをビルドするための条件がすべて整ったので、bitbakeコマンドを使ってcore-image-satoイメージのビルドを行いました。
% bitbake core-image-sato -c fetchall
% bitbake core-image-sato

最初の全ソースのダウンロードに30分(インターネット回線はWiMAX 2+モバイルルータ)、続くcore-image-satoイメージのクリーン・ビルドに3時間35分かかりました(Intel Core i7 2.7GHz プロセッサコア数4、メモリ4GB、ストレージThuderbolt RAID 0 HDDという構成のVMware仮想マシンの場合)。

ビルドが完了するまで、食事をしたりニコニコ動画でアニメを鑑賞しながら過ごしました。core-image-satoイメージのビルドはとにかく時間がかかります。特にストレージがSSDかHDDかでビルド時間に1.5〜2倍の差が生まれます。それと、local.conf内のBB_NUMBER_THREADSとPARALLEL_MAKEの値はすごく重要です。この2つ変数の設定値によってもビルド時間に2〜5倍の差が出ます。また、Yocto Linxはやたらとディスク容量を食います。一ターゲットあたり30〜50GB位のディスク容量が必要になります。複数のターゲットのビルドをやると、すぐにディスク消費量が100GBを超えてしまいます。Yocto Linxの開発では、高性能なPCと大容量のSSDは必須だと思った方が良いです(もし会社で低性能なPCしか与えられられなかったら、毎日終電近くまで残業して休日出勤までしなければならないような地獄の日々を過ごす羽目になるでしょう。会社の仕事でYocto Linxの開発を始めるときは、大容量SSDを内蔵した高性能なPCを用意するように会社側に要求するべきです。この条件を満たさなければ仕事はしないと宣言した方が良いです。仕事に適したPCを社員に提供することは会社側の義務なんですから)。ビルド時間がかかることに関しては、退勤前や就寝前に始めるか他の事でもやりながらひたすら待つしかありません。

ビルドが終わったので(ソース・ダウンロードを始めたのが夕方6時頃で、ビルドが終わったのは夜10時頃でした。やっぱりSSD内蔵のPCを使うか、終夜稼働ビルドでもやらないとダメですね)、core-image-satoのイメージファイルが生成されていることを確認した後、Live USBメディアを作成しました。
% ls tmp/deploy/images/de3815tybe-64 
bootx64.efi
bzImage
bzImage--3.10.59+git0+8f05306a8e_747e1cbd12-r0-de3815tybe-64-20141229094113.bin
bzImage-de3815tybe-64.bin
core-image-minimal-initramfs-de3815tybe-64-20141229094113.rootfs.cpio.gz
core-image-minimal-initramfs-de3815tybe-64-20141229094113.rootfs.manifest
core-image-minimal-initramfs-de3815tybe-64.cpio.gz
core-image-minimal-initramfs-de3815tybe-64.manifest
core-image-sato-de3815tybe-64-20141229094113.hddimg
core-image-sato-de3815tybe-64-20141229094113.iso
core-image-sato-de3815tybe-64-20141229094113.rootfs.ext3
core-image-sato-de3815tybe-64-20141229094113.rootfs.manifest
core-image-sato-de3815tybe-64.ext3
core-image-sato-de3815tybe-64.hddimg
core-image-sato-de3815tybe-64.iso
core-image-sato-de3815tybe-64.manifest
modules--3.10.59+git0+8f05306a8e_747e1cbd12-r0-de3815tybe-64-20141229094113.tgz
modules-de3815tybe-64.tgz
README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt

% umount /dev/sdc
% sudo dd if=tmp/deploy/images/de3815tybe-64/core-image-sato-de3815tybe-64.hddimg of=/dev/sdc
% sync

DE3815TYKHEでYocto Linuxが動作している様子は10/13の記事に掲載済みで、Sato Mobile Destopの画面や機能は特に変わっていないので、本記事では省略します。

ちなみに、Valley Island BSP Daisy 1.6.2版に収納されているhddimgファイルでは確認済みでしたが、今回クリーン・ビルドした core-image-satoイメージでも、DE3815TYKHEでeth0インターフェースはちゃんと生成されていました。やはり同版では、カーネルへr8169ドライバが組み込まれているようです。

【2014/12/30 追記】

Valley Island BSP Daisy 1.6.2版の大きな変更点は次の3つのようです(括弧内はDaisy 1.6.1版)。
  1. Gitリポジトリのカーネルソース・ブランチがvalleyisland-io-3.0へ変更された。(valleyisland-io-2.0)
  2. カーネルのバージョンが3.10.59へ更新された。(3.10.43)
  3. リファレンスターゲットとして、MinnowBoard MAXが追加された。

3の変更は大きいと思いますが、MinnowBoard MAXの入手性が悪すぎるのであまり嬉しくないですね。ググっても、MinnowBoard MAXの動作確認情報のヒット数は少ないです。上のMinnowBoard MAXのページに販売代理店のリンクが載っていますが、いずれも在庫0で入庫予定期間も2ヶ月以上になっています。メーカーのCircuitCoに本ボードの製造数を増やせない事情が何かあるのでしょう。もしかすると、IntelからのE3815やE3825 CPUの供給量がかなり少ないのかもしれません。ググってみても、E38xx搭載ボードの種類や情報が全体的に少ないからです。多くのタブレットで採用されているZ37xxの製造の方をIntelが優先しているんじゃないかと想像しています。すごく欲しいボードなのですが、私はもうMinnowBoard MAXの入手は諦めています。

どこかのメーカーがE38xx搭載ボードを私へ提供してくれると嬉しいのですが。国内の販売代理店でも構いません。無償または安価にボードを提供してくれたら、顧客向けにLinux移植のサポートとコンサルティングをやりますよ(つまり、FAEとして営業や技術活動に協力します)。本記事を読んでいるメーカーの中の人がいたら、ぜひ会社の担当者へ伝えください。
posted by とみやん at 18:37| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/109028258

この記事へのトラックバック