2011年4月30日土曜日

[HOWTO] Nexus S 2.3.4(GRJ22) Update from custom kernel etc.

Nexus Sの2.3.4(GRJ22)へのアップデートが先日公開されました。OTAがきた人もいるかとおもいますが、custom kernelやBLNでliblightsを変更している人は一旦GRI40のノーマルな状態に戻す必要があります。

前提:
1.custom kernel導入済み(creams kernel 1.0.3w)
2.BLNを使うためliblights.soを変更済み
3.bcm4329.koもkernelに合わせて変更済み
4.stock ROM (CMとかじゃないです)

のような状況なので、これらを一旦戻してから、OTAを待つか、下記URLからダウンロードしたzipを当てます。今回はOTAを待たないで、アップデートしてみます。Full Wipeは嫌なので、変更部分をもとに戻して、アップデートできるかやってみます。
Nexus S update package from GRI40 to GRJ22

http://android.clients.google.com/packages/ota/google_crespo/a14a2dd09749.signed-soju-GRJ22-from-GRI40.a14a2dd0.zip
まず、上記のURLからアップデートパッケージをダウンロードして中身を確認します。patchディレクトリの下の
patch/boot.img.p
patch/system/modules/bcm4329.ko.p
があることから、boot.imgとWIFIドライバは戻す必要があります。
patch/system/lib/hw/lights.s5pc110.so.p
はないので、BLNで変更したライブラリはそのままでもよさそうです。というわけで、kernelとWIFIドライバをもとに戻してアップデートすることにします。まずWIFIドライバを戻してboot.imgの順番で行います。
adb remount
adb push bcm4329.ko /system/modules/
adb reboot bootloader
fastboot flash boot boot233.img
バックアップねーよ、という人は下記のURLからはパッチじゃない、フルにアップデートできるファイルがありますので、必要なファイルをそこから取り出すのがいいでしょう。
http://android.clients.google.com/packages/ota/google_crespo/f182cf141e6a.signed-soju-ota-102588.f182cf14.zip
起動してきたら、WIFIが認識されているのを確認して、先ほどダウンロードしてGRJ22へのアップデータを適用します。まずはダウンドードしたアップデートファイルを/sdcardにpushしておきます。
adb push a14a2dd09749.signed-soju-GRJ22-from-GRI40.a14a2dd0.zip /sdcard/
ここまではrootが保持されていると思いますので、ROM Managerから、もしくは、clockworkmodをrecoveryに適用してリカバリモードへ移行します。
adb reboot recovery
リカバリメニューの install zip from sdcard を選択して choose zip from sdcard で上記のzipをInstallします。適用が完了したら。rebootしますが、ここでchecksumエラーとかエラーがでた人は今回のパッチが変更するファイルをGRI40のものに戻す必要がありますので、エラーメッセージはちゃんと読みましょうw。

うまくいったら rebootを選択してシステムを起動します。設定→端末情報でGRJ22とAndroid 2.3.4を確認したらアップデート完了です。

次はre-rootの手順。これは前もやったと思いますが。su-2.3.6.1-ef-signed.zipを適用したらOKです。適用するにはclockwork等が必要です(この時点ではrootがないので)ので、まずrecoveryをclockworkに変更します。clockworkはROM Managerを入れている人であればdownloadディレクトリにあるはずですので、それを使いましょう。一旦PC等の母艦にadb pullで取り出しておきます。まずは、su-2.3.6.1-ef-signed.zipをsdcardへpushします。
adb push su-2.3.6.1-ef-signed.zip /sdcard/
adb pull /sdcard/clockworkmod/download/koush.tandtgaming.com/recoveries/recovery-clockwork-3.0.0.5-crespo.img .
adb reboot bootloader
fastboot flash recovery recovery-clockwork-3.0.0.5-crespo.img

その後、fastbootメニューからrecoveryを選択してclockworkの画面に入ります。

mount メニューから
/system/
/data/
をマウントして
install zip from sdcard で su-2.3.6.1-sf-signed.zipを適用してrebootします。

起動したらadbからrootになれるか確認します。

adb shell
su
めでたくrootになれればOKです。
次回はGRJ22でのcustom kernelでも書こうかとおもいます。

以上、ためす場合は自己責任でよろしく!

2011年4月16日土曜日

[APP] がんばれ東京電力! リリース

自分のblogに書くのわすれてましたw。

震災直後に東京電力の電力供給状況をAPIにしてくださった方がいます。で、このAPIをつかってAndroid用のWidgetを作成してみました。機能は非常にシンプルに、

  1. データの更新日時
  2. 現在の消費電力(万Kw)
  3. 最大供給能力(万kw)
  4. パーセンテージ
  5. 文字の表示色をレベルにより変化(やばい時は赤くなります、98%以上)

のみを表示するものです、15分間隔で自動的にデータを更新します。(APIをの更新頻度は1時間に1回だそうです)こういうのは思い立ったらすぐに実装して公開、というのができないとなかなかモチベーションが上がりませんね。Androidはその点、つくってから公開までの時間が非常に短くてすみますので、タイムリーなアプリが多くでてくるのではないですかねぇ。

Androidの開発環境や、アプリマーケット、アプリの質など、僕はiOSとの差をそれほど感じません。opensourceによる自由度やjavaによる実装のしやすさ(反論はあると思いますけど)でAndroidはリードしていると感じています。端末のクオリティや、OSの洗練度もかなり高まってきていて、2.3.3ではかなりの線まできていますね。

ただ、根本的なアーキテクチャの違いによりiOSに比べて?な点もありますが、、そもそも一社独占のような市場はつまらないでしょうし、WindowsPhone7にも頑張ってもらってwもっとカオスな状況になるといいとおもいますねぇ。以下、スクリーンショット、setcpuの下が「がんばれ東京電力!」です。

これからも電力の安定供給と安全性の確保に、東京電力には頑張ってほしいです、私の趣味は電力がないと意味のないものばかりです。がんばれ東京電力!


[HOWTO] Nexus S BLN (BackLight Notification) support kernel build.

最近Nexus Sいじるところがなくなってきて、なかなか記事も更新できなくなってますが、BLNあたりをやってみようかと思い書いてます。BLNって何?という人のために能書きも少し。。

最近のAndroid端末にはLEDの表示が無い物が多くなってきています。例えばDroid X等にはディスプレイの上部にLEDが仕込まれており、GMailの新規や、バッテリレベルの低下等を色や点滅で教えてくれます。Galaxy SやNexus SにはこのLEDが存在しないため、メールの通知音やバイブレーションに気がつかないと、その存在になかなか気が付きません。

このため、Galaxy S等にはカスタムカーネルとライブラリ、アプリの組み合わせでこれを実現する方法が編み出されてきました。Galaxy SやNexus Sのtouchkey部分を背面から照らしているLED?の点灯と制御して同じような効果を狙ったものです。まぁ、custom kernelいれればそれでOKなんでしょうけど、自作のkernelに取り込んでみたい人のために。

まず、ソース見たいという人は、下記のgithubを参考にしましょう。まぁ、これがすべてです。
https://github.com/neldar/backlightnotification
私がとった方法はちょっとトリッキーですが、NetarchyさんのNexus S用最新kernelからBLN部分をpatchとして取り出し、自分のkernelに適用する方法です。NetarchyさんのgithubからNexus S用kernelをダウンロードします。最新はBLN対応です。
git clone https://github.com/netarchy/nexus-s.git
cd nexus-s
git format-patch remotes/origin/android-samsung-2.6.35
format-patchでオリジナルとの差分を全部patchで出力させます。そのなかの
0121-initial-bln-support-v4.patch
を自分のkernelに適用します。gitで適用するとversionが進みますので、このkernelを使う場合にはbcm4329.ko等のモジュールも更新する必要があります。で、patch当て。一回configもcleanしてやり直してます。
git am ../bln/nexus-s/0121-initial-bln-support-v4.patch
make distclean ARCH=arm
make herring_defconfig ARCH=arm
make menuconfig ARCH=arm
(このへんでBFQとか、TUNとかenableに)
make -j2 ARCH=arm CROSS_COMPILE=/home/somewhere/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
コンパイルが問題なく終了したら、zImageをいつもの方法(過去記事読んでね)でboot.imgに仕立て上げます。試しにbootしてみます。
mkbootimg --cmdline 'console=ttyFIQ0 no_console_suspend' --kernel zImage --base 0x30000000 --pagesize 4096 --ramdisk new.ramdisk.image.gz -o boot233bln.img

adb reboot bootloader
fastboot boot boot233bln.img
問題なく起動すれば、おそらくBLN対応のkernelになってます。確認するにはAndroid MarketからBLNを有効にするアプリをダウンロードして試しましょう。BLN control-FreeというGalaxy S用のアプリですがこれでOKです。起動するとkernelはBLN対応だけどliblightsがダメよと言われますので、次にliblightsを入れ替えます。下記のgithubをcloneするとバイナリが落ちてきますのでそれを使えばOKです。
https://github.com/neldar/backlightnotification.git

liblight_binaryの中の

lights.PACKAGENAME.so

を

lights.s5pc110.so

にリネームして/system/lib/hwにpushします。bcm4329などもこのさいいれておきます。

adb remount (systemを書き込み可能でりマウント)
adb push lights.s5pc110.so /system/lib/hw/
adb push bcm4329.ko /system/modules/

最後にkernelを焼きこんで完了です。
adb reboot bootloader
fastboot flash boot boot233bln.img
fastboot reboot
起動してきたら、先ほどのBLN control-Freeを起動してActive BLNを選んでいろいろできます。Pro版(有料)じゃないと、いろいろできないんですけど、、せこいなぁw。

あとは、アプリの設定をします。LEDでの通知のできるアプリ、HandcentSMSとか、K9とかも普通にBLNで通知できます。点滅とかそのあたり自分でアプリつくってみるかなぁ。どうせsysfsだし。

以上。

2011年4月10日日曜日

今日は花見にいってきました。去年は寒くて桜も今ひとつだったような気がしますが、今日のこの天気でひさびさに良い桜が見れました。写真は、砧公園の桜。それにしても凄い人出でした。自粛とか?そういうものは一切感じませんでしたねぇ。。来年もいい桜がみたいものです。
EPSON R-D1 Biogon T* 28mm/F2.8

2011年4月2日土曜日

Nexus S文鎮化か?から、Optimus Padへ

仕事でのデバッグ用としても使っていると、たまに再起動するハメになったり。けっこう荒くあつかっていますが、まぁハード的に負荷をかけてるわけではないので大丈夫だろうと思っていました。昨日、起動はするものの、1,2分で画面が、タスクバーを残してブラックアウトしてしまう状況に見舞われました。

DDMSを接続してログを丹念にみていると、どうやら、メモリ不足でタスクがどんどんKILLされていきます。しまいにはWindowManagerが死んで、画面がブラックアウトしてしまうようでした。一瞬「メモリが死んだか?」と思いましたが、/proc/meminfoなどやfree等で確かめていると、認識しているメモリは問題無いよう。。ソフト的な不具合だろうと思い、clockworkで直近のバックアップに戻してみることに。

結果は同じ。

GRI40の上書き用OTAファイル(パッチじゃなくて、こういうのもあるんですね)を当ててみたりと、いろいろやるものの効果なし。最後には、ストックROMの一番古いものにもどして、FullWipeしてもダメでした。何がメモリを消費しているのかわからない状況で、途方に暮れたのもつかの間。標準的な手順で初期化してみることに。

設定ー>プイライバシーー>データの初期化

で、仮想SD領域も全部初期化してみたところ、なんとか復旧です。あとはclockworkから直近のバックアップにもどしてみて、問題ないところを確認して、なんとか元通りに。遊びの選択肢がなくなるのかとおもったら、かなり凹んだ1,2時間でしたw。

今日は朝から、ちかくのカフェでブランチしたあとに、DoCoMoショップでOptimus Padを触ってきました。3.0いいんだけど、筐体の重量はちょっと重いかなと。。iPad2はどの程度軽いんですかねぇ。7inch程度で、3.0、重さはGalaxy Tab程度ってのがいいかなぁ。ちょっと様子見です。

それはそうと、来週あたり桜がきれいそうなので、花見でもやりたいですなぁ。

EPSON R-D1 Noctilux 50mm/F.10