Your SlideShare is downloading. ×
0
オープンソースなAndroid
オ プンソ スなA d id
 ~ソースが公開されたAndroidを
   どのように活用するか~

   京都マイクロコンピュータ
      小林哲之

                      1
はじめに
      年
• 2008年10月22日についにAndroidのソース
  コードが公開されました。
• Androidに関してはさまざまなトピックがありま
  すが、今日はソースコードを主題とします。
  すが 今日はソ スコ ド...
Who am I?
               Who am I?
• 組み込み 筋 十年
  組み込み一筋N十年。
 – リアルタイムOS iTRON
 – 組み込み向けJava実行環境
 – 組み込み向けLinux
   組 込 向け
 ...
本日お話すること
    Androidの概要について
•
    ソースの概要について
•
    ソ
    ソースから読み取れること
            読 取れる
•
    ソースの活用方法
•
    まとめ
•



    ...
Androidの概要に いて
• Androidの概要について




                   5
Androidとは
        社が主導     た携帯電話
• Google社が主導で開発した携帯電話用ソフト
  ウェアプラットフォーム。
• 2008年11月にHTC社からAndroid搭載の携帯
  電話 “G1” が発売されました...
出典:
http://ja.wikipedia.org/wiki/Android_(%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0)
      ...
Androidプラットフォームの構造
                          ブラウザ
                            ラウザ
                         GoogleMAP
    各...
Androidプラットフォームの構造
                               ブラウザ
         各種アプリケーション           GoogleMAP
Java                       ...
Androidプラットフォ ムの構造
   Androidプラットフォームの構造
             シミュレータの場合
                               ブラウザ
         各種アプリケーション   ...
プラットフォームとしての特徴
• オ プンソ ス
  オープンソース
 – 殆ど全てのソースコードが開示されました
       カ ネルのみを使用
• Linuxカーネルのみを使用
 – libcやルートファイルシステムは、通常の組み込みLi...
• ソースの概要について
  ソ スの概要に いて




               12
ソースのある場所
• ここ
 – http://source.android.com/
      p //                  /
• gitとそのラッパースクリプト(repo)を使用して
  ソースをダウンロードする。
  ソ...
何が含まれている?
     d id S を再ビルドに必要なものが全て
• Android SDKを再ビルドに必要なものが全て。
• Linux カーネル、デバイスドライバ、標準Cライブラリ、
  コンパイラツールチェイン、Dalvik VM...
全てのソースがあるのか?
• コンパイラツールチェインと一部のライブラリ
  はバイナリで入っている。
 – $(TOP)/prebuilt 以下
• それらをリビルドするために必要なソ スの
  それらをリビルドするために必要なソースの
  ...
全部で何行?
• ダウンロードしたファイルのうち、ファイル名の
  末尾が .c .h .cpp .S .java のものだけを選んで
              pp j
  wc –l でカウントすると 約1600万行。
• このうちLin...
Androidでの新規ソースは?
              たくさ         プ     成
• Androidではたくさんのオープンソースの成果
  を利用している。
• では、Androidで新規に起こされたファイルは
  どのくら...
ライセンス条件は?
• 基本
  基本はApache 2.0
• 多数のオープンソースの成果を利用している
  多数のオ プンソ スの成果を利用している
  ので、それはそれぞれのライセンス条件
• モジ
  モジュールごとに MODULE_L...
$ find . -name quot;MODULE_LICENSE_*“
./system/extras/showmap/MODULE_LICENSE_APACHE2
./system/extras/showslab/MODULE_LICEN...
ちなみにGPLのものは
$ find . -name quot;MODULE_LICENSE_*quot; |grep GPL
./external/iptables/MODULE_LICENSE_GPL
./external/elfcopy/...
ビルドのしかた
        ( b t ) M OS(i t l)でのビルドがサポ トされ
• Li
  Linux (ubuntu), MacOS(intel)でのビルドがサポートされ
  ている。
  – http://source.a...
ビルドのTips
                        ド   表
• make showcommands でコマンドライン表示
• ccache を使うためには環境変数
  ccache を使うためには環境変数
  USE_CCAC...
移植性?
• タ ゲットCPUはARMのみだ たが 2008年12月のアッ
  ターゲットCPUはARMのみだったが
  プデートでx86向けのビルドが追加された。
 – armv5t (ARM926以降、Xscale)
   armv5t (...
移植性?: Bionic
                移植性?: Bionic
• 標準ライブラリとランタイムロ ダ
  標準ライブラリとランタイムローダ
  – libc, libm, libdl, libthread_db, linke...
移植性?: Dalvik VM
     移植性?: Dalvik VM
      ドのインタプリタが何種類か用意され
• DXコードのインタプリタが何種類か用意され
  ている。
 – 高速版 (アセンブラで書かれている)
 – 移植用 (...
互換性テスト
• 各モジュールに単体テスト用のファイルらしき
 ものがあるが、システム全体に渡る互換性は
 ものがあるが システム全体に渡る互換性は
 どうなるのだろう... ?
 どうなるのだろう ?
• キラーアプリ、キラーデバイスによるデ...
ここまでの感想
• 「本当に 全部のソ スが公開された
  「本当に」全部のソースが公開された。
 – iPhone との最大の違い。
• 扱いやすいライセンス。
• 用途は携帯電話に限定されない。
  用途 携帯電話 限定されな 。
• まさ...
• ソースから読み取れること
  ソ スから読み取れる と




                 28
Bionic(標準Cライブラリ)
          制約事
• CAVEATS(制約事項)
 – $(TOP)/bionic/libc/CAVEATS
   $(   )/      //
 – 基本はPOSIX準拠だが...
 – C++の...
AndroidでのC++プログラミングの制限
• 例外は使用できない
  例外は使用できない。
 – newはmallocと同等。
 – メモリがないときはNULLを返す。
• 実行時型情報は使用できない。
 – type_info は空実装。...
libstdc++ の中身はたったこれだけ
libstdc++ の中身はたったこれだけ。
$ nm -C out/target/product/generic/symbols/system/lib/libstdc++.so |grep ' [T...
ダイナミックリンク
• linker
   – ld.so ではない。Android 新規設計。
   – libdlの機能はある。 dlsym, dlopen
• prelink (apriori)
  prelink (apriori) 
...
各ライブラリの配置アドレス
$ cat build/core/prelink-linux-arm.map

#   0xC0000000   -   0xFFFFFFFF   Kernel
#   0xB0100000   -   0xBFFF...
Dalvik
• クラスライブラリはHarmonyプロジェクトの成
       ブ           プジ      成
  果。(既存のCLASSPATHプロジェクトだとGPL)
    (                       )...
DXコードインタプリタ
                             装備   な
• JIT(Just In Time compiler)は装備していない。
• 複数のインタープリタ実装
  複数のインタ プリタ実装
 – 高速版...
Linux Kernel
             Linux Kernel
• 2.6.27 
• Android特有の部分
 – binder
 – ashmem
• ユーザー空間デバイスドライバ?
    ザ 空間デバイスドライバ?
 –...
binder
•ププロセス間通信
• OpenBinder org のものをベースにしてい
  OpenBinder.org のものをベースにしてい
  たが今は互換性はない。
• Androidのアプリケーションフレームワー
  クの根幹をな...
ashmem
• Android / Anonymous SHared MEMory subsystem
• $(TOP)/system/core/cutils/ashmem.h
      int ashmem_create_region(c...
• ソースの活用方法
  ソ スの活用方法




             39
ソースの活用方法
              大部分
• Androidのソースの大部分はApachライセンス
  で改変は自由。あらゆる活用方法が考えられ
    改変 自由。あらゆる活用方法 考 られ
  る。
 – 自分の製品にそのまま移...
Androidを部分的に利用するとしたら
• 最小システムで使う
         使う
        カ ネル              , 標準 ライ ラリだけ
 – Linuxカーネルとinit, toolbox, 標準Cライブラリだけ...
Dalvik VMを他のOSに移植?
  Dalvik VMを他のOSに移植?
           自身は         があれば移植でき
• Dalvik VM自身はPOSIX APIがあれば移植でき
    lk
  そう。
• アプリ...
• まとめ




        43
Androidの強み:
      過去のしがらみがない
• 現在またはこの先利用できる技術を前提
 – メモリ, CPUはJavaを動かすのに十分ある。
   • アプリケーションは全てJavaで書く
     アプリケーションは全てJava...
Androidの強み:
    オープンソースであること
• 特別な契約なしで誰でもソースを見ることが
  できる。
• Apacheライセンスは商用利用で扱いやすい。
• 無償のツ ルだけでビルド環境を構築できる
  無償のツールだけでビルド...
Androidのインパクト
•組組み込みシステム開発にAndroidの与えるイ
                     与る
  ンパクトは少なくないだろう。
• 直接的インパクト
 – A d idを採用しての製品開発
   Android...
オープンソース
• 組み込みソフト開発でもオープンソースを避
  けて通ることができなくなった。
• ソースは無償で入手できるが、それを読み解
  き、活用するためには技術力が必要。
  き 活用するためには技術力が必要

• 技術力の向上には...
ご静聴ありがとうございました。




                  48
Upcoming SlideShare
Loading in...5
×

Opensource Android

22,503

Published on

「オープンソースなAndroid」
~ソースが公開されたAndroidをどのように活用するか~

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
22,503
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
158
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Opensource Android"

  1. 1. オープンソースなAndroid オ プンソ スなA d id ~ソースが公開されたAndroidを どのように活用するか~ 京都マイクロコンピュータ 小林哲之 1
  2. 2. はじめに 年 • 2008年10月22日についにAndroidのソース コードが公開されました。 • Androidに関してはさまざまなトピックがありま すが、今日はソースコードを主題とします。 すが 今日はソ スコ ドを主題とします • 内容は発表者個人の主観に基づいています。 • 正確性については「無保障」です。 ☺ 2
  3. 3. Who am I? Who am I? • 組み込み 筋 十年 組み込み一筋N十年。 – リアルタイムOS iTRON – 組み込み向けJava実行環境 – 組み込み向けLinux 組 込 向け – gcc クロスコンパイルツール • ブログ 「組み込みの人 」 「組み込みの人。」 – http://d.hatena.ne.jp/embedded/ • 京都マイクロ ンピ 京都マイクロコンピュータ 2008年3月入社 タ 年 月入社 – http://www.kmckk.co.jp/ 3
  4. 4. 本日お話すること Androidの概要について • ソースの概要について • ソ ソースから読み取れること 読 取れる • ソースの活用方法 • まとめ • 4
  5. 5. Androidの概要に いて • Androidの概要について 5
  6. 6. Androidとは 社が主導 た携帯電話 • Google社が主導で開発した携帯電話用ソフト ウェアプラットフォーム。 • 2008年11月にHTC社からAndroid搭載の携帯 電話 “G1” が発売されました。 G1 が発売されました 6
  7. 7. 出典: http://ja.wikipedia.org/wiki/Android_(%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0) 7
  8. 8. Androidプラットフォームの構造 ブラウザ ラウザ GoogleMAP 各種アプリケーション メール ・・・ Java仮想マシン(Dalvik VM) libc Webkit 各種ミドルウェア SQLite OpenGL EL ・・・ Linux Kernel 携帯電話H/W
  9. 9. Androidプラットフォームの構造 ブラウザ 各種アプリケーション GoogleMAP Java メール Code ・・・ Java仮想マシン(Dalvik VM) libc Webkit 各種ミドルウェア SQLite ARM OpenGL EL Code ・・・ Linux Kernel 携帯電話ハードウェア
  10. 10. Androidプラットフォ ムの構造 Androidプラットフォームの構造 シミュレータの場合 ブラウザ 各種アプリケーション GoogleMAP Java メール Code ・・・ Java仮想マシン(Dalvik VM) libc Webkit 各種ミドルウェア SQLite ARM OpenGL EL Code ・・・ Linux Kernel QEMUシミュレータ x86 Code Windows 
  11. 11. プラットフォームとしての特徴 • オ プンソ ス オープンソース – 殆ど全てのソースコードが開示されました カ ネルのみを使用 • Linuxカーネルのみを使用 – libcやルートファイルシステムは、通常の組み込みLinuxで 使われている物と異なる • アプリケーションレイヤはJavaで開発 – ネイティブコ ドで記述されたミドルウ アと 上位アプリ ネイティブコードで記述されたミドルウェアと、上位アプリ ケーションの分離 QEMUシミュレ タの採用 • QEMUシミュレータの採用 – PC上でARM CPUのバイナリ互換を実現
  12. 12. • ソースの概要について ソ スの概要に いて 12
  13. 13. ソースのある場所 • ここ – http://source.android.com/ p // / • gitとそのラッパースクリプト(repo)を使用して ソースをダウンロードする。 ソ スをダウンロ ドする – Googleのアカウント(GMAIL)が必要。無償。 • ブラウザで閲覧するならここ – http://git source android com/ http://git.source.android.com/ 13
  14. 14. 何が含まれている? d id S を再ビルドに必要なものが全て • Android SDKを再ビルドに必要なものが全て。 • Linux カーネル、デバイスドライバ、標準Cライブラリ、 コンパイラツールチェイン、Dalvik VM、2D/3Dグラフィッ コンパイラツ ルチ イン D l ik VM 2D/3Dグラフィッ クライブラリ、コーデック、アプリケーションフレーム ワ ク、webkit(WEBブラウザ)、 ワーク webkit(WEBブラウザ) .... • ただし、MAPアプリケーションは含まれていない。 HTC G1のソース? (デフォルトではダウンロードされないがリポジトリに存 • 在する。けっこう頻繁に更新。) – kernel/msm.git – platform/hardware/msm7k.git – platform/vender/htc/dream.git 14
  15. 15. 全てのソースがあるのか? • コンパイラツールチェインと一部のライブラリ はバイナリで入っている。 – $(TOP)/prebuilt 以下 • それらをリビルドするために必要なソ スの それらをリビルドするために必要なソースの ありかが明記されている。 – 各ディレクトリのREBUILTというファイルに 15
  16. 16. 全部で何行? • ダウンロードしたファイルのうち、ファイル名の 末尾が .c .h .cpp .S .java のものだけを選んで pp j wc –l でカウントすると 約1600万行。 • このうちLinux kernelのソ スコ ドを除くと kernelのソースコードを除くと 約770 万行。 • 詳細は http://d.hatena.ne.jp/embedded/20081127/p1 16
  17. 17. Androidでの新規ソースは? たくさ プ 成 • Androidではたくさんのオープンソースの成果 を利用している。 • では、Androidで新規に起こされたファイルは どのくらいの規模か? • /Copyright.*Android/ というパターンのある ファイルだけを集計すると約160万行。 • 詳細 http://d.hatena.ne.jp/embedded/20081130/p1 17
  18. 18. ライセンス条件は? • 基本 基本はApache 2.0 • 多数のオープンソースの成果を利用している 多数のオ プンソ スの成果を利用している ので、それはそれぞれのライセンス条件 • モジ モジュールごとに MODULE_LICENSE_*** とい ルごとに *** とい うファイルがあり、簡単に確認できるように整 備されている。 • また それぞれライセンス表示のための また、それぞれライセンス表示のための NOTICEというファイルがおかれている。 18
  19. 19. $ find . -name quot;MODULE_LICENSE_*“ ./system/extras/showmap/MODULE_LICENSE_APACHE2 ./system/extras/showslab/MODULE_LICENSE_APACHE2 ./system/extras/librank/MODULE_LICENSE_APACHE2 ./system/extras/procrank/MODULE_LICENSE_APACHE2 /system/extras/procrank/MODULE LICENSE APACHE2 ./system/extras/latencytop/MODULE_LICENSE_APACHE2 ... $ fi d . -name quot; find quot;MODULE_LICENSE_*quot; | d ' ^ */ *quot; |sed 's,^.*/,, ' |sort |uniq -c |sort -r 117 MODULE_LICENSE_APACHE2 24 MODULE_LICENSE_BSD_LIKE 11 MODULE_LICENSE_BSD 10 MODULE_LICENSE_GPL 9 MODULE_LICENSE_EPL 7 MODULE LICENSE LGPL MODULE_LICENSE_LGPL 4 MODULE_LICENSE_PUBLIC_DOMAIN 4 MODULE_LICENSE_LGPL_AND_GPL 2 MODULE_LICENSE_CPL 1 MODULE_LICENSE_W3C 1 MODULE_LICENSE_OSL1 1 MODULE_LICENSE_MIT 1 MODULE LICENSE HP MODULE_LICENSE_HP 1 MODULE_LICENSE_AFL_AND_GPL 19
  20. 20. ちなみにGPLのものは $ find . -name quot;MODULE_LICENSE_*quot; |grep GPL ./external/iptables/MODULE_LICENSE_GPL ./external/elfcopy/MODULE_LICENSE_GPL ./external/jdiff/MODULE_LICENSE_LGPL ./external/jdiff/MODULE LICENSE LGPL ./external/yaffs2/MODULE_LICENSE_GPL ./external/qemu/MODULE_LICENSE_GPL ./external/webkit/WebCore/MODULE_LICENSE_LGPL ./external/dbus/MODULE_LICENSE_AFL_AND_GPL ./external/dbus/MODULE LICENSE AFL AND GPL ./external/oprofile/MODULE_LICENSE_GPL ./prebuilt/windows/sdl/MODULE_LICENSE_LGPL ./prebuilt/windows/ccache/MODULE_LICENSE_GPL ./p ebu t/da w ./prebuilt/darwin-x86/sdl/MODULE_LICENSE_LGPL 86/sd / O U CS G ./prebuilt/darwin-x86/toolchain/i686-apple-darwin8- 4.0.1/MODULE_LICENSE_LGPL_AND_GPL ./prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/MODULE_LICENSE_LGPL_AND_GPL ./prebuilt/darwin-x86/ccache/MODULE_LICENSE_GPL /p / / / ./prebuilt/darwin-x86/make/MODULE_LICENSE_GPL ./prebuilt/common/jfreechart/MODULE_LICENSE_LGPL ./prebuilt/common/swing-worker/MODULE_LICENSE_LGPL ./prebuilt/common/netbeans-visual/MODULE_LICENSE_GPL /p / / / ./prebuilt/linux-x86/sdl/MODULE_LICENSE_LGPL ./prebuilt/linux-x86/toolchain/i686-linux-gnu- 3.4.6/MODULE_LICENSE_LGPL_AND_GPL ./prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/MODULE_LICENSE_LGPL_AND_GPL /p / / / / ./prebuilt/linux-x86/ccache/MODULE_LICENSE_GPL 20
  21. 21. ビルドのしかた ( b t ) M OS(i t l)でのビルドがサポ トされ • Li Linux (ubuntu), MacOS(intel)でのビルドがサポートされ ている。 – http://source.android.com/download – 他に必要なライブラリ – sudo apt‐get install zlib1g‐dev libncruses5‐dev unzip • 手軽な方法 – VMWare 上にubuntu 8 04 i386をクリ ンインスト ル 8.04 i386をクリーンインストール – 無料のVMWare player利用可能 – ビルド時間 40分くらい? 0分くらい • 困った時はネットで検索。☺ • make sdk でSDK一式が再ビルド。 21
  22. 22. ビルドのTips ド 表 • make showcommands でコマンドライン表示 • ccache を使うためには環境変数 ccache を使うためには環境変数 USE_CCACHE=1 環境ではデフ ルト設定が無難 • VMWare環境ではデフォルト設定が無難 (512MBメモリ、プロセッサ1個) • make sdk – JDK6でなくJDK5でないとjavadocでエラ になる JDK6でなくJDK5でないとjavadocでエラーになる 22
  23. 23. 移植性? • タ ゲットCPUはARMのみだ たが 2008年12月のアッ ターゲットCPUはARMのみだったが プデートでx86向けのビルドが追加された。 – armv5t (ARM926以降、Xscale) armv5t (ARM926以降、Xscale) • パス名に’arm’を含むファイルが多いもの bionic – dalvik – external/opencore – external/sonivox – external/qemu – external/openssl – • これらの移植に目途がつけば、他のCPUでもいけそう。 23
  24. 24. 移植性?: Bionic 移植性?: Bionic • 標準ライブラリとランタイムロ ダ 標準ライブラリとランタイムローダ – libc, libm, libdl, libthread_db, linker • F BSD O FreeBSD, OpenBSD, NetBSDからのファイルをベー BSD N tBSDからのファイルをベ スにしているようだ。 • アセンブラで書いてあるのは – カーネルのシステムコール呼び出し部分 – memcpyなどのアセンブラ版 • 現在はARM,x86用のものしかないが、同じように *BSDから持ってくれば他のCPU用のものも準備 BSDから持ってくれば他のCPU用のものも準備 できそう。 24
  25. 25. 移植性?: Dalvik VM 移植性?: Dalvik VM ドのインタプリタが何種類か用意され • DXコードのインタプリタが何種類か用意され ている。 – 高速版 (アセンブラで書かれている) – 移植用 (Cで書かれている) ( – デバッグ用、プロファイル用 • それ以外のARM依存ファイルはABIを定義し ているファイルのみ。 • とりあえずC版インタプリタを使えば移植は簡 単? 25
  26. 26. 互換性テスト • 各モジュールに単体テスト用のファイルらしき ものがあるが、システム全体に渡る互換性は ものがあるが システム全体に渡る互換性は どうなるのだろう... ? どうなるのだろう ? • キラーアプリ、キラーデバイスによるデファク キラ アプリ、キラ デバイスによるデファク トスタンダード? • サブセット化OK? 26
  27. 27. ここまでの感想 • 「本当に 全部のソ スが公開された 「本当に」全部のソースが公開された。 – iPhone との最大の違い。 • 扱いやすいライセンス。 • 用途は携帯電話に限定されない。 用途 携帯電話 限定されな 。 • まさに、Google 太っ腹!ここから直接収益を上 げることは全く考えていないようだ。「どうぞ、 げることは全く考えていないようだ。「どうぞ 使ってください」という感じ。 • 組み込みLinuxのメジャーなディストリビューショ 組み込みLinuxのメジャ なディストリビュ ショ ンになるかも。 27
  28. 28. • ソースから読み取れること ソ スから読み取れる と 28
  29. 29. Bionic(標準Cライブラリ) 制約事 • CAVEATS(制約事項) – $(TOP)/bionic/libc/CAVEATS $( )/ // – 基本はPOSIX準拠だが... – C++の例外をサポ トしない 組み込みシステム C++の例外をサポートしない。組み込みシステム ではひどく遅いコードになるから。 h dのキ ンセル機能はサポ トしない – pthreadのキャンセル機能はサポートしない。 – ロケールやワイドキャラクタはサポートしない。国 際化対応には代わりにICUを使う。 29
  30. 30. AndroidでのC++プログラミングの制限 • 例外は使用できない 例外は使用できない。 – newはmallocと同等。 – メモリがないときはNULLを返す。 • 実行時型情報は使用できない。 – type_info は空実装。 – pure virtual functionは使用できない。 • STL(標準テンプレートライブラリ)は使用できない。 – Vector.h, List.h はframeworks/base/include/utils にある。 • コンパイル時にはオプション –fno‐exceptions – fno‐rtti をつける。 30
  31. 31. libstdc++ の中身はたったこれだけ libstdc++ の中身はたったこれだけ。 $ nm -C out/target/product/generic/symbols/system/lib/libstdc++.so |grep ' [TDRB] ' 000019dd T type_info::type_info(type_info const&) 000019a5 T type_info::type_info() type info::type info() 000019dd T type_info::type_info(type_info const&) 000019a5 T type_info::type_info() 000019f5 T type_info::~type_info() 00001a19 T type_info::~type_info() 00001a19 T type_info::~type_info() i i 000019bd T type_info::name() const 000019d9 T type_info::before(type_info const&) const 000019d1 T type_info::operator==(type_info const&) const 000019d5 T type_info::operator!=(type_info const&) const 00001a30 R std::nothrow 00002000 D vtable for type_info 0000192d T operator delete[](void*) 0000190d T operator delete[](void*, std::nothrow_t const&) 0000193d T operator delete(void ) delete(void*) 0000191d T operator delete(void*, std::nothrow_t const&) 00001965 T operator new[](unsigned int) 0000194d T operator new[](unsigned int, std::nothrow_t const&) 00001971 T operator new(unsigned int) 00001959 T operator new(unsigned int, std::nothrow_t const&) t ( i dit td th t t) 0000189d T __cxa_guard_abort 000018d9 T __cxa_guard_acquire 000018b5 T __cxa_guard_release 0000197d T __cxa_pure_virtual __ _ _ $ 31
  32. 32. ダイナミックリンク • linker – ld.so ではない。Android 新規設計。 – libdlの機能はある。 dlsym, dlopen • prelink (apriori) prelink (apriori)  – ライブラリを固定アドレスにマッピング • build/core/prelink linux arm map build/core/prelink‐linux‐arm.map – 実行ファイル(executable)はprelinkしてない – 起動高速化というより共有メモリの効率化のため? • stripコマンドの代わりにsoslimコマンド 32
  33. 33. 各ライブラリの配置アドレス $ cat build/core/prelink-linux-arm.map # 0xC0000000 - 0xFFFFFFFF Kernel # 0xB0100000 - 0xBFFFFFFF Thread 0 Stack # 0xB0000000 - 0xB00FFFFF Linker # 0xA0000000 - 0xBFFFFFFF Prelinked System Libraries # 0x90000000 - 0x9FFFFFFF Prelinked App Libraries # 0x80000000 - 0x8FFFFFFF Non-prelinked Libraries i i i # 0x40000000 - 0x7FFFFFFF mmap'd stuff # 0x10000000 - 0x3FFFFFFF Thread Stacks # 0x00000000 - 0x0FFFFFFF .text / .data / heap # core system libraries libdl.so 0xAFF00000 libc.so 0xAFE00000 libstdc++.so 0xAFD00000 libm.so libm so 0xAFC00000 liblog.so 0xAFBC0000 libcutils.so 0xAFB00000 libthread_db.so 0xAFA00000 libz.so 0xAF900000 libevent.so lib t 0xAF800000 0 AF800000 libssl.so 0xAF700000 libcrypto.so 0xAF500000 .... 33
  34. 34. Dalvik • クラスライブラリはHarmonyプロジェクトの成 ブ プジ 成 果。(既存のCLASSPATHプロジェクトだとGPL) ( ) • アプリ起動時、zygoteというプロセスからfork  され、新しいプロセスのmainメソッドをDalvik  され 新しいプロセスのmainメソッドをDalvik VMのレベルでインボークされる。exec システ ムコールは使用していない。 ム は使用していない – なるべく多くの共有メモリをzygoteから引き継ぐ。 yg – アプリ起動時間の短縮にもなる。 34
  35. 35. DXコードインタプリタ 装備 な • JIT(Just In Time compiler)は装備していない。 • 複数のインタープリタ実装 複数のインタ プリタ実装 – 高速版 (ARMのアセンブラで書いてある。) – デバ グ プロフ イル用 デバッグ、プロファイル用 – 移植用 (C言語で書いてある。) • ARMアセンブラではFPU命令が使われてい ない。(ARM1136jf向けにチュ ンする余地) ない (ARM1136jf向けにチューンする余地) 35
  36. 36. Linux Kernel Linux Kernel • 2.6.27  • Android特有の部分 – binder – ashmem • ユーザー空間デバイスドライバ? ザ 空間デバイスドライバ? – libhardware 36
  37. 37. binder •ププロセス間通信 • OpenBinder org のものをベースにしてい OpenBinder.org のものをベースにしてい たが今は互換性はない。 • Androidのアプリケーションフレームワー クの根幹をなす。 クの根幹をなす • 上位層は AIDL につながっている。 AIDL に ながっている。 37
  38. 38. ashmem • Android / Anonymous SHared MEMory subsystem • $(TOP)/system/core/cutils/ashmem.h int ashmem_create_region(const char *name, size_t size) → returns fd – int ashmem_set_prot_region(int fd, int prot) – int ashmem_p _region(int fd, size_t offset, size_t len) pin g ( , , ) – int ashmem_unpin_region(int fd, size_t offset, size_t len) – • ‘pin’ していないメモリはカーネルが回収して再利用 • Javaの weak reference に似ている概念。キャッシュ の実装に便利。 実装 便利。 • Javaから利用するときはandroid.os.MemoryFile 38
  39. 39. • ソースの活用方法 ソ スの活用方法 39
  40. 40. ソースの活用方法 大部分 • Androidのソースの大部分はApachライセンス で改変は自由。あらゆる活用方法が考えられ 改変 自由。あらゆる活用方法 考 られ る。 – 自分の製品にそのまま移植して アプリケーショ 自分の製品にそのまま移植して、アプリケーショ ンをJava言語で開発する。 – 分解して必要な部分だけ使用する 分解して必要な部分だけ使用する。 • いずれにせよ、ソースから学べることは多い。 40
  41. 41. Androidを部分的に利用するとしたら • 最小システムで使う 使う カ ネル , 標準 ライ ラリだけ – Linuxカーネルとinit, toolbox, 標準Cライブラリだけ , – グラフィックスやDalvik VMをはずしてしまう • 最小システム + スクリプト言語 スクリプト言語 – 例えば ruby。 C言語で実装されているものならば 移植は難しくない。 41
  42. 42. Dalvik VMを他のOSに移植? Dalvik VMを他のOSに移植? 自身は があれば移植でき • Dalvik VM自身はPOSIX APIがあれば移植でき lk そう。 • アプリケーションのフレームワークはbinderに 強 依存 強く依存している。binderはLinuxカーネルのド 。 ライバとして実装されていてGPLライセンス。 Android独自のカ ネルドライバ • Android独自のカーネルドライバ binderや ashmem をGPL以外のOSに移植するにはスク ラッチから互換性のあるものを作る必要があ る。 42
  43. 43. • まとめ 43
  44. 44. Androidの強み: 過去のしがらみがない • 現在またはこの先利用できる技術を前提 – メモリ, CPUはJavaを動かすのに十分ある。 • アプリケーションは全てJavaで書く アプリケーションは全てJavaで書く。 • アプリケーションフレームワークはJavaで統一されてネイティ ブアプリケーションとの競合を考慮しなくてよい。 は 固定 – OSはLinux固定。 • 仮想メモリシステムを活用。 – GPUによる高速3D描画 GPUによる高速3D描画。 • 2DグラフィックスもOpenGLで。そのため2Dと3Dの重ね合わ せの問題を考慮しなくてよい。 – 無料 無料のWiFi, 定額制の3Gパケット通信。 定額制 パケ 通信 • バックグランドでシームレスにネットワークの切り替え。 44
  45. 45. Androidの強み: オープンソースであること • 特別な契約なしで誰でもソースを見ることが できる。 • Apacheライセンスは商用利用で扱いやすい。 • 無償のツ ルだけでビルド環境を構築できる 無償のツールだけでビルド環境を構築できる。 • このため世界中の優秀な技術者でにぎわう。 • にぎわう技術は急速に進歩する。 ぎわう技術は急速 進歩する 45
  46. 46. Androidのインパクト •組組み込みシステム開発にAndroidの与えるイ 与る ンパクトは少なくないだろう。 • 直接的インパクト – A d idを採用しての製品開発 Androidを採用しての製品開発 – Androidソースの部分利用 • 間接的インパクト – 他の組み込みプラットフォームもソース公開の流 れに 46
  47. 47. オープンソース • 組み込みソフト開発でもオープンソースを避 けて通ることができなくなった。 • ソースは無償で入手できるが、それを読み解 き、活用するためには技術力が必要。 き 活用するためには技術力が必要 • 技術力の向上にはまず情報交換を。 • 日本A d idの会 日本Androidの会 – http://www.android‐group.jp/index.php?FrontPage 47
  48. 48. ご静聴ありがとうございました。 48
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×