SlideShare a Scribd company logo
1 of 44
Download to read offline
MeeGoのAndroidプラットフォームへの移植
Mitsutaka Amano
MIRACLE LINUX CORPORATION
2010/11/12 2
自己紹介
● 天野 光隆(あまの みつたか)
●
執筆活動
● 日経Linux ライター
● 情報処理学会 会誌「情報処理」10月号「Google Chrome
OSの構成から見るセキュリティ対策」
● 講演活動
● Open Source Conference
● LinuxCon Japan 2010
●
MeeGo関連各種等
2010/11/12 3
自己紹介
● コミュニティ活動
●
Moblin
– 開発ツールのメンテナ、日本語化作業、各種講演等
● MeeGo
– Netbook 日本語版イメージ公開
– 各種H/Wへの移植等
●
tweet on @mitsutaka_amano
2010/11/12 4
Agenda
● 概要
●
Android端末の特徴
● 移植方法
● 移植例: NexusOne
● 今後の課題/他のケース
● まとめ
概要
2010/11/12 6
概要
● AndroidとAndroid端末
●
Androidは日々進化している
– 1.0, 1.5, 1.6, 2.1, 2.2, 2.3, 3.0....
● Android端末も進化している
– 最新ハードウェアの採用
2010/11/12 7
概要
● Androidのリリーススピードついていけてる?
●
NexusOne(HTC Passion), HTC Desire, Xperia等
– Qualcomm Snapdragon 1GHz: まだまだ現役
● HT-03A(HTC Magic)等
– Qualcomm MSM7201a 528MHz: 使えるが、、
– キャリアによってはアップデート予定なし
2010/11/12 8
概要
● Androidが新しくなる度、古い端末が使えなくなっていく
●
キャリア(メーカー)がサポートしない
● アップデートが追いつかない
● Androidの要求スペックを満たせない
– 動くけど動作が重すぎる等
● 要因
●
Androidによってある一定の共通化が達成された
● 機能拡張しやすくなった
●
アップデート間隔が短くなった
2010/11/12 9
概要
● 古い端末を蘇らせる
●
新たな可能性
● 今後も、サポートしきれない端末が、増えていく
● 需要も増える?
● 別のOSを動かす
● 新しいバージョンAndroid
● その他のLinux
2010/11/12 10
概要
● テーマ
● そもそもAndroid端末で別のOSが
動くの?
● どうすれば動くの?
Android端末の特徴
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
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情報等)
2010/11/12 14
Android端末の特徴
● recovery, bootそれぞれにカーネルイメージ、カーネルパラ
メータ、initrdが組み込まれている
起動時のスプラッシュ画面等
Android復元/アップデート時の起動パー
ティション
通常の起動パーティション
実行ファイル(Androidアプリ)、ライブラリ等
の読み込み用途のファイル
ダウンロードファイルのキャッシュ等
ユーザーの設定情報(ブックマーク、メール
、電話帳、接続済みAP情報等)
zImage + cmdline + initrd
zImage + cmdline + initrd
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カードのマウント
移植方法
2010/11/12 17
移植方法:考え方
● 二つの視点で考える
●
カーネルのロード方法
– どこから起動できるのか?
– どの起動方法がベストプラクティスか?
● ルートファイルシステムの場所
– どこに置けるか?
– どれだけの容量が必要なのか?
How?
Where?
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が起動できなくなる
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が必要になる
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の復元/アップデートができ
なくなる
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が起動できなくなる
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上のユーザーデータが保証できなくなる
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カードが必要(強いて言えば)
2010/11/12 24
移植方法:まとめ
system領域 userdata領域 SDカード
bootから起動 Androidとの完全な
置き換え
ディスク領域小
Android起動不可
ディスク領域中
Androidとのデュア
ルブート化
ディスク領域大
recoveryから起動 Android起動不可
ディスク領域小
Android起動不可
ディスク領域中
Androidとのデュア
ルブート化
ディスク領域大
PCから起動 Android起動不可
ディスク領域小
Android起動不可
ディスク領域中
フラッシュメモリを
一切使わない最も
安全な方法
ディスク領域大
移植例:NexusOne
2010/11/12 26
移植例:NexusOne
● NexusOneでMeeGoを動かす
●
MeeGoとは
新しいLinuxディストリビューション(Atom, armv7l)
携帯電話、Netbook、車載機器、家電向け(TV等)
Intel/Nokia主導の開発とOSSコミュニティ
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
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
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
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
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
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-
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
今後の課題/別のケース
2010/11/12 35
今後の課題
● ハードウェアレンダリングを有効にする
●
libEGL, libGLESv2の互換性の問題
● 周辺装置の対応
● ボタン、トラックボール、センサ、カメラ等
● 電話機能の対応
● ATコマンドの調査が必要
● ofono(Open Source Telephony)の拡張
2010/11/12 36
注意点
● バックアップを忘れずに!(nandroid etc)
●
YOUR OWN RISK!
● カスタマイズしたイメージの書き換え
● BootloaderのUnlockが必要
● メーカーの保証対象外になる
● Lock状態に戻せない機種がある
● イメージの書き換え方法
● fastbootで上書きできるとは限らない
●
recovery領域のinitrdからイメージの書き込みを行う
●
必要に応じてroot化も必要
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出力が難
まとめ
2010/11/12 39
まとめ
● Android端末でも別のOSは動かせる
● 動かし方は機器によって様々
● 他のLinuxを動かすためのリソース探しが大変
● クローズドドライバが壁になる
● 新しい用途が発見できるかもしれない
2010/11/12 40
各種URL
MeeGo公式: http://meego.com/
Android端末系移植Docs: http://wiki.meego.com/ARM/MSMQSD
2010/11/12 41
Q&A
2010/11/12 42
おまけ
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ルートファイルシステム)
Thank you!

More Related Content

Viewers also liked

How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
Naoya Ito
 

Viewers also liked (10)

USBからLinuxを起動してみよう! - 第4回つくらぐ勉強会
USBからLinuxを起動してみよう! - 第4回つくらぐ勉強会USBからLinuxを起動してみよう! - 第4回つくらぐ勉強会
USBからLinuxを起動してみよう! - 第4回つくらぐ勉強会
 
失われたBIOS設定を求めて
失われたBIOS設定を求めて失われたBIOS設定を求めて
失われたBIOS設定を求めて
 
TOMOYO Linuxへの道
TOMOYO Linuxへの道TOMOYO Linuxへの道
TOMOYO Linuxへの道
 
Firefox OS 起動の仕組みを調べてみた
Firefox OS 起動の仕組みを調べてみたFirefox OS 起動の仕組みを調べてみた
Firefox OS 起動の仕組みを調べてみた
 
Kernel bootstrap
Kernel bootstrapKernel bootstrap
Kernel bootstrap
 
Linux boot process
Linux boot processLinux boot process
Linux boot process
 
systemdを始めよう
systemdを始めようsystemdを始めよう
systemdを始めよう
 
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
 
Understanding Linux Kernel 輪読会 第9回 シグナル
Understanding Linux Kernel 輪読会 第9回 シグナルUnderstanding Linux Kernel 輪読会 第9回 シグナル
Understanding Linux Kernel 輪読会 第9回 シグナル
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
 

Similar to Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112

PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
android sola
 

Similar to Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112 (20)

2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf
 
Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Osc 2009 tokyo_moblin_20091030
Osc 2009 tokyo_moblin_20091030Osc 2009 tokyo_moblin_20091030
Osc 2009 tokyo_moblin_20091030
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったら
 
System.Drawing 周りの話
System.Drawing 周りの話System.Drawing 周りの話
System.Drawing 周りの話
 
【de:code 2020】 リモートワークの端末を安全に使ってもらおう どこがパワフル Microsoft Endpoint Manager の Wi...
【de:code 2020】 リモートワークの端末を安全に使ってもらおう  どこがパワフル Microsoft Endpoint Manager の Wi...【de:code 2020】 リモートワークの端末を安全に使ってもらおう  どこがパワフル Microsoft Endpoint Manager の Wi...
【de:code 2020】 リモートワークの端末を安全に使ってもらおう どこがパワフル Microsoft Endpoint Manager の Wi...
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
Microsoft Tunnel 概要
Microsoft Tunnel 概要Microsoft Tunnel 概要
Microsoft Tunnel 概要
 
Interact2017:Windows Container "Overlay" Networking
Interact2017:Windows Container "Overlay" NetworkingInteract2017:Windows Container "Overlay" Networking
Interact2017:Windows Container "Overlay" Networking
 
Cocosサービスについて
CocosサービスについてCocosサービスについて
Cocosサービスについて
 
Hardware control by .NET Core 3.1
Hardware control by .NET Core 3.1Hardware control by .NET Core 3.1
Hardware control by .NET Core 3.1
 
Snapdragon-SCORER
Snapdragon-SCORERSnapdragon-SCORER
Snapdragon-SCORER
 
Build Windows ラップアップ
Build Windows ラップアップBuild Windows ラップアップ
Build Windows ラップアップ
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
サバフェス上位入賞者にみる ioMemory×MySQL 最新チューニング教えます
サバフェス上位入賞者にみる ioMemory×MySQL  最新チューニング教えますサバフェス上位入賞者にみる ioMemory×MySQL  最新チューニング教えます
サバフェス上位入賞者にみる ioMemory×MySQL 最新チューニング教えます
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 

More from Mitz Amano (6)

OSC2010 Tokyo MeeGo 20100910
OSC2010 Tokyo MeeGo 20100910OSC2010 Tokyo MeeGo 20100910
OSC2010 Tokyo MeeGo 20100910
 
CSAJ MeeGo 20100423
CSAJ MeeGo 20100423CSAJ MeeGo 20100423
CSAJ MeeGo 20100423
 
Ylug 20090430 mamano
Ylug 20090430 mamanoYlug 20090430 mamano
Ylug 20090430 mamano
 
Celf japan technical_jamboree_20090522
Celf japan technical_jamboree_20090522Celf japan technical_jamboree_20090522
Celf japan technical_jamboree_20090522
 
Osc2010 tokyo spring_moblin_20100226
Osc2010 tokyo spring_moblin_20100226Osc2010 tokyo spring_moblin_20100226
Osc2010 tokyo spring_moblin_20100226
 
Osc 2009 tokyo_moblin_20090220
Osc 2009 tokyo_moblin_20090220Osc 2009 tokyo_moblin_20090220
Osc 2009 tokyo_moblin_20090220
 

Recently uploaded

Recently uploaded (11)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112

  • 2. 2010/11/12 2 自己紹介 ● 天野 光隆(あまの みつたか) ● 執筆活動 ● 日経Linux ライター ● 情報処理学会 会誌「情報処理」10月号「Google Chrome OSの構成から見るセキュリティ対策」 ● 講演活動 ● Open Source Conference ● LinuxCon Japan 2010 ● MeeGo関連各種等
  • 3. 2010/11/12 3 自己紹介 ● コミュニティ活動 ● Moblin – 開発ツールのメンテナ、日本語化作業、各種講演等 ● MeeGo – Netbook 日本語版イメージ公開 – 各種H/Wへの移植等 ● tweet on @mitsutaka_amano
  • 4. 2010/11/12 4 Agenda ● 概要 ● Android端末の特徴 ● 移植方法 ● 移植例: NexusOne ● 今後の課題/他のケース ● まとめ
  • 6. 2010/11/12 6 概要 ● AndroidとAndroid端末 ● Androidは日々進化している – 1.0, 1.5, 1.6, 2.1, 2.2, 2.3, 3.0.... ● Android端末も進化している – 最新ハードウェアの採用
  • 7. 2010/11/12 7 概要 ● Androidのリリーススピードついていけてる? ● NexusOne(HTC Passion), HTC Desire, Xperia等 – Qualcomm Snapdragon 1GHz: まだまだ現役 ● HT-03A(HTC Magic)等 – Qualcomm MSM7201a 528MHz: 使えるが、、 – キャリアによってはアップデート予定なし
  • 8. 2010/11/12 8 概要 ● Androidが新しくなる度、古い端末が使えなくなっていく ● キャリア(メーカー)がサポートしない ● アップデートが追いつかない ● Androidの要求スペックを満たせない – 動くけど動作が重すぎる等 ● 要因 ● Androidによってある一定の共通化が達成された ● 機能拡張しやすくなった ● アップデート間隔が短くなった
  • 9. 2010/11/12 9 概要 ● 古い端末を蘇らせる ● 新たな可能性 ● 今後も、サポートしきれない端末が、増えていく ● 需要も増える? ● 別のOSを動かす ● 新しいバージョンAndroid ● その他のLinux
  • 10. 2010/11/12 10 概要 ● テーマ ● そもそもAndroid端末で別のOSが 動くの? ● どうすれば動くの?
  • 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. 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. 2010/11/12 14 Android端末の特徴 ● recovery, bootそれぞれにカーネルイメージ、カーネルパラ メータ、initrdが組み込まれている 起動時のスプラッシュ画面等 Android復元/アップデート時の起動パー ティション 通常の起動パーティション 実行ファイル(Androidアプリ)、ライブラリ等 の読み込み用途のファイル ダウンロードファイルのキャッシュ等 ユーザーの設定情報(ブックマーク、メール 、電話帳、接続済みAP情報等) zImage + cmdline + initrd zImage + cmdline + initrd
  • 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カードのマウント
  • 17. 2010/11/12 17 移植方法:考え方 ● 二つの視点で考える ● カーネルのロード方法 – どこから起動できるのか? – どの起動方法がベストプラクティスか? ● ルートファイルシステムの場所 – どこに置けるか? – どれだけの容量が必要なのか? How? Where?
  • 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. 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. 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. 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. 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. 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. 2010/11/12 24 移植方法:まとめ system領域 userdata領域 SDカード bootから起動 Androidとの完全な 置き換え ディスク領域小 Android起動不可 ディスク領域中 Androidとのデュア ルブート化 ディスク領域大 recoveryから起動 Android起動不可 ディスク領域小 Android起動不可 ディスク領域中 Androidとのデュア ルブート化 ディスク領域大 PCから起動 Android起動不可 ディスク領域小 Android起動不可 ディスク領域中 フラッシュメモリを 一切使わない最も 安全な方法 ディスク領域大
  • 26. 2010/11/12 26 移植例:NexusOne ● NexusOneでMeeGoを動かす ● MeeGoとは 新しいLinuxディストリビューション(Atom, armv7l) 携帯電話、Netbook、車載機器、家電向け(TV等) Intel/Nokia主導の開発とOSSコミュニティ
  • 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. 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. 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. 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. 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. 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. 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
  • 35. 2010/11/12 35 今後の課題 ● ハードウェアレンダリングを有効にする ● libEGL, libGLESv2の互換性の問題 ● 周辺装置の対応 ● ボタン、トラックボール、センサ、カメラ等 ● 電話機能の対応 ● ATコマンドの調査が必要 ● ofono(Open Source Telephony)の拡張
  • 36. 2010/11/12 36 注意点 ● バックアップを忘れずに!(nandroid etc) ● YOUR OWN RISK! ● カスタマイズしたイメージの書き換え ● BootloaderのUnlockが必要 ● メーカーの保証対象外になる ● Lock状態に戻せない機種がある ● イメージの書き換え方法 ● fastbootで上書きできるとは限らない ● recovery領域のinitrdからイメージの書き込みを行う ● 必要に応じてroot化も必要
  • 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出力が難
  • 39. 2010/11/12 39 まとめ ● Android端末でも別のOSは動かせる ● 動かし方は機器によって様々 ● 他のLinuxを動かすためのリソース探しが大変 ● クローズドドライバが壁になる ● 新しい用途が発見できるかもしれない
  • 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ルートファイルシステム)