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と表示されていた。