Nexus5 再起動ループを直す

2年半くらい使いましたが、死にかけてます。ちなみに、こないだは嫁さんのNexus5が死にました(→「Nexus5文鎮化&復旧の試みまとめ」)。

具体的な症状

電源ボタンを1回押すと、長押しと認識(電源OFFメニューが表示される)されたり、ダブルクリックと認識(カメラが起動)されたりする。トリプルクリック、4回クリックと認識されているような節もある。また、何かのアプリをタップした瞬間に電源が落ちて再起動する。再起動途中でさらに再起動を繰り返す(GoogleロゴやGoogleロゴ後のアニメーション)。

ちなみに、再起動ループに陥った際は電源ボタンをカチカチと1秒おきに押し続けたり、ずっと押してたりすると正常起動する。

原因の切り分け

まずソフトウェアとハードウェアのどちらに原因があるかを判断するためにfastbootコマンドからoem unlock後、ファクトリイメージを焼いてみた。事象は変化なし。よってハード的にどこかおかしいと思われる。

前回記事では嫁さんのNexus 5はemmc(ストレージ)が死んだと結論付けたが、今回はファクトリイメージが焼けるのでemmcは死んでいない模様。

となると、その他のハードウェアのどこかに原因があるのだろうが、これ以上はメーカーで調べてもらわないと分からないだろう。しかしながら保証はとっくに切れている(そもそもoem unlockしている時点で保証はない)。そして有償修理という選択肢は無い。どうせ数万円オーダーの修理費がかかるのだろうから新品を買った方が良い。

じゃあなす術なしか…というとそうではない。もう一つだけ、電池交換という方法が残されている。

ネットで調べてみると、頻繁な再起動を繰り返す場合は電池の劣化が原因である可能性がある、とさまざまなところに記載があった。電池の劣化により内部抵抗が上昇して起電力が落ち、大電流を取り出すとき(つまりCPU高負荷時)に起電力がハードウェアの最低動作電圧を割り込んでリセットがかかる、という現象が発生しているのではないか。

じゃあ現状の電池の劣化状態を調べたい。Android OS(?)
は電池の劣化にあわせて残量表示を補正しなければならないので、電池の劣化情報はどうにかすれば取得出来るのだと思われる。調べた所、/data/batterystatus.binというファイルに電池のキャリブレーションデータが入ってるようだが、ファイル名からして解析はしんどいだろうし、解析したところで分かるのは電圧や電圧変化などの値であってそこから「劣化率X%」という値を導くにはまたひと手間かかりそう。諦めた。

でも個人的には電池の劣化というのはかなり可能性が高いと考えている。まず、ここ数か月はバッテリが半日も持たないことが多かった。次に、起動中にGoogleロゴが表示されている間に再起動することが頻繁にあるという点。こないだ嫁さんのNexus5のemmcが死んだときはGoogleロゴから進まなくなったということを思い出すと、つまりemmcをマウントしてカーネルを起動するのはGoogleロゴが終わってからのアニメーション表示の段階ではないかと推測。であれば、PCで言えばBIOSやEFIに相当する部分の処理でコケてるということになり、この段階で常に起動しないのではなくて起動したりしなかったりを繰り返すというのはどうも電源臭いぞ、と。あとはMicroUSBから給電している時は再起動が発生しにくい、という点も怪しい。

電源ボタンをカチカチと押すと正常起動するというのは、ディスプレイ輝度と絡んでいるのではないかという気がする。定期的にボタンをおすとディスプレイ輝度が高いままになるので、大きい電流を常に取り出し続けていることになる。それが何か良い方向に影響しているのではないか。たぶん…。

電源ボタンの不具合は良くわからない。スイッチがチャタリングしているような気がするが、長押しとダブルクリックという正反対のモードで不具合が発生するという点がチャタリングっぽくないように思う。電圧が不安定になり、スイッチを押したときの電圧変化を正常に検知できてない…と思いたいがどうだろう。

対応策

これでバッテリ交換に1万円くらいかかるのであれば多分スマホ自体を新調したと思うが、幸いNexus5のバッテリは単体で2000円弱で売られており、工具も容易に手に入り、さらにネット上にいくらでも交換手順を写真で説明してくれるサイトがあるのでそこまで敷居は高く無い。

で、早速バッテリを取り寄せて交換してみた。参考サイトは以下など。

1年以上使用した「Nexus 5」のバッテリーを自分で交換してみました

以下は元から入っていたバッテリ。

以下が買ったバッテリ。見た目が全然違うのが気になりますが、書いているスペックは一応同じでLGのロゴも記載されています。信ぴょう性は謎ですが。

バッテリ交換の結果

Amazonに出品している業者はいくつかあって、どれもこれも純正品を銘打っているが実際ははずれ品が多々あるとのこと。メーカーが修理のために在庫を持っておくようなパーツが潤沢に流通していると言うのはちょっと怪しい気がする。Amazonでの評価もきっぱり二分しており、「粗悪なコピー品」か「純正品もしくは優良な互換品」を手にするかがそのまま評価の違いに表れているようだ。

まぁ2000円程度のものなので買ってみた。

交換はそこまで難しくは無いが…。電源を入れてみる。電源が入らない。マジか…。

USBケーブルを差すと赤LEDが8回点滅を繰り返すという状態になった。バッテリが完全に空になった場合にこうなるらしいが、6時間ほど充電しても改善しない。バッテリを触ってみるが冷たいまま。どうもそもそも充電されていないようだ。うーむ。

ルート取得とバッテリ状態のリセット

もしかしたら、残っているバッテリのキャリブレーションデータが悪さしているのでは?と思い、これをリセットしてみることに。

先に述べたように、キャリブレーションデータは/data/batterystatus.binに存在し、リセットするには単純にこいつを消せば良いようだ。とりあえずNexus 5を動かすために交換したバッテリを元に戻す。

/dataディレクトリ以下の操作にはroot権限が必要なのでrootも取る。ちなみに個人的には「root化」という言葉は大嫌いだ。rootが何なのか分かってない感が丸出しだ。

まあともかく、以下ツールを使う。

Nexus 5 CF-Auto-Root

まず、上記ファイルを落とします。中を開くとWindows用バッチファイルとLinux用シェルスクリプトが入っています。今回はLinuxで作業するのでシェルスクリプトの方を使います。

実行権限を与えて起動すると「データが全部消えますけど良いですか?」の文字。ええっ、何で?と思い一旦キャンセル。シェルスクリプトの中身を見ると、fastboot oem unlockを実行してから同封イメージファイルから起動するような仕組みになってるっぽい。

oem unlockするとデータが初期化されるので、これの事を言っているのでしょう。今回はすでにアンロック済みなのでこの手順は不要。その後のクラック用ツールを起動するためのイメージのブートだけ実行する。

    $ fastboot boot image/CF-Auto-Root-hammerhead-hammerhead-nexus5.img

すると、スマホ内部のストレージ(emmc)じゃなくて外部で指定したイメージからブートが始まる。すごい仕組みだねー。

で、こいつはまずAndroidのベースシステムを起動し(たぶん)、exploitを走らせます。exploitというのは脆弱性を突いて管理者(root)権限をゲットしちゃうクラックツールで、たいていメモリをゴリゴリいじるパッと見では何も理解できないコードになっていまして、こういうプログラムを書ける人というのはソフトのみならずハード寄りの知識も多数持っている必要があり、簡単に言えば変態(褒め言葉)ですね。

root権限で動くシェルをゲットできたら次からいつでもrootに昇格できるようにするためのツールを管理者権限を保有しているうちにインストールします。これがSuperSUとかそういうアプリです。Linuxで言えばアプリ単位でsudoのような動きをする感じでしょうか。

rootを取れるようになったら、/data/batterystatus.binを消します。

その後、再び購入したバッテリに交換して充電再開します。さあどうか?…変化なしでした。

いや、想像はついてたんですよね。だってブートしていない状態でemmcの中にあるバッテリーステータスを読み取って何かしているなんて、そんなわけないからね…。たぶんハード的に起動に必要だと見なせる電圧までバッテリ電圧が上がらなかったのでしょう。ダメバッテリーだから。うん、なんか純正品よりもちょっと軽い気がしたからな…。

ちなみに、この赤LEDの点滅というのは「red light of death」というこれも良く知られた故障パターンみたいですね。

いま思えばテスタで電圧測ったりキッチンスケールで重さを測ったりすれば何か分かったのかもしれないけど、腹立ったのですぐに返金対応を依頼して返送してしまいました。

純正バッテリへの交換

ではもう当たりのバッテリが届くまでAmazonガチャを続けるしかないのか…。いや、まだ方法はあります。DIYerにとっては何とも心地よい調べ、「ニコイチ」です。冒頭で述べたとおり、私の家にはemmcが死んだ嫁さんのNexus 5があるではありませんか!Google Playストアから購入した血統書付きの完全純正品です。2年使ったお古のバッテリではありますが、現状よりはマシになるでしょう。

早速ばらして組み替えてみると…。あれ?改善しない。起動はするものの高負荷時に再起動してしまいます。

しかし、2か月くらい放置していたバッテリなので数回充電すればマシになるだろうと判断、何度か充電していると再起動しなくなりました!やったね!

電源ボタンも何故か直った

電源ボタンのチャタリング?はしばらく電池交換後も現象が発生し続けたが、電源ボタン下方を優しく押すと正常動作することを発見、その後はしばらくその方法にて電源ボタンを押していたらいつの間にか普通に押しても現象が発生しなくなった。

当初予想していた、「電圧が不安定になり、スイッチを押したときの電圧変化を正常に検知できてない」というのが当たったのかもしれない。しかし、そんなにギリギリな設計余裕にしておくかなぁ?というのは気になるが。まあ、タクトスイッチの制御ICが電圧不足で不安定になってたとかいうこともあったのかも。

背面カバーはガバガバ

背面カバーのツメが緩くなったのか、両面テープを張りなおしていないからか、たぶんその両方が原因だと思いますが背面カバーはもはやツメを差し込んで外せるほどガバガバです。NFCやQi給電に影響あるわけではありませんが、ちょっと気になります。何度も開け閉めしてたからでしょう。まあ仕方ないですね。

バッテリ交換設計

今回の件にあたり、日本のキャリアが携帯電話の仕様を決めるときに「バッテリ交換可能なようにしておくこと」というのを盛り込んだ点に限って言えば、これは一理あると思いました。最近のスマホだとキャリアから購入しても電池交換が出来ないものもあるみたいですが。

事故や初期不良を除いて単純にパーツそれぞれの寿命を考えれば、一番最初にガタがくるのはバッテリでしょう。今回、ネットで色々と調べましたが2年過ぎたころに突然やってくる再起動ループのほとんどの原因はバッテリではないかという気がしてきます。というのも、ほとんどが同じ症状だからだ(起動途中での再度リブート、電源をカチカチと押すと正常起動する、高い負荷がかかったときに再起動する、などの記述が随所のサイトで見られる)。

今回、買い替えも検討しましたが、自分ははNexus 5の性能で十分満足しています。カメラは記録用途でしか使わないし、ストレージは32GBあれば十分だし、CPU速度も特に不足を感じるシーンは無い。解像度はFullHDで満足しているし、家電量販店などで廉価機種を確認する限りはHDサイズでも特に不満は無い。唯一の不満は電池の持ちであったが、これは最新機種でも似たり寄ったり。

スマホの進化も最近は頭打ちになっているように思う。ゲーム等の重いアプリをバリバリ走らせるような使い方でない、SNSやブラウジングやメールをする程度の使い方がメインな人にとっては故障以外に買い替えの動機はかなり小さいのでは。

であれば、メーカーや経済的にはよろしくないのだろうけどバッテリを容易に交換できるようにしておいて気に入ったスマホを長く使うと言うのも一つの手ではと思った次第。調べてみるとASUS ZenFoneがバッテリ交換できるみたいだ。

あとは、なんかもうスマートデバイス市場自体がもう伸びに限界が来ているような感も感じる。スマートウォッチもそこまで売れているように思えない。今後、家電関係ではVRが伸びてきそうな感があるが、何のプラットフォーム(据え置きゲーム機なのか、テレビなのか、PCなのか、スマホなのか、スティックPCみたいなデバイスなのか)で普及するのかが見えてこない。また、コンテンツが無いと普及も無いだろうし、まだ流行るには時間がかかりそうな気がする。等々を思った次第。