基礎から学ぶ
組み込みAndroid
    でむやん
自己紹介
• 裏日本からの参加
• 日本Androidの会 金沢支部
 • 組み込み、x86に強い支部
• twitter : @checkela
金沢を
ご存知ない方のために
•   石川県にあります

    •   金沢県ではありません

•   兼六園

•   金沢城

•   21世紀美術館

•   能登かわいいよ能登

•   花さくいろは

    •   ただいま放送中
組み込みAndroid?
• Androidってauが販売しているあれで
 しょ?
Androidの定義について確認
What is Android?

Android is a software stack for
mobile devices that includes an
operating system, middleware
and key applications.

       http://developer.android.com/guide/basics/what-is-android.html
Androidの特徴

●
    GUIなOS環境がワンセットに
    ●
        LinuxKernel,Framework、GUI、アプリ
●
    オープンソース
●
    ライセンスフリー
組み込みAndroid

• Androidのメリットがフルに活かせる分
 野
• 自由なカスタマイズ
• 開発環境も無償でゲット
• ライセンス料無し
• ソースコードはスマートフォンとは同一
例えば?

• 家電機器にAndroidを組み込む
 • 冷蔵庫,テレビ,BluRayレコーダ
• 産業用機器にAndroidを組み込む
 • 監視装置など
                といった事が可能
最近だと

• VIERA tablet
 • CES 2011にて発表
 • サブコントーラ
 • コンテンツ購入
オープンソース
• ソースを自由に入手可能
 • 自由に利用、改変が可能

• 個人がAndroid搭載デバイスを制作する
 ことも可能!
Q.
開発機材って
お高いのでしょう?
A.
Android端末1台
諦めればOK!
利用する機材
• BeagleBoard
 • 1台15,000円ほど
• PandaBoard
 • 1台18,000円ほど。
 • Cortex-A9 DualCore
あとは
• SDカード(2GB以上)
• USB-Hub
• DIV接続ディスプレイ
• Keyboard,Mouse
• usb-serialケーブル
 • などなど
           どの家庭にもあるものばかり
さまざまな可能性
●
    ボードが小さい、省電力
    •   消費電力少ない = 搭載デバイスを問わず

    •   BeagleBoardは5V(USBで給電)で動作

    •   制御できるデバイスが豊富

•   Root取り放題 :-)
組み込みAndroid開発
   の初歩
レイヤー
アプリ開発者向け
new




組み込み開発者向け
アプリ開発の話題の中心
組み込み開発の話題の中心
という事で

• LinuxKernel
• HAL(Hardware Abstraction Layer)
の話題を中心に
Linux Kernel
LinuxKernel

• Androidの中心、心臓部
• モノリシックカーネル
 • ハード制御、ドライバ
 • すべて一体化
 • 毎回ビルドする必要が
AndroidのLinuxKernel
• ARM向けLinuxKernelがベース

• Android向けの機能拡張が追加
 • コードが1つのフォルダに集約
 • マージしやすい
 • Kernel.orgには無い...
機能拡張
•   Binder - プロセス間通信、IPCの代わり

•   ashmem - android shared memory

•   pmem - process memory allocator

•   logger

•   wakelocks - power management

•   oom handling - lowmem notifications

•   alarm - sleep状態のCPUを起こす

•   paranoid network security - 独自のnetwork security

                                 http://elinux.org/Android_Kernel_Features
ビルド、カスタマイズ
•   ジグソーパズル的に設定

    •   利用するドライバを取捨選択して組み込み

    •   make menuconfig ; make uImage



•   ドライバ開発、カーネルビルド手順はPC版と同じ

    •   特にAndroidだからというのは無い

    •   メモリには注意
HAL
HAL

• Hardware Abstraction Layer
 • ハードウェアを抽象化するレイヤー
• ハード依存を上位レイヤーにさせない
抽象化?
                             Application Framework
                              Application Framework
•   ApplicationFramework
    は、HALのAPIに対応
                                        API
•   HALをデバイスから直
    接データを取得                          HAL
                                     HAL

                                             ?
    •   各種センサー、GPS

•   デバイスに柔軟に対応              A社
                             A社  B社
                                  B社  C社
                                       C社
                           デバイス デバイス デバイス
                           デバイス デバイス デバイス
あとは
• Application Framework
  • カメラ対応するとき
  •  オレオレSDK作成時に変更

•  Libraries

•  Dalvik

  •  ARM,x86以外のときは手を入れる必要ありそう
まとめ

• LinuxKernelの知識は必須科目
 • プラスαは意外と少ない
 • デバイス対応はLinuxそのもの
• LinuxKernelとHALを何とかすると、他の
 デバイスでもAndroidは動く
• 組み込みAndroidだったら、いろんなデ
 バイスがAndroidで制御できるよ!

• 目の前のモノが制御できると楽しい
 よ!
以上、おしまい

基礎から学ぶ組み込みAndroid