More Related Content
Similar to Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112 (20)
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関連各種等
- 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
- 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カードのマウント
- 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起動不可
ディスク領域中
フラッシュメモリを
一切使わない最も
安全な方法
ディスク領域大
- 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
- 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出力が難
- 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ルートファイルシステム)