Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112

2,620 views

Published on

AndroidプラットフォームはAndroidが動作するために設計されており、 Androidを使えばターゲットデバイスの全ての周辺機器を動かすことができるよう提供されている。 しかし、Androidは日に日に進化しているため、古いバージョンでリリースされた端末は、 メーカーがアップデートを提供しない限りそのまま過去の遺物となってしまう。 そこで、MeeGoを始めとした専用デバイスに特化したLinuxディストリビューションをこうした端末に移植することで、 新たな利用価値を発見することができるかもしれない。 本論文では、Androidプラットフォームの特徴とそこへの移植方法について考察し、 さらにMeeGoを実際に移植し動作させた事例ついて紹介する。

Published in: Technology, News & Politics
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,620
On SlideShare
0
From Embeds
0
Number of Embeds
223
Actions
Shares
0
Downloads
29
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112

  1. 1. MeeGoのAndroidプラットフォームへの移植 Mitsutaka Amano MIRACLE LINUX CORPORATION
  2. 2. 2010/11/12 2 自己紹介 ● 天野 光隆(あまの みつたか) ● 執筆活動 ● 日経Linux ライター ● 情報処理学会 会誌「情報処理」10月号「Google Chrome OSの構成から見るセキュリティ対策」 ● 講演活動 ● Open Source Conference ● LinuxCon Japan 2010 ● MeeGo関連各種等
  3. 3. 2010/11/12 3 自己紹介 ● コミュニティ活動 ● Moblin – 開発ツールのメンテナ、日本語化作業、各種講演等 ● MeeGo – Netbook 日本語版イメージ公開 – 各種H/Wへの移植等 ● tweet on @mitsutaka_amano
  4. 4. 2010/11/12 4 Agenda ● 概要 ● Android端末の特徴 ● 移植方法 ● 移植例: NexusOne ● 今後の課題/他のケース ● まとめ
  5. 5. 概要
  6. 6. 2010/11/12 6 概要 ● AndroidとAndroid端末 ● Androidは日々進化している – 1.0, 1.5, 1.6, 2.1, 2.2, 2.3, 3.0.... ● Android端末も進化している – 最新ハードウェアの採用
  7. 7. 2010/11/12 7 概要 ● Androidのリリーススピードついていけてる? ● NexusOne(HTC Passion), HTC Desire, Xperia等 – Qualcomm Snapdragon 1GHz: まだまだ現役 ● HT-03A(HTC Magic)等 – Qualcomm MSM7201a 528MHz: 使えるが、、 – キャリアによってはアップデート予定なし
  8. 8. 2010/11/12 8 概要 ● Androidが新しくなる度、古い端末が使えなくなっていく ● キャリア(メーカー)がサポートしない ● アップデートが追いつかない ● Androidの要求スペックを満たせない – 動くけど動作が重すぎる等 ● 要因 ● Androidによってある一定の共通化が達成された ● 機能拡張しやすくなった ● アップデート間隔が短くなった
  9. 9. 2010/11/12 9 概要 ● 古い端末を蘇らせる ● 新たな可能性 ● 今後も、サポートしきれない端末が、増えていく ● 需要も増える? ● 別のOSを動かす ● 新しいバージョンAndroid ● その他のLinux
  10. 10. 2010/11/12 10 概要 ● テーマ ● そもそもAndroid端末で別のOSが 動くの? ● どうすれば動くの?
  11. 11. Android端末の特徴
  12. 12. 2010/11/12 12 Android端末の特徴 ● MTD(Memory Technology Device)を使ってフラッシュメモリに パーティションを構築 $ cat /proc/mtd dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" 例: Nexus One
  13. 13. 2010/11/12 13 Android端末の特徴 ● Android独自の用途別に従ってパーティション分けされている td erasesize name 0 00020000 "misc" 0 00020000 "recovery" 0 00020000 "boot" 0 00020000 "system" 0 00020000 "cache" 0 00020000 "userdata" 起動時のスプラッシュ画面等 Android復元/アップデート時の起動パー ティション 通常の起動パーティション 実行ファイル(Androidアプリ)、ライブラリ等 の読み込み用途のファイル ダウンロードファイルのキャッシュ等 ユーザーの設定情報(ブックマーク、メール 、電話帳、接続済みAP情報等)
  14. 14. 2010/11/12 14 Android端末の特徴 ● recovery, bootそれぞれにカーネルイメージ、カーネルパラ メータ、initrdが組み込まれている 起動時のスプラッシュ画面等 Android復元/アップデート時の起動パー ティション 通常の起動パーティション 実行ファイル(Androidアプリ)、ライブラリ等 の読み込み用途のファイル ダウンロードファイルのキャッシュ等 ユーザーの設定情報(ブックマーク、メール 、電話帳、接続済みAP情報等) zImage + cmdline + initrd zImage + cmdline + initrd
  15. 15. 2010/11/12 15 Android端末の特徴 ● initrdをルートファイルシステムとして利用する ● /proc, /dev, /systemなど各種必要なディレクトリをマウント zImage + cmdline + initrd rootfs / rootfs ro ... tmpfs /dev tmpfs rw ... devpts /dev/pts devpts rw ... proc /proc proc rw ... sysfs /sys sysfs rw ... /dev/block/mtdblock3 /system yaffs2 ro ... /dev/block/mtdblock4 /cache yaffs2 rw ... /dev/block/mtdblock5 /data yaffs2 rw ... /dev/block/mmcblk0p1 /mnt/sdcard vfat rw .... ... フラッシュメモリ上のsystem, cache, dataをyaffs2でマウント SDカードのマウント
  16. 16. 移植方法
  17. 17. 2010/11/12 17 移植方法:考え方 ● 二つの視点で考える ● カーネルのロード方法 – どこから起動できるのか? – どの起動方法がベストプラクティスか? ● ルートファイルシステムの場所 – どこに置けるか? – どれだけの容量が必要なのか? How? Where?
  18. 18. 2010/11/12 18 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" カーネルのロード方法:その1 ● boot領域を上書きする ● 電源ONでそのまま起動 ● 効果 – 端末単体で起動できる – 最も簡単な起動方法 ● 懸念点 – Androidが起動できなくなる
  19. 19. 2010/11/12 19 カーネルのロード方法:その2 zImage dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● PC経由からカーネル転送、ロード ● fastbootコマンドでzImageを転送 ● 効果 – フラッシュメモリ上には影響がない – Androidの環境は保持される ● 懸念点 – 起動するたびにPCが必要になる
  20. 20. 2010/11/12 20 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" カーネルのロード方法:その3 ● recovery領域を上書きする ● 電源ON→リカバリモードで起動 ● 効果 – 端末単体で起動できる – Androidとのデュアルブート化 ● 懸念点 – recovery領域からAndroidの復元/アップデートができ なくなる
  21. 21. 2010/11/12 21 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ルートファイルシステムの場所:その1 ● system領域 ● yaffs2のファイルシステムイメージを作成 ● fastbootで上書き ● 効果 – system領域のみでルートファイルシステムを構築でき る ● 懸念点 – Androidが起動できなくなる
  22. 22. 2010/11/12 22 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ルートファイルシステムの場所:その2 ● userdata領域 ● yaffs2のファイルシステムイメージを作成 ● fastbootで上書き ● 効果 – userdata領域のみでルートファイルシステムを構築で きる – system領域よりちょっと大きい ● 懸念点 – Android上のユーザーデータが保証できなくなる
  23. 23. 2010/11/12 23 ルートファイルシステムの場所:その3 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● SDカード ● PC上でルートファイルシステムを書き込む ● ext2, ext3, ext4ファイルシステムで作成 ● 効果 – フラッシュメモリ上には影響がない – GB単位で十分なスペースを確保できる ● 懸念点 – SDカードが必要(強いて言えば)
  24. 24. 2010/11/12 24 移植方法:まとめ system領域 userdata領域 SDカード bootから起動 Androidとの完全な 置き換え ディスク領域小 Android起動不可 ディスク領域中 Androidとのデュア ルブート化 ディスク領域大 recoveryから起動 Android起動不可 ディスク領域小 Android起動不可 ディスク領域中 Androidとのデュア ルブート化 ディスク領域大 PCから起動 Android起動不可 ディスク領域小 Android起動不可 ディスク領域中 フラッシュメモリを 一切使わない最も 安全な方法 ディスク領域大
  25. 25. 移植例:NexusOne
  26. 26. 2010/11/12 26 移植例:NexusOne ● NexusOneでMeeGoを動かす ● MeeGoとは 新しいLinuxディストリビューション(Atom, armv7l) 携帯電話、Netbook、車載機器、家電向け(TV等) Intel/Nokia主導の開発とOSSコミュニティ
  27. 27. 2010/11/12 27 準備 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● 以下の組み合わせで移植する ● カーネルのロード方法 その2(PCからの起動) ● ルートファイルシステムの場所 その3(SDカード) ● NexusOne ● PC(Ubuntu 10.04) ● USB-microUSBケーブル ● SDカード ● microSD 4GB class6
  28. 28. 2010/11/12 28 準備 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● ソフトウェア ● fastboot – Android端末の制御ツール – <Androidのソースツリー>/out/host/linux- x86/bin/fastboot ● mic2 – MeeGoのイメージ作成ツール – /etc/apt/sources.listに以下を記述 ● deb http://repo.meego.com/tools/repos/ubuntu/10.04/ / – $ sudo apt-get update; apt-get install mic2
  29. 29. 2010/11/12 29 手順1: MeeGoルートファイルシステムの作成 dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● kickstartファイルの作成(meego-nexusone.ks) ● MeeGoの各種kickstarファイルを参考に ● mic2実行 ● $ sudo LANG=C mic-image-creator -c meego-nexusone.ks -f raw --run-mode=0 --arch=armv7l ● ddでmicroSDへコピー ● $ sudo dd if=meego-nexusone-1.1.80.20101024.2322- mmcblk0p.raw of=/dev/sdx(microSDのデバイスファイル) bs=4k
  30. 30. 2010/11/12 30 手順2: カーネルの作成 zImage dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● MSM(Qualcomm Mobile Station Modem)向けAndroidカーネル を使用する ● git://android.git.kernel.org/kernel/msm.git ● android-msm-2.6.32ブランチを使用する ● NexusOne Android 2.2と同等のカーネル ● $ git clone git://android.git.kernel.org/kernel/msm.git -b android-msm-2.6.32 android-msm-2.6.32
  31. 31. 2010/11/12 31 手順2: カーネルの作成 zImage dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● kernel configuration ● テンプレートとしてmahimahi_defconfigを使用 – $ cp arch/arm/configs/mahimahi_defconfig .config ● initrdを使わないので以下を無効にする – # CONFIG_BLK_DEV_INITRD is not set ● X.Orgを使うので、Virtual Terminal(仮想端末)を有効にす る – CONFIG_VT=y – CONFIG_CONSOLE_TRANSLATIONS=y – CONFIG_VT_CONSOLE=y – CONFIG_VT_HW_CONSOLE_BINDING=y
  32. 32. 2010/11/12 32 手順2: カーネルの作成 zImage dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● コンパイル ● Androidのprebuiltにあるクロスコンパイラを使用 – git://android.git.kernel.org/platform/prebuilt.git ● パスを通す – $ export PATH=$PATH:<Androidのソースツリー >/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin ● make – $ make oldconfig ARCH=arm CROSS_COMPILE=arm-eabi- – $ make zImage modules ARCH=arm CROSS_COMPILE=arm- eabi-
  33. 33. 2010/11/12 33 手順3: 起動 zImage dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● NexusOneをfastbootが使えるようにする ● 電源+ボリュームダウンで起動 ● FASTBOOTを選択 ● PCとNexusOneを接続(udevの設定が必要) ● SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", SYMLINK+="android_fastboot", MODE="0666" ● fastbootでカーネルを転送、ロード ● $ fastboot -c 'init=/sbin/init rootwait root=/dev/mmcblk0p1 rootfstype=ext3 rw' boot zImage
  34. 34. 今後の課題/別のケース
  35. 35. 2010/11/12 35 今後の課題 ● ハードウェアレンダリングを有効にする ● libEGL, libGLESv2の互換性の問題 ● 周辺装置の対応 ● ボタン、トラックボール、センサ、カメラ等 ● 電話機能の対応 ● ATコマンドの調査が必要 ● ofono(Open Source Telephony)の拡張
  36. 36. 2010/11/12 36 注意点 ● バックアップを忘れずに!(nandroid etc) ● YOUR OWN RISK! ● カスタマイズしたイメージの書き換え ● BootloaderのUnlockが必要 ● メーカーの保証対象外になる ● Lock状態に戻せない機種がある ● イメージの書き換え方法 ● fastbootで上書きできるとは限らない ● recovery領域のinitrdからイメージの書き込みを行う ● 必要に応じてroot化も必要
  37. 37. 2010/11/12 37 別のケース ● TOSHIBA AC100(Dynabook AZ) ● NVIDIA Tegra2 ● L4T(Linux For Tegra)を使ってイメージ書き換え ● 以下の組み合わせで移植 ● カーネルのロード方法 その3(recovery領域からの起動) ● ルートファイルシステムの場所 その3(SDカード) ● Ubuntuの動作実績あり ● http://tosh-ac100.wetpaint.com/page/Ubuntu ● 音声出力、HDMI出力が難
  38. 38. まとめ
  39. 39. 2010/11/12 39 まとめ ● Android端末でも別のOSは動かせる ● 動かし方は機器によって様々 ● 他のLinuxを動かすためのリソース探しが大変 ● クローズドドライバが壁になる ● 新しい用途が発見できるかもしれない
  40. 40. 2010/11/12 40 各種URL MeeGo公式: http://meego.com/ Android端末系移植Docs: http://wiki.meego.com/ARM/MSMQSD
  41. 41. 2010/11/12 41 Q&A
  42. 42. 2010/11/12 42 おまけ
  43. 43. 2010/11/12 43 おまけ dev: size erasesize name mtd0: 000e0000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 09100000 00020000 "system" mtd4: 05f00000 00020000 "cache" mtd5: 0c440000 00020000 "userdata" ● NexusOneのMeeGo, Androidデュアルブート ● 以下の組み合わせで移植 ● カーネルのロード方法 その3(boot領域からの起動) ● ルートファイルシステムの場所 その3(SDカード) ● 更にrecovery領域をAndroidのboot領域に置き換え ● SDカードは2パーティション ● mmcblk0p1 ... vfat(Androidのメディア保存用) ● mmcblk0p2 ... ext3(MeeGoルートファイルシステム)
  44. 44. Thank you!

×