ELC(Embedded Linux Conference)2014に行ってきました

2014/4/28 - 5/1 にアメリカのサンノゼで開催されたELC(Embedded Linux Conference)2014に行ってきました。前回のELC2013では発表したのですが今回は聴くだけです。
セッションのスケジュール
Embedded Linux Conferenceのスライド
Android Builders Summitのスライド
ELC 2014 Presentations - eLinux.org
来場者数は500人だそうです。
メモ代わりに大量ツイートしたのをまとめておいたのでこちらを参照してください。
Embedded Linux Conference 2014 day 1 #lfelc - Togetter
Embedded Linux Conference 2014 day 2 #lfelc - Togetter
Embedded Linux Conference 2014 day 3 #lfelc - Togetter

ここにはまだ記憶がホットなうちに補足を書き留めておきます。

IntelAndroid

Keynote: Scaling Android at the Speed of Mobility - Mark Skarpness, Intel
Intel Architecture向けのAndroidの話。メーカー向けのツールとアプリ開発者向けのツールもそれぞれ揃っている。64bit対応も進んでいる。64bit Androidがすでに動いていての展示ブースで実機デモが見られると言っていましたが、ブースに行って話を聞いてみると、64bitなのはKernelだけで、ユーザーランドのAndroidは32bitだということでした。こちらも参照。
とはいえ、実際にAndroidの64bit化はIntelが一番乗りすると思います。現時点ではARMの64bitは実機がない状態ですから。

Tim Birdさんのキーノートスピーチ

Keynote: The Paradox of embedded and Open Source - Tim Bird, Sony Mobile
(online) The Paradox of Open Source and Embedded by Tim Bird on Prezi
最初に"Network Effects"の話。元々は電話網で接続する電話機が増えると全体での価値が飛躍的の高まる。でもこれはそれに限った話でなくて、いろいろなところに適用できる。例えば、メディアのフォーマット(VHS vs Beta)。先に普及したほうが圧倒的に優位になる。
オープンソースコミュニティでもアクティブな開発者が多いほど全体の価値が高まる。そのためコミュニティが分断すると全体の価値も下がってしまう。悪いFragmentation(分断)は分断してそのまま両者が分離してしまう。良いFragmentationは一度分断しても、それを多様性を保持しつつ包含するように再度合流する。
x86のPCの世界のLinuxカーネルは同一のカーネルイメージがハードウェア構成が異なるPCで動作することができるが、組み込みLinuxではハードウェア構成が違えば、それに合わせた別々のカーネルイメージを作ることが普通だった。しかしARMのLinuxではDevice Treeのしくみを導入し、ソースツリーを大整理することでx86のPCと同様に異なるハードウェアでも共通のカーネルイメージで動かせるようになりつつある。これは"Network Effects"の観点では非常にプラスだ。
しかしその代償としてコードは複雑になりサイズは大きくなり起動も遅くなった。来るIoT(Internet of Things)ではコンパクトなカーネルが望ましいが、現在のカーネルはそれとは逆の方向に向かっている。これがTim Birdさんの言うジレンマ。サイズを削るために特別なLinuxを作ったら、それはもうLinuxとは呼べない。本流から取り残されると"Network effects"を失ってしまう。


ここで私は聞き逃したのですが、後で他の人から聞いたことによるとTim Birdさんは特定用途向けの小さなカーネルを作るためにプロジェクトをforkすることを提案したそうです。そしてそうTwitterでつぶやいたら、それに応答してくれた方がいました。
私も自分で自信がないままつぶやいたことなので、後でTim Birdさんに直接聞いてみることにしました。
レセプションのときにTim Birdさんを見つけ出し、単刀直入に聞いてみました。「IoTなど向けに小さなLinuxをforkしたいとも思うけど、いろいろな人に指摘を受けて、それが悪いアイディアと気がついた。」ということでした。

不明なところを発表者本人に直接質問できたのはよかったです。私もこのことについて理解が深まりました。
そして私自身も「Linuxをforkさせずに、カスタマイズされた小さなカーネルを作る方法」に解がないか考えているところです。

このキーノートスピーチは後でビデオが公開されると思います。また、Tim BirdさんはLinuxCon Japanのために来日するそうなので、テクニカルジャンボリーのときにこの話を再演して欲しいとお願いしておきました。

Linux Kernelのテスト

LTSI Project Update for 3.10 Kernel and Future Plan - Hisao Munakata, Renesas Electronics & Tsugikazu Shibata, NEC
LTSIはLTSカーネルに機能の追加やバックポートを行っているので、リグレッションの確認のためにもテストが必要。各社でそれぞれテストしているはずなので、そのテストケースの寄付を募る。自動テストを行うためのインフラを作成中。フロントエンドのUIにはJenkinsを使用する。
4/30に同じ場所で開催されたLTSI Workshopでさらに突っ込んだ議論がなされた。
そのときの発表資料はここに。
http://ltsi.linuxfoundation.org/documents/ltsi-slides-collection

ブート時間短縮

Update on Boot Time Reduction Techniques, with Figures - Michael Opdenacker, Free Electrons
Linux Quickboot - Tristan Lelong, Adeneo Embedded
この2つのセッションは同じテーマを扱っています。それぞれ実践的なテクニックが満載なのでお奨め。

ARMのDevice Tree

Device Tree for Dummies - Thomas Petazzoni, Free Electrons
Engaging Device Trees - Geert Uytterhoeven, Glider bvba
必要性を感じつつもなかなかきちんと理解できていなかったDevice Tree。これを教科書として勉強します。

SoC対応コードをKernelにメインライン化する話

Two Years of ARM SoC Support mainlining: Lessons Learned - Thomas Petazzoni, Free Electrons
MarvelのSoCをメインライン化したときの話。難しいところは技術が半分。ソーシャルが半分。各部のメンテナーとよい関係を保つのが重要。そのためには「郷に入っては郷に従え」、「できるかぎり早くレスポンスを返す」など。
Supporting A New ARM platform: The Allwinner SoCs Example - Maxime Ripard, Free Electrons
中華SoCのAllwinnerはタブレットの市場ではAppleに次ぐシェアを持っている。AllwinnerのSoCは独自のFEXファイルでSoC,ボード依存のパラメータを分離するしくみを持っていた。これはDevice Treeとほぼ同じ機能だがAllwinner専用になっていた。メインライン化するにあたり、それを標準の方法に置き換えていった。現状はUIをのぞく部分はメインライン化できている。

(BoFs) QCOM SoC Mainlining - Moderated By Tim Bird, Sony Mobile
Sony MobileはQualcommのSoCを使用している。Qualcommと共同でカーネルソースのメインライン化を目指す。まずはregulator、次にpin configの順を考えている。

Using-agile-development-practices-for-kernel-development_02.pdf
このセッションは聴きませんでしたが、同じテーマの話。TIのカーネル開発グループ。

LLVMLinux

LLVMLinux: Embracing the Dragon - Behan Webster, Converse in Code Inc.
Linuxカーネルをclang/LLVMでビルドできるようにするプロジェクト。すべてのパッチが入ったソースツリーはLLVMLinuxのプロジェクトのgitリポジトリから入手可能。それらのパッチはLLVM, Kernelのupstreamに徐々に取り込まれている。
(2014.5.30追記 試してみました。LLVMLinuxをビルドしてみた - 組み込みの人。)
Here be Dragons: Using clang/LLVM to Build Android - Behan Webster, Converse in Code
Androidをまるごとclang/LLVMでビルドする話。clangではサポートしていない書き方をしているところを全て修正する。現在のところはビルドはできるようになり、ビルド時間はgccに比べて短縮できたが、起動後すぐにクラッシュする。initやbionicなどの基本的なところに何か問題があるらしい。調査中。Linaroと密接にやっている。

Android

今回はAndroid関連はあまり聴いてなくて、LLVMLinuxのもの以外はこの2つだけ聴きました。
Multi Persona Android - Oren Laadan, Cellrox
2つのAndroidカーネルのコンテナの機能を使って同時に動かし、瞬時に切り替え可能にする。そのためにデバイスドライバを多重化の修正をしている。実機でのデモあり。
Hyperviserを使う方式はカーネルが2つ動くことになるので、メモリに余裕のないスマートフォンにはあまり適していないとのこと。
Tuning Android For Low RAM - Chris Simmonds, 2net
android-lowmemory-abs-2014.pdf
Androidからカーネルまでのメモリに関することの総覧。これはおさえておきたい。