Android 4.x CyanobenModの 移 植 方 法 を 調 査 してみた 1 自 己 紹 介 2 CyanobenMod 概 要 3 CyanobenModインストール 主 な 流 れのイメージ 4 ARMブートローダの 仕 組 みとX86 比 較 5 CyanobenMod 移 植 のナゾ 6 CyanobenMod 1xの 移 植 方 法 翻 訳 : 参 考 例 ( 時 間 があれば) 7 まとめ 東 海 道 らぐ 秋 の 大 阪 LT 大 会 in KOF2014 2014/11/08 14:00~14:50 会 場 ショーケース2 講 演 資 料 は 電 子 データと 紙 面 を 配 布 しております 詳 しくはブースまで 講 演 :Kapper
自 己 紹 介 名 前 :Kapper Twitterアカウント:@kapper1224 HP:KapperのHP http://kapper1224.sakura.ne.jp/ 趣 味 :Linux モバイル 好 きなARMマニア 好 きな 言 葉 : 実 験 より 記 録 重 視 出 来 た 事 ダメだった 事 は 貴 重 な 財 産 で 記 録 に 残 そう 最 近 の 実 験 機 :Netwalker(PC-Z1,T1) Nokia N900 DynabookAZ RaspberryPi Nexus7(2012 2013) Hercules ecafe EX HD Jetson TK-1 OpenPandora ARM Chromebook ZTE OPEN C(FirefoxOS) Chromecast 他 最 近 気 になる 事 :DynabookAZでUbuntuLinux14.04のテスト 再 開 しました Androidの 勉 強 と 解 析 中 です Jetson TK-1 購 入 しました テスト 中 です
ARMデバイスに 関 しては 超 マニアです 大 好 きです よろしく!
CyanobenMod 概 要 CyanogenMod Inc.が 開 発 しているカスタマイズされたAndroidの 数 ある 独 自 ビルドの 一 つで 各 種 デバイスにAndroid4.xを 移 植 公 式 非 公 式 なサポートを 含 めると220デバイスに 対 応 ファームウェア(ブートローダー)からOSイメージまで 開 発 公 式 サポートされているデバイスであれば rootを 取 らずにワンクリッ クでインストール 可 能 インストールは 難 しいが 謎 デバイスにも 多 数 動 作 報 告 があり 旧 型 機 種 のアフターマーケットに 寄 与 している どうやって 移 植 しているんだろう? というのが 気 になって 調 査 してみた CyanobenMod9
CyanobenMod 移 植 にあたって CyanobenModの 移 植 は 途 方 もなく 簡 単 か ridiculously easy 途 方 もなく 難 しいか ridiculously difficult のどちらか 極 端 と 公 式 HPに 記 載 要 注 意
CyanobenModの 分 類 Official Device Google Nexus 系 Samsung Galaxy 系 LG Sony Motorola HTC Huawai KindleFire 他 Unofficial Device 上 記 メーカーの 対 応 機 種 以 外 の 端 末 Acer Iconia DynabookAZ SHARP FX PLUS ZTE 系 参 考 出 展 ;CyanogenMod devices
CyanobenModインストール 主 な 流 れのイメージ 公 式 サポートデバイス 途 方 もなく 簡 単 ルート CyanogenMod Installer Appをインストール Windowsに Cyanogen ModInstallerを インストール USBで 母 艦 PCに 繋 いで ダウンロード インストール AndroidにCyanobenModをインストールする Yes Androidのデータをバックアップする 公 式 サポート 対 応 している? No 母 艦 PCにNVflash fastbootをインストール AndroidをUnlock(root 化 含 む) ブートローダ 対 応 している? Yes No Androidにブートローダ(U-boot 他 )を 上 書 きする rootfs 対 応 している? Yes No 再 起 動 してCyanobenModのrootfsをSD 他 からマウント 非 公 式 サポートデバイス 途 方 もなく 難 しいルート ブートローダとドライバ 設 定 ファイルをコンパイル 汎 用 ARMイメージに Linuxを 入 れ 直 してrootfs 作 成 再 起 動 してCyanobenModが 起 動
ARMブートローダの 仕 組 みとx86 比 較 ARMの 場 合 FlashROMからRAMにブートローダを 転 送 し と rootfsを 読 み 込 む 構 成 です ROMに 書 き 込 んでるブートローダは ファー ムウェア と 呼 ぶそうです Androidの 場 合 Unlockが 必 要 です 種 類 ROM RAM MBR (ディスク) x86~ Linux ARM Android ARM FirefoxOS ARM Linux ディストリ BIOS デバイス 認 識 ブートディスク 選 択 初 期 化 ドライバ RAM 転 送 MLO 初 期 化 ドライバ RAM 転 送 MLO 初 期 化 ドライバ RAM 転 送 MLO 転 送 GRUB LILO 他 rootfs 読 み 込 み Android ブートローダー(ROM) 転 送 転 送 rootfs 読 み 込 み Android ブートローダー(ROM) rootfs 読 み 込 み ブートローダー(U-boot 他 ) init ログイン 特 徴 ドライバ ドライバ rootfs 起 動 ドライバ rootfs 起 動 ドライバ Daemon 他 デバイス Daemon コンテキスト マネージャ Zygote デバイス Daemon Daemon 他 CUI Xorg Dalvik 仮 想 マシン Android GUI FIrefox GUI CUI Xorg BIOSと DISKブー トローダー で 構 成 ブートロー ダーの Unlockが 重 要 Androidと ドライバ まで 共 通 ブートロー ダー 以 降 はx86と 同 じ
CyanobenMod 移 植 のナゾ1 Androidのをどうしているんだろ? 1.ノーマルをパクってそのまま 使 う 2.ベンダーHPからGPLライセンスの ソースコードを 入 手 してコンパイル 3.メインラインなどから 類 似 デバイス のコードを 流 用 して 改 造
CyanobenMod 移 植 のナゾ2 Androidのブートローダをどうしているんだろ? 1./boot と /system partitionsにboot.imgと System.imgを 書 き 込 む 2.ベンダーHPからGPLライセンスの ソースコードを 入 手 してコンパイル 3.U-bootのソースコードから 類 似 デバイス の( 同 一 チップセット)ドライバを 改 造 して コンパイル
CM1xの 移 植 方 法 1 翻 訳 : 参 考 1.Androidのデバイス 名 を 調 査 :/system/build.prop adb pull /system/build.prop 機 種 データをメモする ro.product.manufacturer:ベンダー 名 ro.product.device:コードネーム 名 Boot.imgとroot.imgを 調 査 RAMディスク 経 由 の 抜 き 取 り コンパイルなどで 入 手 する 2.ベンダーからソースコードを 入 手 最 小 限 のソースコードはGPLで 公 開 されている パーティションを 調 査 して 決 定 ( 主 にeMMCなど) $ cat /proc/partitions 3. 新 しいディレクトリを 設 定 device/[vendor]/[codename]/ デバイス 固 有 ファイル vendor/[vendor]/[codename]/ ベンダー 独 自 バイナリなど kernel/[vendor]/[codename]/ ソース 参 考 出 展 :How To Port CyanogenMod Android To Your Own Device
CM1xの 移 植 方 法 2 ディレクトリの 設 定 方 法 翻 訳 : 参 考 1mkvendor.shスクリプトでbuild/tools/device/に 自 動 的 にディレクトリを 生 成 vender codename boot.imgのパラメータを 指 定 する $./build/tools/device/mkvendor.sh samsung i9300 ~/Desktop/i9300boot.img 2 同 じ 様 なデバイスのgitレポジトリからforkする 3 手 動 でディレクトリを 設 定 する 4.ファイルをカスタマイズする device/フォルダにある 沢 山 のファイルをカスタマイズする 主 に BoardConfig.mk:デバイスのマザーボード CPUのアーキテクチャ およびその 他 のハードウェアについての 情 報 device_[codename].mk:androidパッケージを 構 築 する 設 定 ファイル cm.mk: recovery.fstab:/etc/fstabの 様 にマウントするファイルポイントを 指 定 /system ext4 /dev/block/mmcblk0p32 kernel:zimageかuimageなどのファイル 形 式 を 含 めたkernel vendorsetup.sh: 標 準 でないlunchメニューをsetupenv.shで 設 定 参 考 出 展 :How To Port CyanogenMod Android To Your Own Device
CM1xの 移 植 方 法 3 翻 訳 : 参 考 5.テストリカバリイメージの 作 成 recoveryパーティションにリカバリイメージを 作 成 fastbootコマンドで 書 き 込 みする 対 象 機 種 でリカバリモードが 起 動 する 事 が 前 提 必 要 に 応 じて/device/[vendor]/[codename]/recovery/recovery_ui.cpp 調 整 6.CyanoberModのコンパイル extract-files.sh と setup-makefiles.sh スクリプトを 作 って バイナリblobと.mkファイルをvender/を 追 加.mk Makefileを$OUTフォルダに 置 く Makefileに-include vendor/[vendor]/[codename]/boardconfigvendor.mk 追 加 device/ディレクトリを 改 定 する ベンダーからHelpの 入 手 OEM プラットフォーム リポジトリ Google 色 々 GoogleのGit Nexusバイナルブロブ HTC 色 々 デベロッパーセンター レノボ 色 々 レノボスマートフォン LG 色 々 LGオープンソースコード 配 布 モトローラ 色 々 モトローラのオープンソースセンター Nvidia Tegra Tegraの 標 準 Git クアルコム MSM/QSD コードオーロラフォーラム サムスン 色 々 サムスンのオープンソースリリースセンター TI OMAP Omapzoom.com Omappedia 参 考 出 展 :How To Port CyanogenMod Android To Your Own Device
CM1xの 移 植 方 法 4 翻 訳 : 参 考 7.XMLオーバレイの 追 加 device_[codename].mkファイルの 中 にある DEVICE_PACKAGE_OVERLAYS := \ device/[vendor]/[codename]/overlay の 行 を 修 正 8.とモジュールをソースからコンパイルする 参 考 出 展 :How To Port CyanogenMod Android To Your Own Device
中 華 パッドとかにCyanobenModをマトモに 移 植 しようと 思 ったら 大 変 だな~ あまりあれこれ 移 植 しろと 要 求 しないで 下 さいね
まとめ CyanobenMod 移 植 方 法 を 翻 訳 して 調 べてみまし た 謎 デバイスに 移 植 するのはとても 難 しそうです ARMブートローダーやOSインストールの 全 体 像 を 整 理 してみました 詳 しい 仕 組 みは 割 愛 します 専 門 の 情 報 源 にて 各 自 で 入 手 して 下 さい Android 機 にLinuxディストリを 移 植 する 方 法 は DynabookAZを 実 例 に 本 日 セミナーします こちらは 超 マニアック 路 線 なのでご 注 意 KOF2014 11/8 17:00~17:50 ショーケース2 Androidクラウドブック DynabookAZで Linuxを 色 々と 遊 んでみよう
過 去 の 資 料 抜 粋
ARM Linuxの 分 類 Bootloader Android FirefoxOS 組 み 込 み Linux Linux ディストリ ビューション ChromeOS
AndroidのUnlock AndroidにインストールするにはブートローダーをUnlockする 必 要 がありま す ( 機 種 毎 で 異 なります) DynabookAZではNVFlashでroot 対 応 しているのでUnlock 不 要 です 参 考 サイトRootzWikiなど http://wiki.rootzwiki.com/category:devices
Nexus7でのUnlock 例 AndroidのUnlockの 一 例 としてNexus7で 試 してみます Nexus7はメーカーの 規 制 が 無 い 機 種 です 個 別 の 機 種 に 関 しては 難 しい 機 種 も 沢 山 あります 今 回 は 割 愛 します 用 意 する 物 Ubuntu12.04 以 降 がインストールされたPC(Windowsでも 可 ) MicroUSB-USBケーブル Nexus 7 Tablet 本 体 (8GB, 16GB, or 32GB) Android SDKのコマンド fastbootのインストール Nexus7の 電 源 ボタン 長 押 しで 電 源 をOFFにします 電 源 が 切 れましたら 右 上 あたりにあります 電 源 ボタン と volume downボタン を 押 しながら 再 起 動 します ドロイド 君 の 起 動 画 面 が 出 てくるはずです Nexus7とUbuntuPCをMicroUSB-USBケーブルで 繋 ぎます PCからfastbootコマンドを 実 行 sudo fastboot oem unlock Unlock Bootloaderの 画 面 で Yes を 選 択 し 再 起 動
ARM 関 連 のブートローダ 比 較 明 確 な 定 義 は 決 まってないですが ROMブートローダとDiskブートローダ の2つに 分 類 される 事 が 良 くあります 種 類 対 応 MPU 対 応 OS 対 応 ストレージ GNU GRUB x86 Linux *BSD MacOSX MSDOS LILO x86 Linux *BSD MSDOS ecos Redboot Das U-boot ARM,x86,68k, MIPS,Altera,P owerpc,supe rh 他 ARM,x86,68k, MIPS,Altera,P owerpc,supe rh 他 Linux *BSD MacOSX MSDOS Linux *BSD Android 他 Multirom ARM Android Linux HDD,floppy USB,LAN TFTP,Serial HDD,floppy USB,LAN TFTP,Serial HDD,floppy USB,LAN TFTP,Serial HDD,floppy USB,LAN,Zip TFTP,Serial NFS Android SecondaryROM USB 対 応 フォーマット 起 動 モジュール ライセンス 全 種 類 DISK 他 GPLv3 全 種 類 DISK 他 BSD Licence JFFS2 EXT2 E XT3 EXT4 FAT 他 Cramfs EXT2 EX T3 EXT4 FAT F DOS JFFS2 Reis erfs UBIFS YAF FS2 EXTx FAT32 N TFS ROM RAM ROM RAM ROM RAM Mod GPLv2+ GPLv2 GPLv3
Das U-Boot 解 説 ARM 他 で 良 く 使 われている 高 性 能 ROMブートローダ 2010 年 頃 からRedbootの 代 替 としてメジャーに 起 動 ディスクとして 多 数 のフォーマット ストレージに 対 応 している 強 みあり C 言 語 で 作 成 CPUとメモリマップを 直 接 指 定 理 解 が 必 要 Linuxの 場 合 は mkimageコマンドでをuimage 等 に 変 換 圧 縮 してフラッシュROM 焼 きしてROMから 起 動 メモリに 展 開 第 一 パーティションにMLOと/boot/を 置 く rootfsをext3などに 置 く から 起 動 CPU リセット クロック 指 定 実 行 メモリ ROM 転 送 MLO bootloader rootfilesystem ROMからメモリ 転 送 可 能 RAM (メモリ) rootfilesystem bootloader デバイス 認 識 (ドライバ) リセット リセット ディスク 再 転 送 可 能 MBR (ディスク) Grub rootfilesystem OS 起 動 参 考 U-Boot ユーザーズマニュアル
Android CM1xインストールと 起 動 1 必 要 なファイル ROM 本 体 とリカバリイメージを 落 としてくる cm_ac100-ota-1x.x-xxxxxxxx- UNOFFICIAL.zipとrecovery-1x.xxxxxxxxx.img 基 本 的 に 本 体 とリカバリは 同 じバージョンのものを 使 用 sos-uboot-*.binとgappsをダウンロード cm_ac100-ota-1x.x-xxxxxxxx-unofficial.zip recovery-1x.x-xxxxxxxx.img gapps-non-neon.zip の3つをVFAT/FAT32でフォーマットしたSDカードに 入 れる 母 艦 側 の 準 備 母 艦 側 に"nvflash"を 入 れておく まずロム 本 体 リカバリイメージ gappsを 入 れたSDカードを 挿 しておく 母 艦 にUSBケーブルで 接 続 して 例 によってCTRL+ESC+ 電 源 ボタンで 起 動 する 作 業 開 始 以 下 のコマンドでBootLoaderを 起 動 する $ nvflash --bl./sos-uboot.bin go BootLoaderが 起 動 したら "Boot "を 選 択 してEnter "/ #"みたいなプロンプトが 出 てくるので "./switch-to-uboot [ENTER]"でスクリプト を 起 動
Android CM1xインストールと 起 動 2 必 要 なファイルの 準 備 パーティションを 組 み 直 す # parted /dev/mmcblk1 rm 7 rm 6 rm 5 rm 4 rm 3 rm 2 rm 1 # parted /dev/mmcblk1 mklabel gpt # parted /dev/mmcblk1 -s mkpart primary 7168s 132168s # parted /dev/mmcblk1 -s mkpart primary 132169s 257169s # parted /dev/mmcblk1 -s mkpart primary 257170s 1257170s # parted /dev/mmcblk1 -s mkpart primary 1257171s 2257171s # parted /dev/mmcblk1 -s mkpart primary 2257172s 2261078s # parted /dev/mmcblk1 -s mkpart primary 2261079s 15513695s # parted /dev/mmcblk1 -s name 1 SOS name 2 LNX name 3 APP name 4 CAC name 5 MSC name 6 UDA 各 パーティションをフォーマットする (mmcblk1p1~7まで 同 じ) # mkfs.ext2 /dev/mmcblk1p1 # mkfs.ext2 /dev/mmcblk1p2 # mkfs.ext4 /dev/mmcblk1p3 ~ # mkfs.ext4 /dev/mmcblk1p7 p1にリカバリイメージを 書 き 込 む # mkdir /tmp/sd # mkdir /tmp/p1 # mount /dev/mmcblk0p1 /tmp/sd # mount /dev/mmcblk1p1 /tmp/p1 # mkdir /tmp/p1/boot # unzip /tmp/sd/recovery-10.1-xxxxxxxx.img -d /tmp/p1/boot/ # sync # umount /tmp/sd # umount /tmp/p1 電 源 ボタン 長 押 しで 強 制 的 に 電 源 を 落 として 再 起 動 する 起 動 メニューが 出 てくるので Boot SOS CM-10.1 を 選 択 し10.1のイメージとgappsを 焼 く システムを 再 起 動 すると 9.の 時 の 起 動 メニューが 出 てくるので 今 度 は Boot LNX CM-10.1 を 選 択 する