スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Asus TF300Tにandroid 4.2をインストールする

手持ちのタブレットAsus TF300Tに、少し前に非公式ROMでJellybean 4.2を入れてみたが、その時はトータルの利便性から結局Jellybean 4.1.1にダウングレードしてしまった。しかし他のSKUバージョンから遅れること約一月、ついにAsusから日本語版公式アップグレード用のzipファイルが公開されたので、私もさっそくアップグレードを行うことにした。

AsusにとってはPadPhoneやらMemo Padやら新製品が相次ぐ中で大変だったと思うが、JP版のアップグレードファイルを公開してくれたことに感謝したい。

なお、毎度言うまでもないが、ここに記述するのはあくまで私の場合は成功したという報告であり、他の方が試されたときの手順を保証するものではない。特に今回のアップグレードは、失敗すると完全にタブレットが使用不可能になって復元できなくなる危険もあるようである。あくまで自己責任でお願いする。あと、ここに書いてあるのはroot化されている場合の話であり、そもそもroot化しないでメーカー保証の範囲内で使っている場合はFOTAアップグレード機能により、もっと簡単かつ安全に4.2へのアップグレードが可能であることは言うまでもない。

作業全般は、基本的にこの記述を参考に行った。しかし今回のアップグレードは、この警告によると、中途半端に作業してからやっぱり元に戻そう、ということはできないようである(やろうとするといわゆるbrick、再起不能状態になる可能性があるらしい。詳しく言うと、ブートローダが4.2用のものにアップグレードされた状態で4.2以前のandroidのROMを書き込むともうfastbootも使えない状態になる、ということのようである)。そういう意味ではリスクの高い作業なのかもしれない。
追記 2013/4/26:
このポストによると、Jellybean 4.2にアップグレードした後でも、Jellybeanの範囲内であればダウングレード可能らしい(ICSへはダウングレード不可能らしい)。ただ、私自身は確認していない。


私が今回の作業を行う前の段階では、どういう状態だったかと言うと

Asusの公式ROMにより、Jellybean 4.1.1にアップグレード済み
Clockwork Mod Recoveryインストール済み
CWM RecoveryによってSuperuser-3.2-RC3-arm-signed.zipを書き込むことによりroot化済み

さらに、いわゆる母艦として64ビットデスクトップPC(Ubuntu 12.10)に、android sdk tools (adt bundle版)をインストールしてあり、これを利用して作業した。

Asusのダウンロードサイトからいただいてきた、TF300T-JP_epad-user-10_6_1_8_4-UpdateLauncher.zipを解凍すると、JP_epad-user-10.6.1.8.4.zipというファイルができるので、これをあらかじめ(旧バージョンのandroidが動いているうちに)/sdcard以下にコピーしておいた。また、root化のためにはここからリンクの張られているUPDATE-SuperSU-v1.25.zipも必要なので、これもあらかじめ/sdcard以下に置いておくのがよいだろう。

あと、Asusのサイトには、アンロックされたブートローダーのアップグレードファイルであるUnlock_v8.rarというファイルがユーティリティの項に置いてあり、一見これを解凍してできるUnlock_v8.apkをインストールするのかという気がするのだが、結論から言うと、これは必要ない。ブートローダは、Jellybean 4.2のzipファイルをインストールするときに一緒に自動的にアップグレードされる。(逆に、手動でこのUnlock_v8.apkをインストールしようとしても、「ファイルの解析に失敗しました」といったメッセージが表示されてインストールできない。むしろできなくて幸い、下手に先にブートローダだけアップグレードできてしまうと、上記の警告に書かれている状態になり、brickで詰むのかも知れない。)

私は上で述べたように、すでにCWM Recoveryが動作している状態で作業したので、4.2への実際のアップグレード作業そのものは、リカバリーモードで再起動して、Dalvik cacheを消去した後、JP_epad-user-10.6.1.8.4.zipを選択し、インストールするだけだった。これで再起動すれば、4.2が起動する。が、すぐ後に述べる理由によりここではまだ再起動しないことを勧める。(私は再起動したので、若干手順が増えたのではないかと思う)

Asus公式ROMは当然root化されてはいないので、アップグレード後、改めてroot化を行わなければならない。そこで再びリカバリーモードに入り、先に/sdcard以下に置いてあったUPDATE-SuperSU-v1.25.zipをインストールすればよい、かと思いきや実はそうはいかなかった。

先に述べたように、Jellybean 4.2へのアップグレードを行うと、ブートローダも自動的に更新される。このため、CWM Recoveryはもう動作しないのである。リカバリーモードに入ろうとしても、例の気絶droid君アイコンが表示される。上の手順でまだ再起動していなければ、まだCWM Recoveryが動作しているうちにUPDATE-SuperSU-v1.25.zipを書き込んで、アップグレードとroot化とを一手順ですませられるのではないか、と思う。が、私は既に書いたとおり再起動して違う手順での作業になったので、確認はしていない。


なお、新しいブートローダでは、メニュー画面にUSBアイコンが出てこない。あらかじめ知らされていなければ、これでfastbootも使えなくなって、オレ詰んでね?となるところである。しかし実は、新しいブートローダでは、わざわざUSBアイコンをメニューから選択しなくても、メニューが表示されている状態のままでfastsbootプロトコルが動くのだそうだ。

今回、CWM Recoveryは、TF300Tに対応した新しいバージョンのブートローダの下で動くものが見つからなかったので、同種のユーティリティとして、TWRP 2.4.4.0をfastbootを使用してインストールした。これは、ここからいただいてきたzipファイルを展開し、その中のtwrp.blobファイルを使用した。(私はLinux環境なので、他のdllやらexeファイルには用がない)

fastboot -i 0x0b05 flash recovery twrp.blob

としてTWRPをインストールし、

fastboot reboot

でタブレットを再起動すれば、うまくいっていれば再びリカバリーモードが使用できるようになっている。そのinstallメニューから、UPDATE-SuperSU-v1.25.zipをインストールすればroot化完了である。

fastbootを使用するに当っては、Linux側ではrootになっておく必要があったし、また正しくタブレットと母艦の間で通信を行うために、タブレットを一回再起動する必要があった。

また作業には直接関係ないが、先に公開されたUS、WW、TW版のバージョン番号は10.6.1.8、CN版は10.6.1.8.1だったのに対し、JP版は10.6.1.8.4となっており、内部で数回にわたる修正作業が発生していたことが伺える。Asusのエンジニアの方々の労をねぎらいたい。
スポンサーサイト

Asus TF300TでJellybean 4.2を試してみた

表題の通りであるが、Asusからは現時点(2013年3月初旬)では公式ROMとして出ているのはJellybean 4.1.1までである。したがって、4.2を試したければ非公式ROMに頼ることになる。Asus TF300T用には、CyanogenModからROMイメージが公開されている。作業は、Update ASUS Transformer TF300T To Jelly Bean 4.2.1 [Tutorial] — Android Muscle:の手順に従って行った。

前提として、すでにClockworkMod Recoveryがインストールされ、アップグレード前のバージョンにおいてUnlock/Root化が済んでいるものとする。CWM Recoveryさえ使える状態になっていれば、基本的には上記サイトからダウンロードしてきたイメージを書き込むだけである。Cyanogen Modから提供されているROMイメージはすでにRoot化済みのようなので、アップグレード作業後に別途Root化の作業をする必要はなかった。

作業に成功すれば、初回起動だけはおそらくいろいろデバイスの情報を取得して初期設定を行っているためか時間がかかるが、特に問題なくJellybean 4.2.1が起動する。どこまでがJellybean 4.2.1の基本機能でどこがCyanogenMod独自のチューニングなのか分からないが、使用感自体は快適で(アプリを何もまだインストールしていないせいもあろうが)、画面の描画も非常に滑らかな印象はあった。(後でMikumikubench 2.1をインストールして試してみたら、実は4.1.1ではスコア5397に対して、4.2.1では5199と低下していた。自分の感覚のいい加減さを再認識) また、UIも主要な設定には画面上端の左右のプルダウン画面からアクセスでき、4.1よりクールな仕上がりになっている。さらに、再起動時に、特にアプリを使わなくてもリカバリーモードやダウンロードモードで起動させる選択肢が表示される(「電源を切る」の方を選択すると特にそれ以上の選択肢は表示されないが、「再起動」の方だとサブメニューでリカバリーやブートローダを選択できる)。

なかなか興味深かったのであるが、結論から言うと、ちょっとこのままでAsus TF300Tで実用するには辛かったので、残念ながらこの後、Asus公式の4.1.1に戻してしまった。その理由は、TF300T最大の特徴である、付属のキーボードドックへの対応がCyanogenMod提供のイメージにほとんどなかったことである。

入力方式のところで確認した限りでは、キーボードの種類としてasusdecと認識されているのだが、asusが独自に行っていると思われるこのキーボードに対するサポートがない。単に、ごく標準的な英語配列のUSBキーボードとして認識されているようだ。つまり、キーボード上にある各種の特殊機能キーがまったく機能しない。まあ私が常用していたのはタッチパッド無効化と音量のコントロールキー、スクリーンショットキー程度だが、それでもないと結構不便である。

また、これを日本語配列のキーボードとして正しく認識させることもちょっと大変そうである。Jellybean 4.1から導入されたという user installable keymapという機能を使って、4.0のROMからキーマップファイルを抜き出して4.2用にパッケージを作り直す、といったことをすればうまくいく可能性はあるが、ちょっと今は他のことが優先度上位で、具体的にこの方向でトライしている時間がない。

さらには、公式ROMでプリインストールされている、キーボードドック対応バッテリー残量表示ウィジェットも、ないとけっこう不便である。

あと、実はmicroSDも、JB4.0.1のときは100回挿入して1回くらいしか認識されないという不安定さ加減で閉口していたのが4.1.1では確実に認識されるようになり喜んでいたのだが、CyanogenMod の4.2.1では再び認識されなくなり、これも大きなマイナスである。なお、使用しているmicroSDはtrancsendのclass 10 32GBのものである。

Asusのプリインストールアプリを動かすために、単に4.1.1の/system/appからapk/odexファイルをコピーしてくるというのは試してみたが、これで動くアプリは確かにいくつかあったのだが、少数だった。

なのでまあ、当面はあきらめることにして、おとなしく4.1.1に戻してしまったわけである。キーボードドックがただの英文配列のジェネリックなキーボードとして動作すれば十分、という方はCyanogenModでもいいかもしれない(それにしてもタッチバッドが殺せないとあまりに辛そうだが)。

なお、4.1.1に戻してから、素直に再起動しなくてちょっとあせった。ブートで引っかかるのでリカバリーモードに入ろうと思っても、CWM Recoveryも気絶droid君の表示になり起動しない。これはUSBダウンロードモードから、fastbootでCWM Recoveryを再インストールしたりしているうちに直った。もしかすると、途中でキャッシュのクリアなども行ったのでそれも関係あるかもしれない。あまりはっきりしなくて申し訳ないが、ピンポイントで条件を突き止めるまで繰り返して作業する気にはなれなかったので悪しからず。

ついでに作業環境について言及しておくと、私は64ビットUbuntuにandroid SDKをインストールしてそこからfastbootやadbを動かしているが、64bit Linux用のandroid SDKをダウンロードしてきても、実はバイナリは32ビット版らしく、動作させるにはia32libsという32ビット互換ライブラリをごっそりと入れる必要があった。あと、root(sudo -i)でないとfastbootからUSBデバイスに正しくアクセスできなかった。

追記(2013/03/13):
Asusのダウンロードサイトをチェックしてみたところ、どうやらTF300T用のJellybean 4.2公式ROMもぼつぼつ公開され始めたようだ。まだ現時点ではWW、US、TW用の3種類しか公開されていないが、もう少し待てばJP用も出ることを期待する。


追記(2013/03/14):
juggly.cnによれば、3月中にJP版も出そうである。


追記(2013/04/04):
3月中に追加されたのは、残念ながらCN版のみ。これが世界2位から3位に滑り落ちるということか…クッ。日本は単独市場としては世界3位、だがAsusの地元台湾と、ユーロ圏全体を合わせたWW版が先に来るせいで、JP版は5番目以降にずれ込んでいる、という構図のようである。台湾メーカーにとって日本語よりは簡体中国語の方がまだ容易、という面もあるのかも知れないが…いずれにせよ、JP版の更新はもう少し待たねばならないようだ。


追記(2013/4/20):
Asus TF300Tにandroid 4.2をインストールするのエントリに書いた通り、4月19日にAsusのダウンロードサイトでJP版のzipファイルも公開されていることを確認できた。

Asus TF300Tからsamba/NFSサーバーをマウントする

表題の通りのことを、自分と同じタブレットを使っている人のためにメモしておく。

まず、前提として、私のTF300Tはroot化されており、Asusのダウンロードサイトで提供されているJellyBeanのROMイメージを用いて、ICSからアップデート済みである。「設定」→「タブレット情報」→「ビルド番号」の項を見ると JRO03C.JP_epad-10.4.2.17-20121018 となっている。

一般論として、まずandroidというOSはカーネルにはLinuxカーネルそのものが使用されている。そして、Linuxカーネルの持つさまざまな機能は、

無効化
カーネルに組み込んで有効化
モジュールとしてコンパイルし、必要に応じてカーネルに動的にロードする

の3つの状態のいずれかになっている。単純に考えると何でも有効になっていれば便利な気がするが、実際には有効になっている機能が多ければその分カーネルの使用するメモリが増えていくので、特にandroidデバイスの場合、有効にする機能は厳選しなければならない。モジュール化しておけば、必要な時だけカーネルに組み込むことができるのでその点は問題ないが、やはり潜在的に使用するかどうかわからない多数のモジュールをシステムに置いておくことはストレージ容量の圧迫にもつながる。

当然のことながら、無効化されている機能は使うことができない。さてそこで、TF300Tの場合であるが、JellyBeanにアップデート後、端末内で以下を実行して、カーネルの設定をチェックしてみる。ネットワーク経由でサーバーの持つファイルシステムをマウントする機能には、代表的なものとしてCIFS(Windows共有/samba)と、NFS(unix系)があるので、この両者について調べる。

$ zcat /proc/config.gz | grep CIFS
# CONFIG_CIFS is not set
$ zcat /proc/config.gz | grep NFS
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
# CONFIG_NFS_V4 is not set
CONFIG_ROOT_NFS=y
#CONFIG_NFSD is not set
CONFIG_NFS_COMMON=y

これから分かることは、Asusの提供するカーネルでは、CIFSについては、無効化されている。また、NFSに関しては、一番古いversion 2プロトコルだけがサポートされており、より効率化されたversion 3, 4については残念ながら無効になっているということである。

これを見る限り、CIFSは使えない、という結論になりそうなのだが、実は【朗報】無効化された機能でも、バージョンのマッチするカーネルで別途コンパイル済みのモジュールがあれば、それをカーネルに組み込める…のである。

で、ちょっと探したら、ここにあった。

ここからいただいてきたcifs_md4_10.4.2.17.zipを展開すると、cifs.koとmd4.koができる。.koはカーネルオブジェクト、つまりカーネルモジュールであることを表している。

これさえ手に入れば、あとは基本的に、PC・NASの動画をAndroidから「直接」再生する方法(要root)に従って設定すればいいのであるが、CifsManagerに上記モジュールのありかを教えておく必要がある。

cifs.koとmd4.koを任意のフォルダに…例えば/sdcard/cifsというフォルダを作ってその中に置く。そして、CifsManagerのSettingで、「Path to cifs.ko[:]*」の項目に、/sdcard/cifs/md4.ko:/sdcard/cifs/cifs.ko と入力した上で、「Load cifs module」、「Load via insmod」の項目をチェックしておく。その他は、上記ブログの記事を参照していただけばいいだろう。

ついでに、NFSについても触れておく。こちらはおおむね弁財天: AndroidにLinuxサーバのディレクトリをNFSマウントする:を参考にする。既にチェックした通り、Asus提供のJellyBeanカーネルではNFS version 2だけが使用可能(これにはモジュールは不要)である。実際にNFSサーバをマウントするには、クライアント側のツールが必要になるが、これはbusyboxがインストールされていればよい。root権限で、あらかじめマウントポイントとなるディレクトリを

# mount -o remount,rw /
# mkdir /mnt/test
# mount -o remount,ro /

などとして作成しておき、

# busybox -mount -o nolock,soft,intr,nfsvers=2 -t nfs NFSサーバのIPアドレス:NFSサーバのディレクトリ /mnt/test

のようにすればマウント可能である。アンマウント時は

# umount /mnt/test

とする。むろん、NFSサーバ側の/etc/exports等は正しく設定されていなければならない。

なお、より正式なアプローチとしては、自前でカーネルを再コンパイルして、自分が使う機能を有効化なりモジュール化なりしておくことである。しかし、一歩間違えばブートしなくなってしまうし、そもそも私自身がandroidでのカーネルコンパイル手順の詳細をまだチェックしていないので、当面はこのまま使用することにする。

Delicious Save this on Delicious
プロフィール

GM3D

Author:GM3D
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。