Google Nexus Oneは2010年に配られたスマートフォンで、公式にはAndroid 2.3.6 (Gingerbread)が最新のROMということになっている。 しかし、非公式ROMがインターネットに放流されていて、これを使うことでAndroid 4.4を使うことができた。
Android 4.4にアップデートする前、このデバイスは公式Android 2.3.6 (GRK39F)で動作していた。 なお、これはAT&T版で、PB99110という型番が書いてある。
なにはともあれ、rootがないと各種ツールを導入できない、ということで、Android 2.3.6でrootをとる。 これにはDooMLoRD's Easy Rooting Toolkit [v4.0](zergRush Exploit) [xda-developers.com]を使った。
実際に用いた版はDooMLoRD_v4_ROOT-zergRush-busybox-su.zipで、SHA-1が505071b8ac2036536c8a52d5ae43fc6eb2915caaのもの。
Linux環境で作業したため、バッチファイル中のadbコマンドの呼び出しを逐一Linuxでうまくいくよう書き換えながら実行。
無事、rootがとれた。
Androidのリカバリパーティションに4EXT Recovery
というツールを導入。
APKがhttp://www.4ext.net/で配布されている。
このツールを起動すると、どのバージョンをROMに導入するか選択することができる。
とりあえず最新版の4EXT Recovery Touch v1.0.0.5 RC9を導入した。
なお、この4EXTは、Gingerbreadが起動すると壊されてしまう。 Gingerbreadが起動する度に4EXT Recovery Updaterを起動し、4EXT Reoveryを書き込むしかなかった。
アンロックされたブートローダーを導入し、パーティションを切る。
ブートローダーはBLACKROSE (Custom HBOOT) [xda-developers.com]を使った。
以下のように、まずカスタムブートローダーを導入し、次にトラックボール押下しながら電源投入でfastbootモードにし、その状態でパーティション構成を変更したHBOOTを焼けばよろしい。
$ ./BlackRose $ ./BlackRose editor Loading... * daemon not running. starting it now * * daemon started successfully * Nexus One BlackRose Editor If you want resize partition, type [resize] and press enter key:resize SYSTEM + CACHE + USERDATA = 436MB system size(MB):290 cache size(MB):33 label name(20 char max):kk system size:290MB cache size:33MB userdata size:113MB label:kk Custom BlackRose(hboot_brcust.nb0) is saved $ ./other/fastboot-l flash hboot hboot_brcust.nb0 sending 'hboot' (512 KB)... OKAY writing 'hboot'... OKAY
microSDにBeanstalk Rom 4.4.001 [xda-developers.com]にあるBeanstalk_4.4.4001-passion.zipを入れておく。
なお、このzipファイルには、MacOS X特有の__MACOSX/*や.DS_Storeがなぜか含まれていたので、zip -d ….zip …などとして消しておいた。
Nexus Oneをトラックボールを押しながら起動する。 Recoveryを選択すると仕込んでおいた4EXTが起動する。
4EXTで、wipeを選び、SDカード以外をすべてwipeする。 次に、例のzipファイルを選択し、書き込む。 再起動するとAndroid 4.4.4 (Beanstalk 4.4)が起動した。
なお、このROMでは、4EXT Recoveryが破壊されることはなかった。
Nexus Oneのオンボードフラッシュメモリは512 MBしかないので、そのままKitKatを利用し続けるには足りない。 そこで、Mounts2SD - Storage & Memory Management [xda-developers.com]を導入、一部のデータをmicroSD側に移動することができる。
まずPCでmicroSDカードのパーティションを切る:
# fdisk /dev/mmcblk0
fdisk (util-linux 2.25.2) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。
コマンド (m でヘルプ): p
Disk /dev/mmcblk0: 3.7 GiB, 3904897024 bytes, 7626752 sectors
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 7626751 7624704 3.7G c W95 FAT32 (LBA)
コマンド (m でヘルプ): d
Selected partition 1
Partition 1 has been deleted.
コマンド (m でヘルプ): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
パーティション番号 (1-4, default 1):
最初のセクタ (2048-7626751, default 2048):
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-7626751, default 7626751): +1536M
新しいパーティション 1 をタイプ Linux、サイズ 1.5 GiB で作成しました。
コマンド (m でヘルプ): t
Selected partition 1
16 進数コード (L で利用可能なコードを一覧表示します): c
DOS 6.x 領域を作成、または変更してしまった場合は、cfdisk 付属文書にある追加情報ページを参照してください。
パーティションのタイプを 'Linux' から 'W95 FAT32 (LBA)' に変更しました。
コマンド (m でヘルプ): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
パーティション番号 (2-4, default 2):
最初のセクタ (3147776-7626751, default 3147776):
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (3147776-7626751, default 7626751):
新しいパーティション 2 をタイプ Linux、サイズ 2.1 GiB で作成しました。
コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。
# mkfs.vfat /dev/mmcblk0p1
mkfs.fat 3.0.27 (2014-11-12)
# mkfs.ext3 /dev/mmcblk0p2
mke2fs 1.42.12 (29-Aug-2014)
Discarding device blocks: done
Creating filesystem with 559872 4k blocks and 139968 inodes
Filesystem UUID: f8540f07-f381-4405-9f99-41203c8b05be
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
これを装着するとNexus Oneではこんな感じになる:
1|root@passion:/ # df Filesystem Size Used Free Blksize /dev 201.3M 136.0K 201.2M 4096 /sys/fs/cgroup 201.3M 0.0K 201.3M 4096 /mnt/asec 201.3M 0.0K 201.3M 4096 /mnt/obb 201.3M 0.0K 201.3M 4096 /system 290.0M 212.8M 77.2M 4096 /data 113.3M 98.1M 15.1M 4096 /cache 33.0M 1.1M 31.9M 4096 /mnt/media_rw/sdcard0 1.5G 12.0K 1.5G 4096 /mnt/secure/asec 1.5G 12.0K 1.5G 4096 /storage/sdcard0 1.5G 12.0K 1.5G 4096
で、APKを導入しようとしたが、Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]
と言われてしまいうまくいかなかったので、Beanstalk ROMに元から入っているExchange Servicesを削除した。すると:
% adb install Mounts2SD-3.4.8-unlocked.apk 1294 KB/s (2300141 bytes in 1.734s) pkg: /data/local/tmp/Mounts2SD-3.4.8-unlocked.apk Success
となり、うまくいった。 Mounts2SDを起動し、Install startup scriptを選択後、再起動する。 結果、マウント一覧はこんな感じに:
# df Filesystem Size Used Free Blksize /dev 201.3M 136.0K 201.2M 4096 /sys/fs/cgroup 201.3M 0.0K 201.3M 4096 /mnt/asec 201.3M 0.0K 201.3M 4096 /mnt/obb 201.3M 0.0K 201.3M 4096 /system 290.0M 212.9M 77.1M 4096 /data 113.3M 72.3M 40.9M 4096 /cache 33.0M 1.1M 31.9M 4096 /sd-ext 2.1G 94.8M 2.0G 4096 /data/app 2.1G 94.8M 2.0G 4096 /data/app-private 2.1G 94.8M 2.0G 4096 /data/app-asec 2.1G 94.8M 2.0G 4096 /mnt/media_rw/sdcard0 1.5G 16.0K 1.5G 4096 /mnt/secure/asec 1.5G 16.0K 1.5G 4096 /storage/sdcard0 1.5G 16.0K 1.5G 4096
Beanstalk ROMを焼いてから日本語が表示できないことに気付いた。
簡体字で表示されてしまうのはありがちだが、今回の場合全く表示されない。
豆腐もでない。
/system/etc/fallback_fonts.xmlを見ると、lang="ja"でMTLmr3m.ttfなるファイルを指定しているが、当該ファイルはROMの中には見当たらない。
MTLmr3m.ttf
は検索するとダウンロードできるので、これを適切に配置する。
% adb shell root@passion:/ # mount -o remount,rw /system root@passion:/ # ^D
% adb push MTLmr3m.ttf /system/fonts 1318 KB/s (2871020 bytes in 2.126s)
そして再起動する。
以上で見事日本語が表示できるようになった。
以上のような方法でとりあえずNexus OneでKitKatを動作させることができた。 USに行く必要があるが、SIMフリーのAndroid端末がなくて困った、といった時には十分使える機種になった気がする。
KitKatのROM焼き後、無事AT&Tのgophoneサービスで通話・データ通信が行えることを確認した。 店員に「この端末かなり遅いけど一応動いてるっぽい」等といわれた。 リンクはHSDPAと表示されていた。