2011年12月19日月曜日

ゼンハイザー Zennheiser HD-598 レビュー

Recon 3Dの音を活かすために、新しいヘッドフォンに手を出してしまいましたw。Steelの3Hもよかったんですが、やっぱり耳が痛くなるのと、密閉のため外の音が聞こえないため、急な来客とかにも気が付かなかったりします。そんなわけで、オープンエアのタイプが欲しいかなとおもっていたのですが、オープンエアといえばゼンハイザーですね。HD-650は王道ですが、オーディオ用に買うわけじゃないので、いろいろレビューを見て比較検討した結果、PC・XBOX等でゲーム用とするにはHD-598が最適なのじゃないかと。。

http://www.sennheiser.co.jp/sen.user.ItemDetail/id/274.html




で、SoundHouseさんで、ぽちっとしてみました。安かったです。それから、Steelの3Hはヘッドセットなのでマイクが内蔵でしたが、HD-598は一応オーディオ用なので、そんなものはついていません。そこで、SONYのコンデンサーマイクが安価にでていたのでそれを併用してみることにしました。このマイクは、据え置き型なので、机において使うのですが、かなり感度がよく、口元にマイクがあるのとあまり変わりません。(口元にマイクがあるのにくらべれば、少し音質はおちるようですが)。

SONY PC60 ECM-PC60

さて、Recon 3Dに接続しての音出しです。いつもあそんでる、Gearsでテストしてみましたw。Quickではじめて、マップはHotelでしたが、しょっぱなから音の広がりがすごいです。3Hだとピンポイントに音が聞こえる感じでしたが、HD-598だと、空間の中の音源の位置がわかるかのようです。たとえば、しょっぱなにブームを確保するのに向かって、カバーした状態で敵と向き合っているときに、階段上のグレ側にいるやつの気配(足音かな?)等が聞こえます。より音源に対しての距離に敏感になった感じがします。それから、オープンエアのため、外の音もけっこう普通に聞こえます。急な来客や宅急便の配達もこれで安心です。

音楽はきいてないので、まったく評価できませんが、空気感や定位がすごくよいので、おそらく映画でも音楽でもオールマイティなのではないでしょうか。音のバランス的には、高域から低域までかなりバランス良い感じです(はじめは少し固い印象でしたが。。)。エージングもかなり効果があるようで、いぜんより硬さがとれて、より空気感が出るような印象です。

ちなみに、SONYのモニターヘッドフォンである900STと比較してみましたが、空間の表現ではHD-598が圧勝です。900STではひとつひとつの音が立つのですが、空気感に乏しく、音源までの微妙な距離感を表現できていません。

あと、装着感ですが、大きめの頭の私でも、圧迫をほとんど感じないくらいに自然にフィットします。圧迫を感じないからといってずれるわけでもなく。フィット感の面でも、かなりおすすめですね。私はGearsを6時間ほどぶっつづけでプレイしてみましたが、耳が痛くなったり、頭がいたくなったりということは全くなく、非常に快適に装着していられました。

というわけで、PC/XBOXなどでFPS/TPSをプレイする人にはかなりおすすめのヘッドフォンです。とはいえ、HD-650は聞いたことがないので、これより良かったらどうしようという感じですがw。ちまたのレビューを読む限りと、自分の体験において、HD-598を選択するので間違い無いと思います。

#あ、他のゲームやってないので、CODとかの評価はできませんw


画像は後日で

2011年11月14日月曜日

SoundBlaster Recon 3D レビュー

Sharkoonのx-tatic digitalを使ってしばらくたちましたが、どうにもヘッドセット部分の重さが耐えられなくなってきました。軽いヘッドセットでできればいいのだけど、x-taticは専用ヘッドフォンしか付けられないため、物色開始w!

いろいろ条件はありますが、

1.サラウンド対応で、音の方向などに敏感に対応できるもの
2.PCでSkypeしながらxbox360からの光デジタル入力の音をミックスして聞けること(重要)
3.いろんなヘッドセットをつかいたいので、バーチャルサラウンドでOK

こんなところですかね。で、いろいろ検索してみたところ。ぴったりきそうなのは

Sound Blaster Recon 3D


のみってことに。x-tatic digitalつかってみてわかったんですけど、結局リアルサラウンド系だと、ヘッドフォンの重量増は避けがたく、そのせいでいろいろ弊害もあると思いました。それに、リアルサラウンドって、どの程度リアル?なのか微妙で、微妙な空間の広がりとかもほとんど感じられず。これならふつうの2chでいいかもと思ったりしたのです。

で、さっそく注文ですよ。ヨドバシで在庫ありだったんで、速攻。ヘッドセットは、軽そうなんでSteelSeries 3H with Volumeを選んで見ました。

さて、接続しての感想ですが。

1.音がいい(x-tatic digitalにくらべて)。THXは伊達じゃないのか?!
2.専用ドライバでいろいろ調整ができる。ボイスチェンジャーとかもあるw。
3.空間の広がりが断然いい!
4.好きなヘッドフォン使える。
5.接続が簡単、USBをPCに刺して、光をxbox360に入れればOK。
6.電源がUSBで取れる。

など、はじめからこっちにしとけばよかったと、少し後悔。。。

ポイントは、空間のなかの音源の位置情報がかなり正確にわかることで、Gearsなんかだと、後ろから来るとか、左の部屋の中でドンパチやってるとか。音源の移動などがかなり正確にわかります。これにくらべたら、x-tatic digitalは、4個もスピーカーはいってて、全然そこまでわかりませんでしたね。まぁ、もしかしたら調整が悪かっただけなのかもしれないですけど、x-taticは調整も面倒です。Recon 3Dは専用アプリから、いろんな調整が柔軟にできます。

これは映画とか見てもかなりいいんじゃないですかね?そんな気がします。

ちなみに、SteelSeries 3Hは、可もなく不可もなくといったところで、確かに軽いのですが、少し締め付けがあって、多少耳がいたくなります。このへんは、使い込んで少し良くなるかもしれないですね。少し様子をみてみます。小さくおりたためるので、持ち運びには便利かも。

で、まとめとしては、ヘッドフォンを使う場合、リアルよりバーチャルのほうが音源に対する方向感覚等は優れているのかも?という感じで、このへんはすべてのプロダクトを試したわけじゃないので、一概にはくくれませんが、自分はそう感じています。

というわけで、Sound Blaster Recon 3DはFPS/TPSのユーザで、Skypeをチャットに使いつつ、xboxなどのサラウンドを同時に聞きたいというユーザ、なるべくシンプルに扱いたいと、考える人にはベストなんじゃないでしょうか?

#写真は後日

2011年10月6日木曜日

さよなら Steve Jobs

Steve Jobs apple前CEOが死去されたようです。ご冥福をお祈りいたします。
自分が今の業界にいるのも、この場所にいられるのも、中学生のときにApple 2 J-Plusをみて、さわって、絶対手に入れてやると誓ったからです。結局は手に入れられませんでしたが、Appleの創りだす美しいコンピュータにはいつも魅了されてきました。これからもそういう会社であって欲しいですね。

2011年10月4日火曜日

Sharkoon X-Tatic Digital リアルサラウンドヘッドフォン買った。

xbox360北米本体も手に入れて、気合はいってきたので、今まできになっていた音質面の改善にとりくんでみました。部屋には5.1chなサラウンドシステムがあるんですけど、FPS/TPSに集中するには24インチくらいのディスプレイがいいと思います。机周辺に同じような環境を作るのもなんなので、最近話題になってきている、リアルサラウンド系のヘッドフォンを購入してみました。探した条件としては

1.xboxでゲーム中に、Skeypeでフレとチャットするためマイク付き(音のミックス機能)
2.5.1chがストレートデコードできること
3.ディレイの調整ができればなおよし

あたりですと、X-tatic digitalしかよさそうなのが見当たりませんでした。で、使ってみた感じは、ケーブルが多くてセットアップは面倒で、説明書もそんなに親切じゃないんですが、まようようなところもありませんでした。チャチャっと接続完了です。肝心の音質は、よくねりこまれた2ch用のヘッドフォンにはかなわない感じですけど、SubWooferを持ち上げていくと良い感じになってきます。まぁ、ゲーム用と割りきって使うのがいいと思われます。

PCとの接続はUSBで普通にCMEDIAのサウンドデバイスとして認識されますので、特別にドライバとかは必要ありませんでした。で、PC側はSkypeのサウンドデバイスを変更して完了です。xbox側とは光デジタルのケーブルで接続したら完了です。じつは、まだディレイの設定とかはしてないのですが、そのあたりを調整すればもっとよくなるかもしれませんね。




細かい点ですが。

1.xboxから入力される音をリモコンでミュートできる
2.PCからの音(Skype)はアナログボリュームで調節できる
3.マイクのON/OFFができる。
4.アナログのマルチチャンネルoutputがある。(デコーダ単体でも使える)

このあたりはかゆいところに手が届いている感じがしました。というわけで、ゲーム音と、skypeの音を普通にmixして遊べる環境が手に入りましたとさ。

#xbox liveのチャットって音悪いですよねぇ。だからいつもはSkypeです。

気になって点としては

セルフレームの太めのメガネをしている人は、こめかみ辺りに圧迫を感じるかもしれません、自分は細めのフレームのメガネを使ってますが、わずかにこめかみあたりに圧迫を感じます。買って初日に5時間ほどプレイしましたが、イヤーパッドの締め付け感はあるものの、痛くてたまらなくなるようではありませんでした。頭の形と耳の形次第ですかねー。


ああ、そうだ、肝心のGOW3をプレイした感想ですが、ディレイの調整もまだなんで、正確じゃないかもしれないですが、足音などの音には敏感に反応できるようになりましたね。「うしろうしろ!」とか、そいういのわかるようになります。ただ、定位にかんしては、さっくりこのあたり、と言った感じなので、スピーカーを6本並べるような環境とは比較にならないですね。でも、格段に音の情報量はあがりました。

#単にそれなりのヘッドフォンつかえばいいんじゃ?という気もしますが。。
#手持ちのモニターヘッドフォン(SONY)との比較も今後やってみたいですね。


今日はディレイいじってみようっと。


画像はのちほどUP!

LEICA M8 Summicron 35mm F2.0 @F2.0


XBOX360 Gears of War3 Limited Edition

北米のAmazonに注文していた、xbox360 GOW3バージョンがとどきました。ゴア表現が無いと寂しいゲームなので、そのあたりを体験したく、購入。本体はレッドとブラックで塗り分けられていて、付属しているコントローラーも同様のグラフィックが適用されています。それから、本体の起動音やトレイを開けるときの音等も特別に付加されています。Gearsのゲーム中で使われているサウンドですね。

なんでここまでするかっていうと、今回のGOW3は表現規制をソフトだけでやっていないため、それぞれのリージョンに適した本体でのみ表現規制が制御されるしくみになっているからです。やっぱり、HSでパコーンっといきたいっすよねw?表現規制はおそらく日本が一番厳しいようで、過激表現は少し控えめです(とはいえグロいっすよ)。

ちなみに表現規制を解除するには、北米リージョンのxbox360かアジア版のxbox360であればよいようです。アジア版の話は後からきいたので、ちょっと失敗したかとおもいましたが、どうせGOWしかやらないとおもうので、よしとしましょう。(アジア版はら日本のゲームも動くとか?、北米版ではほとんどのソフトはリージョン違いで起動しないです)

それから、ソフトも世界共通というか、日本語版を北米版本体に挿入してもちゃんと表現規制を解除できます。そのかわり、言語とロケーションをEnglish / United-States あたりにしないとだめでした。つまり、本体プラスソフトでの規制ということですね、いままでで一番厳しい規制です。グロ系はやっぱり粛清されちゃうんでしょうかねぇ。。

日本版XBOXから北米版XBOXへの移行ですが、特に特別なことは必要ないです、北米版の本体に、日本版でつかっていたゲーマータグを復活させてやればOKです。一応ゲームセーブデータは移動という形で、GOW1/GOW2/GOW3のものを移動させてみました。ちなみに、この状態で、日本版を起動すると、「ゲーマータグを復元ないとLiveに接続できないよ」といわれます。アカウントが、本体に紐づいているわけですね。

思っていたよりも簡単に移行できたので、面倒かもと躊躇していたひとは、ぜひ北米版なり、アジア版(アジア版でのはなしは、噂できいただけなんで、はっきりしないですが。。)でプレイすることを考えてもいいんじゃないかなー。

ちなみに、昨今の円高の影響で、日本で約4万程度する、xbox360 GOW3 verは、米Amazonですと、$399でした。約3万程度ですかね。日本へのExpress Shipオプションをつけても$410くらいでしたので、結構安く感じますね。特に限定版の内容が、350GBHDD搭載、コントローラーSEx2、ヘッドセット、ゲームソフト、特別ダウンロードコード、etcという内容ですから。お買い得です。GOWしか興味ねーってひとにはAmazonおすすめしときます。

#Amazon USAは特別版みたいなものは、世界発送してくれるんですねー。
#通常版は「その地域にはおくれません」みたいになってダメでした。
#初期型のコントローラ使ってる人はSE版おすすめです。武器チェンジミスらなくなりますよ。

画像はのちほどUP!


LEICA M8 Summicron 35mm F2.0 @F2.0




2011年9月8日木曜日

Node.js + cluster

Node.js関連でメモ。
process.on('uncaughtException', function (err) {
  sys.log('Caught exception: ' + err);
});
これないとダメ。でも、clusterが自動でworker追加してくれちゃったりして 気がつかなかった。。

2011年8月24日水曜日

[INFO] Galaxy S2 Update2ソースコード配布開始とUpdate2 kernelのビルド

自分的にはネタ切れですw。BLNもさらなる省電力追求しなくても現状でかなり実用的なので。。GT-I9100_OpenSource_Update2がopensource.samsungにリリースされています。早速c1_rev02_jpn_ntt_defconfigをdiffってみると。NFCのドライバはデフォルトではずされTUN/TAPがenableになってます。これは元の日本版に近いですね。あと気になるのは、CONFIG_FB_EARLYSUSPENDですかね。このあたりはバッテリに効いてくるところかもしれないですね。なにはともあれ、一旦素のUpdate2でビルドして動かしてみます。

4c4
< # Tue Jun 14 18:00:06 2011
---
> # Fri Mar 25 22:53:48 2011
302d301
< # CONFIG_S3C_DEV_I2C17_EMUL is not set
365d363
< CONFIG_DEV_THERMAL=y
377,379d374
< # CONFIG_MACH_C1_NA_SPR_REV02 is not set
< # CONFIG_MACH_C1_NA_SPR_REV05 is not set
< # CONFIG_MACH_C1_NA_SPR_EPIC2_REV00 is not set
383,384d3
< # CONFIG_TARGET_LOCALE_NA is not set
< # CONFIG_TARGET_LOCALE_NAATT is not set
425d417
< CONFIG_S5PV310_WATCHDOG_RESET=y
439,443d430
< # CPUFreq step up sequence selection: 2 step or 3 step
< #
< CONFIG_FREQ_STEP_UP_L2_L0=y
<
< #
497,501d483
< # Samsung Kernel Debug Features
< #
< # CONFIG_KERNEL_DEBUG_SEC is not set
<
< #
625c607
< CONFIG_FB_EARLYSUSPEND=y
---
> # CONFIG_FB_EARLYSUSPEND is not set
920c902
< # CONFIG_RFKILL_INPUT is not set
---
> CONFIG_RFKILL_INPUT=y
984d965
< # CONFIG_WIMAX_CMC is not set
987d967
< # CONFIG_USBHUB_USB3803 is not set
999c979
< # CONFIG_PN544 is not set
---
> CONFIG_PN544=y
1064c1044
< CONFIG_TUN=y
---
> # CONFIG_TUN is not set
1385c1365
< CONFIG_THERMAL=y
---
> # CONFIG_S5P_THERMAL is not set
2201,2206d2180
< # CONFIG_WESTBRIDGE is not set
< CONFIG_WESTBRIDGE_HAL_SELECTED=y
< # CONFIG_MACH_OMAP3_WESTBRIDGE_AST_PNAND_HAL is not set
< # CONFIG_MACH_OMAP3_WESTBRIDGE_AST_CRAM_HAL is not set
< CONFIG_MACH_C110_WESTBRIDGE_AST_PNAND_HAL=y
< # CONFIG_MACH_NO_WESTBRIDGE is not set
2215c2189,2193
< # CONFIG_SAMSUNG_PHONE_TTY is not set
---
>
> #
> # LinuStoreIII Flash Devices (FSR)
> #
> # CONFIG_RFS_FSR is not set
2288a2267,2275
>
> #
> # RFS Filesystem
> #
> # CONFIG_RFS_FS is not set
>
> #
> # RFS Core Filesystems
> #
2558c2545
< CONFIG_CRYPTO_SHA256=y
---
> # CONFIG_CRYPTO_SHA256 is not set

基本的には以前からの方法でやりますが、initramfsのドライバ類はちゃんと入れ替えを忘れないようにしましょう。一回ビルドして*.koをつくってから、initramfsにコピーし、その後もう一回makeしてzImageを作成します。ビルド方法等は以前のエントリをチェックしてみてください。

適当なディレクトリに展開。
unzip GT-I9100_OpenSource_Update2.zip
mkdir kernel
cd kernel
tar xvfz ../GT-I9100_Kernel.tar.gz
コンパイルの準備
make c1_rev02_jpn_ntt_defconfig
make menuconfig
- ここで、initramfsや、version番号等を設定します。

chmod 666 Makefile
vi Makefile
- CROSS_COMPILEの値を自分のcompilerインストールディレクトリへのパスに置き換えて

make -j2
いつものようにheimdallでzImageを書き込みます。
で、動かしてみると、まぁガンマはUpdate1と変わらないですね。自分の個体では暗すぎです。消費電力とかの評価はまだわからないですがちょこちょこ変わってるようなので、一気にコードのマージをします。自分のkernelの場合、
1.最低動作周波数200Mhz -> 100Mhzへの変更
2.CPUにかかる電圧の調整(850/900)
3.カスタムブートロゴw
4.BLN
で、以上なので楽っす。いじるファイルは下記のようなもの。
/drivers/video/samsung/ld9040.c
/drivers/video/samsung/s3cfb_ops.c
/drivers/input/keyboard/cypress/cypress-touchkey.c
/arch/arm/mach-s5pv310/cpufreq.c
ちなみに
CONFIG_TARGET_LOCALE_NA
CONFIG_TARGET_LOCALE_NAATT
このあたりが追加になってますのでBLNのソースはここいらをちゃんと対応した感じでマージしないとダメっすね。
なくても動きそうですが。

cypress-touchkey.cはmergeが終わってテストでき次第githubにupします。

Update:
https://github.com/creams/SGS2-BLN-cypress-touchkey

UPしました。branch はUpdate2です。

2011年8月20日土曜日

Leica M8 & Noctilux 50mm F1.0 E60 + UV/IR

M8手に入れました。1/8000でどこまで昼間に開けて撮れるのか?近いうちに旅行にも行くし、少し腕をみがかないとなぁ。ちなみにこれはR-D1にUV/IRフィルタつけて取ったもの。実は、M-Coder Kitも注文したので、6bitのfake codeで撮影するのが今から楽しみです。

しかし35mmのいいレンズほしいなぁ。やっぱりSummilux ASPHですかね?


EPSON R-D1 Biogon T* 28mm F2.8 @F2.8

トラスロッド調整

久々にギターの神が降りてきたみたいで、懐かしいROCKとか高中とかきいていたら、弾きたくなってきて壁からはずしてみると。。けっこう反ってます。順反りなんで、トラスロッドをちょっと締めやりました。はじめかなりスカスカで、ぜんぜん効かなかったんですが、まぁ、いい感じになりましたな。フロイドはチューニングが面倒なんで、この機会にオクターブとかもばっちり合わせておきました。ああ、爪切らないと弾けねー。

Leica M8 Noctilux 50mm F1.0 @F1.0


2011年8月7日日曜日

[HOWTO] Droid X Android 2.3.3 Gingerbread SBFで!

Droid Xは今年の初めからほとんど放置で、ちょっとCustomROM入れてblogネタ作ったくらいでしたが、なんと、普通に2.3.3(Gingerbread)のOTA来てたようです。SGS2ばかりさわってたので、勝手をわすれてまして、OTAであがんないなぁとなやんでましたが、面倒なのでSBFファイルで一気にあげちゃいます。
http://www.droidxforums.com/forum/droid-x-sbf/23638-linux-solution-your-windows-rsd-lite-problems.html#post267721
参考にしたのはDroidX Forumのこのスレ、All-in-oneのisoファイルを配っていて、これをCD-Rなどに焼きこんで、起動します。その後Droid Xを、vol-up + vol-down + power でbootloaderモードにします。2,3秒ホールドしてはなせばOKです。すんごいシンプルな画面がでたら完了。

ISOで起動したPCには1,2,3みたいなメニューがありますので、1を選んでFlash開始。しばらくまつと2.3.3になってます。簡単。


OTAがダメだったのはlogwrapperのhashがどうしても合わなかったせいで、Droid X Bootstrapperをuninstallして、/system/bin/logwrapper.binをリネームして復活させてもダメでした。で、面倒なんでSBFで一気ですw。

Quadrantは少しあがったかな?SGS2があまりにもスコアが高いので、このくらいのスコアだとダメだなーって思ってしまいますね。次はrootかな。いや、このまま放置かw。

2011年8月6日土曜日

Galaxy S2 docomo shopでいろいろ確認してきた

前回のエントリに書いたとおり、DS行って確認してみました。ついでにHDMI変換コネクタも注文w。品薄ですね。それはさておき。DSのGalaxy S2は

OMKEE

というバージョンでした。で、パネルタイプを確かめるためにTerminal Emulatorをこっそりインストールしてsysfsをのぞいてみると。。

OCTA : SM2 (A1 line)

!。この表記がsysfsから取れるってことは、Update1系のkernelでしょうか。それにしてもOMKEEってDS専用?

で、パネルの感触はというとA1 lineのほうがコントラストが明るめでガンマも下が持ち上がった感じで見やすい印象でした。これは標準状態での比較。白を表示してみると、A2 lineは白がちゃんと白い感じですが、A1 lineは若干黄がかったという感じでした。

ということは、カラーバランスは、パネルをみて決める必要がありますね。kernel職人さんたちは、その辺注意しないとですねw。

それにしても、どの程度これらのパネル違いで出荷されているのでしょうね。コントラストに不満があるような声はあまり聞かないので、もしかするとA1 lineが主流なのでしょうか。みなさんsysfsをcatしてみましょう。


adb shell
cat /sys/devices/platform/samsung-pd.2/s3cfb.0/spi_gpio.3/spi3.0/octa_lcdtype


2011年8月5日金曜日

[KERNEL] Galaxy S2 SC-02C KG5 アップデート後のgamma等

KG5のアップデートは自分で調べた限り
1.initramfsは同一と思われる(ドライバ除く)
2.framework-res.apkはちがうぽい
3.gammaはKF2のSC-02Cと近く、Samsungのopensourceから落とした初期のソースを
    ビルドしたものよりガンマ設定が暗めになる(本来のガンマ?)
4.設定メニューのスクロールがスムースになったかも?
5.ワンセグ終了時のシャープネス戻し
くらいですかね。はっきりいってこんなん刻まなくていいから、はやいとこ2.3.4出してよって感じでしょうか。

前回のエントリでも書いたとおり、純正KG5のkernelには/dev/tunが存在していましたので、そのようなconfigでビルドされていると思いますが、samsung opensourceのGT-I9100_OpenSource_Update1.zipにあるconfigでは、このあたりがdisableされています。
cat c1_rev02_jpn_ntt_defconfig
代わりにNFCがenableだったりと、Update1はなんとなくdocomoがビルドに使ってるのより全然古いような気がしちゃいます。
#気がするだけですよ。まぁ、なんというか、気持ち悪い?

とりあえずいままでの、作業を反映させたkernelをビルドしてみて、以前のエントリに書いた方法でそのまま問題なくビルドできましたので、手順等は過去のエントリを参照してください。そのままです。で、そのkernelを焼いたのですがガンマがちょっと馴染めない感じです。暗いところが非常に暗く、明るいところもピークが伸びてない。画面の明るさを自動設定にしている自分にはちょっと違和感あります。初期リリースのkernelビルドして改善して喜んだのもつかの間です。
#もしかしたら自動設定でつかっちゃだめなのか??

というわけで、ガンマを制御しているパネルドライバの部分をdiffしてみると、どうやらUpdate1では新しいパネルのサポートがはいっているようです。sysfsでわかるパネルタイプの読み出し部分も下記の用な感じです。以前はSM2とM2という2つだけでしたね。そこが、今回新たにSM2がSM2_A1とSM2_A2にわかれたようです。

drivers/video/samsung/ld9040.c
static ssize_t octa_lcdtype_show(struct device *dev, struct
device_attribute *attr, char *buf)
{
        char temp[15];
        switch (get_lcdtype) {
        case LCDTYPE_SM2_A1:
                sprintf(temp, "OCTA : SM2 (A1 line)\n");
                strcat(buf, temp);
                break;
        case LCDTYPE_M2:
                sprintf(temp, "OCTA : M2\n");
                strcat(buf, temp);
                break;
        case LCDTYPE_SM2_A2:
                sprintf(temp, "OCTA : SM2 (A2 line)\n");
                strcat(buf, temp);
                break;
        default:
                sprintf(temp, "error\n");
                strcat(buf, temp);
                dev_info(dev, "read octa lcd type failed. \n");
                break;
        }
        return strlen(buf);

}
自分のパネルタイプを確認してみます。
adb shell
cat /sys/devices/platform/samsung-pd.2/s3cfb.0/spi_gpio.3/spi3.0/octa_lcdtype
OCTA : SM2 (A2 line)
SM2のA2らしいですw。ということは参照しているガンマテーブルはgamma_sm2_a2*みたいですが、c1-panel.cのdiffをとってみたところ、初期リリースのSM2のガンマがSM2のA1と同一です。とりあえず、これを参照するように変更してみます。変更点としては、ガンマテーブルを保持しているc1_panelストラクチャのメンバを直接変更してもいいですけど、自分ははロジック側を変更してみました

drivers/video/samsung/ld9040.c
        if (get_lcdtype == LCDTYPE_M2) { /* M2 */
                if (lcd->gamma_mode)
                        gamma = pdata->gamma19_table[lcd->bl];
                else
                        gamma = pdata->gamma22_table[lcd->bl];
        } else if (get_lcdtype == LCDTYPE_SM2_A2) { /* SM2 A2 line */
#if 0 /* creams A2 -> A1 */
                if (lcd->gamma_mode)
                        gamma = pdata->gamma_sm2_a2_19_table[lcd->bl];
                else
                        gamma = pdata->gamma_sm2_a2_22_table[lcd->bl];
#else
                if (lcd->gamma_mode)
                        gamma = pdata->gamma_sm2_a1_19_table[lcd->bl];
                else
                        gamma = pdata->gamma_sm2_a1_22_table[lcd->bl];
#endif
        } else { /* SM2 A1 line*/
                if (lcd->gamma_mode)
                        gamma = pdata->gamma_sm2_a1_19_table[lcd->bl];
                else
                        gamma = pdata->gamma_sm2_a1_22_table[lcd->bl];
        }
そしてビルド。
make -j2
出来上がったzImageをいつものようにheimdallでSGS2へフラッシュします。すると。。おー!以前のような明るさです。黒つぶれもなく、白のピークも伸びてる感じ。自分は絶対このほうがいいと思うのですが、、DSにでもいって比べてきますかなー。バグとも思えないので、個人の感じ方の差なんでしょうけど。もしくは、パネルタイプがまちがってるか。いずれにせよ自分の好きな感じになったのでよしとしましょう。

2.3.4早くコイ!

Galaxy S2 画面Off時のCRTエフェクト

いつも忘れてしまうので、自分のためのエントリです。

ちなみにKG5のframework-res.apkはKF2とmd5が違ったので、念のため抜いてからそれを使ったほうがいいです。diffとったわけじゃないけどね。

apktool をダウンロード。

framework-res.apkを実機から抜く。

adb pull /system/framework/framework-res.apk

apktoolで展開。

apktool.bat d -f framework-res.apk
カレントにframework-resが作成される。

cd framework-res/res/values
bools.xmlをいじる


このあたりw
animateScreenLights = false
tether_dun_required = false


コンパイル
apktool.bat b -f framework-res

できたか確かめる
ls framework-res/build/resources.arsc

このリソースを既存のframework-res.apkの中身のものと置き換える

7z.exeをコマンドラインで、無圧縮モードを直接指定して実行する。

7z.exe u -mx=0 -tzip ./framework-res.apk ./framework-res/build/resources.arsc

実機にpushして再起動

adb remount
adb push framework-res.apk /system/framework/
adb reboot


以上。

KG5アップデート

KG5へのアップデートが本日配信されたので、早速アップデートしてみました。%TEMP%フォルダをチェックしてアップデータを抜くのも忘れてませんw。で、どんな感じかというと、まずガンマの設定は日本版の初期の設定という感じで、自分には我慢できない暗さです。黒つぶれというか、これは、個体差なんでしょうかねぇ。

というわけで、まずはrootですね。今回のアップデートはfactoryfs.imgを含むので、ほとんどの場合suとかは消えちゃいます。でもzImageがあるので、気が楽ですねw。早速KernelのUpdate1をsamsungのopensourceサイトからダウンロードしてビルドしてみます。その前にKiesのTEMPから抜き取ったzImageから、initramfsを取り出します。いつものようにchromarockさんのinitrampickerを使います。
initrampicker zImage ke5_initramfs.cpio
mkdir initramfs
cd initramfs
cpio -ivmd --no-absolute-filenemas < ../ke5_initramfs.cpio
ここでKF2のinitramfsとdiffをとってみたんですが、まったく同じでした。変化なしです。
GT-I9100_OpenSource_Update1.zip
をダウンロード完了したら展開して、kernelソースをさらに展開します。ここで初期リリースのkernelソースとconfigを比較してみました。ほぼ同じです。違いは
Update1:  NFCがenable(なんで?) TUNがdisable
Original:   TUNがenable
見たいな違いで、もしかしたらこれからちゃんとした日本向けのソースがでるのでしょうかね?比較したconfigは
c1_rev02_jpn_ntt_defconfig
です。まぁ、たいしたちがいじゃないので、NFCをdisableに、TUNをenableにしてビルド開始です。
#コンパイラへのパスとかも忘れずに。気になる人は以前のエントリを参照してください。
make c1_rev02_jpn_ntt_defconfig
make menuconfig (NFCをdisable, TUN/TAPをenableなど、、 )
make -j2
出来上がったzImageを早速焼いてみます。数十秒後ー>ん、、ガンマ同じかよ。。

次回は、既存ソースの適用(BLN,UV,bootLOGOなど)とgammaの調整としますかー。

2011年8月3日水曜日

[KERNEL] Galaxy S2 Backlight Notification (BLN) support kernel #2

見落としがあったので、改良版を作りました。いままでsysfsのnotificaion_ledはlights経由でのみ変更されるものだと、勝手に考えてましたが、BLN Control Appの動作を見ると全然違いますね、積極的にsysfsを操作してます。というわけで、いろんな条件でテストしてみたところ。BLN Appがlightsの足りないところを補っている感じでした。lightsは主にNotificationManagerからの要求で、各種ひかる系のデバイスの制御をやってますが、そのタイミングはシステム依存です。どのタイミングでLED通知が解除されるかはわかりません。BLN Control Appはこのへんの足りないところを積極的に制御してます。
#あー、なんでいままで気にしなかったんだろうorz...

さておき、以下のような方針で実装しなおしました。
1.端末がdeep sleep状態の時に通知を受けたら、一回だけwake_lock
2.以後、LEDのblinkか連続点灯かにかかわらず、wake_lockを保持。
3.BLN Control Appからの点灯終了イベント(sysfsへのアクセス)で
    wake_unlockしてregulatorを開放。
4.deep sleepに移行。
5.これらの繰り返し。
保険として、BLN Contorl Appからの通知が来なかった場合にresumeでwake_unlockといった感じです。3の部分がキモなんですが
普通アプリの挙動みてればわかるだろう>自分。。。

というわけで、wake_lock -> wake_unlockの区間を制御できるようになったので、いったんはこれでFIXでしょうね。あとはPowerManagement系に手を入れないとこれ以上の省電力化はのぞめないでしょう。

あと、BLN Control Appは最新で運用よろしく。ソースはいつものようにgithubにあげときました。試す人は試すでしょうw。

drivers/input/keyboard/cypress/cypress-touchkey.c
git clone git://github.com/creams/SGS2-BLN-cypress-touchkey.git
サンプルkernelバイナリ
git clone git://github.com/creams/SGS2-SC02C-BLN-Kernel.git

なんだかXDAとかにスレ立ってるし。battery rapeとか言われてるよw。

2011年7月30日土曜日

[HOWTO] Galaxy S2 SC-02C BLN を使うには

そもそもBLNって何だ?って人はこんなページ見ないかもしれないですが、BLNの導入についてです。BLNをつかうには、対応kernelと、対応lights.SC-02C.so、それと制御用のアプリが必要になります。はじめにkernelは自分でビルドするか、面倒であれば、

https://github.com/creams/SGS2-SC02C-BLN-Kernel
git clone git://github.com/creams/SGS2-SC02C-BLN-Kernel.git
このあたりから、対応kernelをダウンロードしてheimdallなどのツールで本体に焼きこみます。(このあたりは説明省略w)

その後lights.SC-02C.soを、

https://github.com/creams/SGS2-liblights-binary
git clone git://github.com/creams/SGS2-liblights-binary.git
からダウンロードして、名前をlights.SC-02C.soにリネームし本体に配置します。必ず現在のlightsはバックアップを取ること
adb remount
adb pull /system/lib/hw/lights.SC-02C.so .
adb push lights.SC-02C.so /system/lib/hw
adb reboot
リブートしたら準備OK。あとはMarketからBLN Appをダウンロードして、Enableにして、メールなど送ってみて試します。neldar氏に金もらってるわけじゃないけど、Pro版をお勧めしておきますw。

全部の端末で動作するかどうかはわかりませんので、動かなくても泣かない。
それでは自分のリスクで楽しみましょう!

Galaxy S2 SC-02C BLN バッテリ消費について

昨日UPしたBLN対応cypress-touchkey.cですが、Notify通知が無い場合には、基本的にはdeep sleepに入るのを妨げたりはしないようになっています。そのため、Notifyがなければ、バッテリ消費はBLNを搭載していないものと変わらないはずです。

1.端末がdeep sleepしているときにメールとかがくる
2.Notifyがliblights経由でBLNのsysfsに通知される
3.このタイミングでwake_lockしてtouchkeyデバイスの電源をON(ldo11,ldo18)
4.以後はwake_lockで、電源を確保

この状態は画面もOFFになってますし、見た目はsleep状態。それから、HOMEボタンなどで復帰させるタイミングでlare_resumeがシステムからコールされます。モディファイしたcypress-touchkey.cでは、lare_resumeのタイミングでwake_lockをunlockかけます。

という流れなので、LEDの通知に気がつかないで放置するとバッテリはdeep sleep時よりも減っていきます。まぁそもそもが、LEDが光ってたら確認しますよね。たぶん。問題は寝ているときとか、端末に触れられないときなんですが、このような状況にはBLN AppのProバージョンで細かく設定することである程度回避できると思います。(BLN AppはWidgetでBLNのon/offとかできます)

まぁ、使い方は人それぞれなんで、これじゃ使えねぇってこともあると思いますけど。

2011年7月29日金曜日

[KERNEL] Galaxy S2 Backlight Notification (BLN) support kernel #1

なんとか実用くらいまで持ってこれたかと思っていたら、某掲示板ですでに動作させちゃった方が現れましたね。githubにもソースを公開してくださっているので、早速参考にさせていただくことに。気になるひとはsakuramilkさんのgithubをwatchするといいかも。おそらく、neldar氏(BLN App作者さん)もforkしているakent氏のBLN for i9100をforkしてベースにされたのかと思います。akent氏のコードじゃ動かないんですけどね。。自分はcypress-touchkey.cのみいじる方向でいきたいと思います。やることはほぼ同じです。

さて、USB給電なしで動作させるためには、sleepモードに入ったSGS2のtouchkeyデバイスへの電力の供給を確保するのが問題になりますが、sakuramilkさんはwakelockでそれを行っています。wakelockはsuspend状態になるのを防ぐためのもので、連続した電力供給が必要な場合等に使いますが、その分バッテリを多く消費します。ですので使いどころを間違えるとすぐにバッテリが切れてしまうことになります。Androidではアプリもこのモードを実行することができるため行儀の悪いアプリを入れるとすぐにバッテリが切れたりということがよくあります。
adb shell
#cat /proc/wakelocks
で、現在wakelockを使う可能性のあるタスクの一覧が見えます。

本質的にはtouchkeyにだけ給電して動作させることができれば、一番省電力と思うのですが、ソースを眺めてみた感じだとPowerManagement系のコードに手を入れるのは、修正ポイントが多そうです。というわけで、あっちをいじって、こっちをいじってとやっていたわけですが、もう、wakelockでいいんじゃない?、sakuramilkさん正しいよ!、というわけでw。バッサリ今までのコードは捨ててwakelock使って書くとどうなるかやってみました。なるべく必要なときだけにwakelockする方針でやってみました。

結果的にはうまく動作するようになりました、とりあえず半日程度つかってみて、そんなにおかしな動きもしないのでしばらくはこれで、バッテリ消費等に着目して改善していきたいと思います。

ちなみに、テストしたアプリは
k9 (IMAP-IDLE)
SP-mode mail
です、基本的にはNotificationオブジェクトでFLAG_SHOW_LIGHTSかDEFAULT_LIGHTSを使う実装しているアプリは全部いけるはずです。自分のビルドしたliblightsではそのあたりをDDMSで見れるようにログにだして確認しました。

コードはgithubにあげときました、以前アップしたliblightsをあわせて使うと、Neldar氏のBLN Appで動作させることができます。ちなみにPro版をおすすめしておきます。寝ている時間は動作させないとか、そういった設定ができるので正しくつかえば、バッテリ消費を抑えられるでしょう。既存のcypress-toucheky.cをまるまる入れ替えてビルドするだけです

git clone git://github.com/creams/SGS2-BLN-cypress-touchkey.git
cp cypress-touchkey.c /somewhere/android/kernel/drivers/input/keyboard/cypress/
make -j2
出来上がったzImageをheimdallで焼きます。
cd /somewhere/android/kernel/arch/arm/boot
cp zImage  どっか
heimdall-frontend.exeが便利なのでそれを使ったほうがいいですね。winの人は。なおgithubに一緒にあげといた、kernelはサンプルです、ほぼノーマルですけど自分にはこれで十分。

git clone git://github.com/creams/SGS2-SC02C-BLN-Kernel.git

1.最低動作周波数を200MhzからUV (100Mhz 850mv/900mv)
2.オリジナルbootロゴw
3.BLN
4.secure=0
5.カメラの音を抑制
だけです。つか、SGS2はいじるとこがないですねぇ。Launcherとかで遊んでみるかなぁ。

というわけで、自己責任でよろしく。

2011年7月16日土曜日

Galaxy S2 BLN .. lights.SC02C.so とりあえずgithubへ

kernel側はまだまだ苦戦しておりますが。とりあえず現状のlights.cと、ビルドしたライブラリをgithubへあげときました。まぁ、なにもたいしたことしてないですが、BLN_testappでちゃんと認識されます。

binary
https://github.com/creams/SGS2-liblights-binary

source
https://github.com/creams/Galaxy-S2-liblights-for-BLN


kernelはPMまわりを中心に眺めてますが、これだ!という対応してみてもboot-loopしたりと、、やるからにはtouchkeyだけを生かして、電力消費を抑えたいですが、だめならPM切ってやってみるかなぁ。。。暑くて外に出る気にならないのでちょうどいいか。

2011年7月10日日曜日

[MOVIE] BLN for Galaxy S2 (SC-02C)

現状のkernelとあわせて動作させてみました。lights.SC-02C.soは問題ないのだけど、kernelはまだいろいろありそうです。USBで給電した状態だと問題ないのですが、ケーブルをはずすとtouchkeyデバイスにステートの書き込みができなくなり、kernel内部でループが発生してしまいます。このあたりの処理がなんとかならないと実用はできないですね。SGS2からはPowerManagementが高度になっているようで、デバイスへの電力供給制御のロジック等がここからの鬼門ですかね。




i2cバスへの書き込みエラー、dmesgではこんな感じ。こいつがループ始めるとkernelが重くなって再起動です。i2c-BUS関連とかGPIOとかregulatorとか追っかけないとですかねぇ。

<7>[ 1238.882765] [TouchKey] i2c_touchkey_write 285 i2c transfer error
<3>[ 1239.722756] [TouchKey] i2c_touchkey_read 248 i2c transfer error
<7>[ 1240.562765] [TouchKey] i2c_touchkey_write 285 i2c transfer error
<3>[ 1241.392773] [TouchKey] i2c_touchkey_read 248 i2c transfer error
<3>[ 1242.242760] [TouchKey] i2c_touchkey_read 248 i2c transfer error


あ、neldarさんがGT-9100のリポジトリをforkしたみたいなので、本家がもうすぐ出るかもよ?

[KERNEL] Galaxy S2 BLN support kernel *TEST* version part-3

手元ではUSB接続下ではBLNは動作してますが。。もうちょっとkernel見ないと完全じゃないです。というわけで、今回はlightsの修正ポイントについて。基本方針のところで述べたように、neldarさんのAPPがそのまま使えるように、ソースを修正してみます。

そのまえに、初回に懸念していた、TEMPERATURE_READ関連ですが、SGS2のシステム側がどのようなコールバック関数を登録しようとしているか、debug-logを出すことで確認してみたところ、特に必要なさそうことがわかりました。lightsは初期化時に、システム側から、LEDやバックライトなどの調節をするための関数の登録を求められますが、システムがどのような関数の登録を求めているか実際にログに出し、確認しただけです。以下、そのときのDDMSの画面キャプチャ。



これによると、TEMPERATURE_READは必要なさそうです。さて、前回取得したfroyoのソースディレクトリに移動します。
cd ./froyo/hardware/msm7k/liblights
バックアップは取っときましょう。
cp lights.c lights.c.org
で、今回のコード
creams@nexus:~/android/froyo/hardware/msm7k/liblights$ diff -cNr lights.c.orig lights.c
*** lights.c.orig 2011-07-09 19:15:56.496289937 +0900
--- lights.c 2011-07-10 21:19:07.012133668 +0900
***************
*** 61,67 ****
          = "/sys/class/leds/amber/brightness";
 
  char const*const LCD_FILE
!         = "/sys/class/leds/lcd-backlight/brightness";
 
  char const*const RED_FREQ_FILE
          = "/sys/class/leds/red/device/grpfreq";
--- 61,67 ----
          = "/sys/class/leds/amber/brightness";
 
  char const*const LCD_FILE
!         = "/sys/class/backlight/pwm-backlight/brightness";
 
  char const*const RED_FREQ_FILE
          = "/sys/class/leds/red/device/grpfreq";
***************
*** 79,85 ****
          = "/sys/class/leds/keyboard-backlight/brightness";
 
  char const*const BUTTON_FILE
!         = "/sys/class/leds/button-backlight/brightness";
 
  /**
   * device methods
--- 79,89 ----
          = "/sys/class/leds/keyboard-backlight/brightness";
 
  char const*const BUTTON_FILE
!         = "/sys/devices/virtual/misc/melfas_touchkey/brightness";
!
! // sysfs file for BLN
! char const*const NOTIFICATION_FILE
!         = "/sys/class/misc/backlightnotification/notification_led";
 
  /**
   * device methods
***************
*** 108,113 ****
--- 112,118 ----
      if (fd >= 0) {
          char buffer[20];
          int bytes = sprintf(buffer, "%d\n", value);
+         LOGE("write_int : %s %d\n", path, value);
          int amt = write(fd, buffer, bytes);
          close(fd);
          return amt == -1 ? -errno : 0;
***************
*** 190,196 ****
      int on = is_lit(state);
      pthread_mutex_lock(&g_lock);
      g_buttons = on;
!     err = write_int(BUTTON_FILE, on?255:0);
      pthread_mutex_unlock(&g_lock);
      return err;
  }
--- 195,202 ----
      int on = is_lit(state);
      pthread_mutex_lock(&g_lock);
      g_buttons = on;
!     /* for BLN 1(on) or 2(off) */
!     err = write_int(BUTTON_FILE, on?1:2);
      pthread_mutex_unlock(&g_lock);
      return err;
  }
***************
*** 313,323 ****
      g_notification = *state;
      LOGV("set_light_notifications g_trackball=%d color=0x%08x",
              g_trackball, state->color);
!     if (g_haveTrackballLight) {
!         handle_trackball_light_locked(dev);
!     }
!     handle_speaker_battery_locked(dev);
      pthread_mutex_unlock(&g_lock);
      return 0;
  }
 
--- 319,331 ----
      g_notification = *state;
      LOGV("set_light_notifications g_trackball=%d color=0x%08x",
              g_trackball, state->color);
!
!     /* for BLN */
!     int on = is_lit(state);
!     int err = write_int( NOTIFICATION_FILE, on?1:0 );
!
      pthread_mutex_unlock(&g_lock);
+
      return 0;
  }
 
***************
*** 365,388 ****
      int (*set_light)(struct light_device_t* dev,
              struct light_state_t const* state);
 
      if (0 == strcmp(LIGHT_ID_BACKLIGHT, name)) {
          set_light = set_light_backlight;
      }
-     else if (0 == strcmp(LIGHT_ID_KEYBOARD, name)) {
-         set_light = set_light_keyboard;
-     }
      else if (0 == strcmp(LIGHT_ID_BUTTONS, name)) {
          set_light = set_light_buttons;
      }
-     else if (0 == strcmp(LIGHT_ID_BATTERY, name)) {
-         set_light = set_light_battery;
-     }
      else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name)) {
          set_light = set_light_notifications;
      }
-     else if (0 == strcmp(LIGHT_ID_ATTENTION, name)) {
-         set_light = set_light_attention;
-     }
      else {
          return -EINVAL;
      }
--- 373,390 ----
      int (*set_light)(struct light_device_t* dev,
              struct light_state_t const* state);
 
+     /* for BLN test */
+     LOGE("CMD name =>%s\n", name);
+
      if (0 == strcmp(LIGHT_ID_BACKLIGHT, name)) {
          set_light = set_light_backlight;
      }
      else if (0 == strcmp(LIGHT_ID_BUTTONS, name)) {
          set_light = set_light_buttons;
      }
      else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name)) {
          set_light = set_light_notifications;
      }
      else {
          return -EINVAL;
      }
***************
*** 415,421 ****
      .version_major = 1,
      .version_minor = 0,
      .id = LIGHTS_HARDWARE_MODULE_ID,
!     .name = "QCT MSM7K lights Module",
!     .author = "Google, Inc.",
      .methods = &lights_module_methods,
  };
--- 417,423 ----
      .version_major = 1,
      .version_minor = 0,
      .id = LIGHTS_HARDWARE_MODULE_ID,
!     .name = "Modified QCT MSM7K lights Module",
!     .author = "creams@nexus",
      .methods = &lights_module_methods,
  };
今回はあっても必要なさそうな、処理はさっくりはぶいて、必要な部分だけに絞ってみました。基本的にはLCD_FILE,BUTTON_FILE,を変更してNOTIFICATION_FILEを加えただけですね。あとはこれを適用してみます。lights.msm7k.soをlights.SC-02C.so にリネームしてから入れ替えます。バックアップも忘れずに。
バックアップ
adb pull /system/lib/hw/lights.SC-02C.so .
..
.

入れ替え
cp lights.msm7k.so lights.SC-02C.so
adb remount
adb push lights.SC-02C.so /system/lib/hw/
adb reboot
そのうちgithubあたりにソースとバイナリアップしておきます。以下はMarktにあるneldarさん作のBLN Test Appでの結果です、ちゃんと認識してますね。



次回kernel話かけたらいいなぁ。。(安定せず。。)

[KERNEL] Galaxy S2 BLN support kernel *TEST* version part-2

kernelについては、まだまだかかりそうなので、先にBLNに必要なliblightsのビルドについて。とにかくビルドできる環境を作るところまで。前回も書いたとおりmsm7kのソースそのままでいけそうなので、SGS2は2.3.3(Gingerbread)ということもあるので64bitのUbuntuを導入して、ビルドすることにした。基本的にVMWare Playerなので気軽に、サイトからisoを落としてそこからインストールする。
http://www.ubuntu.com/download/ubuntu/download
ここから64bit版をおとして、VMWare Playerでインスタンスをつくり、isoからインストールを選んでインストールしておく。ちなみにJavaはopen-javaなので、sun-javaがいい人はapt-getしておく、それからsun-java5も入れておく。Ubuntu 11.04 でJDK5を入れるには以下のようにするべし、jaunty(Ubuntu 9.04)が既にサポートを終了のため普通にはaptで落とせない
sudo vi /etc/apt/sources.list

追加
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse

sudo apt-get update
sudo apt-get install sun-java5-jdk

切り替え
sudo update-alternatives --config java
sudo update-alternatives --config javac
さて、lightsはmsm7kに含まれるので、一番簡単にビルドするのはHTC dream用?としてビルドすることでそうなるとfroyoのソースが必要となる。gingerbreadだけのソースを取得するとdevice/htc/dreamが存在しないので注意。

余談だが、2.3(gingerbread)のビルドに64bitOSが必要だったのは過去の話のようで、現在は32bitでもビルドできるパッチが導入されているので普通に32bit UbuntuでもOK。64bit推奨なのは変わらないようですが。

それじゃ、64bitのAndroidビルド環境を整える方法は、別のサイトかGoogleさんに頼るとして、lightsの楽なビルド方法は。
mkdir froyo
cd froyo
repo -u init git://android.git.kernel.org/platform/manifest.git -b froyo
でFroyo指定でソースをチェックアウトする。かなり時間かかります。ダウンロードが完了したら
環境のセットアップ
source ./build/envsetup.sh
これでlunchやmなどのコマンドが使えるようになる。ここでは下記のように選択。
creams@nexus:~/android/froyo$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. generic-eng
     2. simulator
     3. full_dream-userdebug
     4. full_passion-userdebug
     5. full_sapphire-userdebug

Which would you like? [generic-eng] full_dream-user
そしてビルド。(VMWare playerに割り当てたCPU Core数に応じて)
make -j4
しばらく待ちます。うまくいけば下記にshared-libが作成される。
./target/product/dream/system/lib/hw/lights.msm7k.so
ダメだって人はlunchでdreamがちゃんと選ばれてるかどうか確認して。それでもダメなら
cd ./hardware/msm7k/liblights
mm
でターゲットだけビルドはじめるはずです。足りないものがあればエラーがでるので、足りないものをmmでビルドしていけばできると思う。

次回は。lightsの修正とビルド。基本的にはlights.cを修正してmakeするだけの簡単なお仕事。。

2011年7月9日土曜日

[KERNEL] Galaxy S2 BLN support kernel *TEST* version part-1

週末の時間の取れるときしか、がっつりいじれませんが、すこしづつ進めてまして、neldarさんのGalaxy S用BLN関連ソースを参考に、自分のkernelソースに組み込んでみてます。本来はlights.*******.soを入れ替えないでkernel側だけで何とかできないものかと、LEDのsysfsを作ったりしてみましたが、neldarさんの取ってるアプローチが最適だと思われます。基本方針としては。

1.kernel側のドライバにBLN用のsysfsファイルを用意して基本はここで制御。
2.lights.*****.soをこのsysfsを呼び出すように変更したものに置き換える。
3.アプリでenable/disableの切り替えやblinkの設定などが行える。

今回はあくまでもテストで実装しているので、Marketにあるneldarさん作のBLN Appがそのまま使えるようにBLNのsysfsとlights.*****.soが準備できるかとうことろですね。
#blinkを試すには有料版買う必要があるか。。

まず、SC-02Cのliblightsですが、
/system/lib/hw/lights.SC-02C.so
がそれです、まずこれをadbで抜き出してバックアップしておきます。
adb pull /system/lib/hw/lights.SC-02C.so
ちなみにこのファイルをstringsとかobjdumpでながめてみると、下記のようなsysfsを呼び出しているのがわかります。DDMSなどでログをながめているとlightsのライブラリのデバッグログが出てますが、下記のsysfsのうち/sys/class/leds以下のものは、そもそもS2には/sys/class/ledsのファイルエントリ自体が存在していないので、無意味な呼び出しになってます。有効なのはmelfas_touchkeyとpwm-backlightだけっぽいです。
strins lights.SC-02C.so
...
..
.
/sys/class/leds/jogball-backlight/brightness
/sys/class/leds/red/brightness
/sys/class/leds/green/brightness
/sys/class/leds/blue/brightness
/sys/class/leds/amber/brightness
/sys/class/leds/red/device/grpfreq
/sys/class/leds/red/device/grppwm
/sys/class/leds/red/device/blink
/sys/class/leds/amber/blink
/sys/devices/virtual/misc/melfas_touchkey/brightness
/sys/class/leds/keyboard-backlight/brightness
/sys/class/backlight/pwm-backlight/brightness
/sys/class/power_supply/battery/temp
QCT MSM7K lights Module
Google, Inc.
...
..
.
lightsをダンプしてみた結果とDDMSのログからわかるのは、このshared-libraryはmsm7kのもので、ほとんど手が加えられていなそうだということです。じっさいAndroidのソースをrepo syncしてmsm7k以下のliblights/lights.cを見ればだいたい推測できます(完全にカンですけどね)。ただ1点だけ、これがわからない。
/sys/class/power_supply/battery/temp
バッテリの温度を読み取れるsysfsで、S2にも存在しているファイルなんですが、lightsからこれをreadする意味がわからない。既存のlights.cをいろいろあたってみてもTEMPERATURE_READを処理してるのは皆無。。lightsの役割を考えると、通知LEDがそもそも存在しないS2には必要なしと考えwこいつはサポートしない方向で。とはいえ時間に余裕ができたら、disassembleしてみますわ。

というわけで、msm7kのものをBLNのsysfsがコールできるように、それからneldarさんのBLN Appが認識可能なように手を入れる方針でいきます。

あーそれにしても、repo syncおわんね。

Galaxy S2 The "SKORPN" JIG 到着

いわゆるJIGです。自分でつくるのもいいんですが、eBayあさってると、ストラップつきのを発見。まぁ、意味無いけどw。ぽちってみました。モノと配送料で結局すげぇ高かったという。。ちゃんとDownloadモードにはいってSAMSUNG OFFICIALになったので良しとしますか。

ちょっとしたインストラクションの紙がはいってて、ボールペンでThank youとか書かれてて、なんとなく手作り感がいいですねw。

Galaxy Tab Camera

次はケースでも探すかな?なるべく薄くて、フィットした感じのを探してます。だれかいいケースしりませんかね?

2011年7月6日水曜日

[INFO] sysfsから読み取るMALI-400MP & CPU0 Galaxy S2でのパラメータ

Galaxy S2のGPUであるMALI400MPのモジュールパラメータです。267MhzのFixedを試すとか、100Mhz/750mvのステップを試すとか。パラメータいじりの最中はtry&errorになりがちです。sysfsがサポートされているモジュールであればある程度の状態はそこから読み取れますので、確認しつついじりたおしますw。MALIの場合は下記のような感じ。
adb shell
cd /sys/module/mali/parameters
# ls -l
ls -l
-r--r--r-- root     root         4096 2011-07-05 23:54 gpu_power_state
-r--r--r-- root     root         4096 2011-07-05 23:54 mali_gpu_vol
-r--r--r-- root     root         4096 2011-07-05 23:54 mali_gpu_clk
-rw-rw-r-- root     root         4096 2011-07-05 23:54 mali_dvfs_control
-rw-rw-r-- root     root         4096 2011-07-05 23:54 mali_max_job_runtime
-rw-rw-r-- root     root         4096 2011-07-05 23:54 mali_hang_check_interval
-rw-rw-r-- root     root         4096 2011-07-05 23:54 mali_benchmark
-r--r--r-- root     root         4096 2011-07-05 23:54 mali_major
-rw-rw-r-- root     root         4096 2011-07-05 23:54 mali_debug_level
# cat mali_gpu_clk
cat mali_gpu_clk
160
# cat mali_gpu_vol
cat mali_gpu_vol
950000
前回のエントリでも書いたけど、reguratorの設定範囲をちゃんとしてあげないと、実際のクロックはkernelのコードに従ってくれませんので、設定値を変更したkernelを適用したら、上記の手段などで、現在値を確認するのがいいと思います。ちなみに上記はデフォルトのIDLE状態。Quadrantなどを実行しながらこの値をチェックすると、kernelによりこの値がstepするのがわかります。

ちなみにreguratorの範囲の設定をミスるとvoltageは1000000に固定されちゃいます。

次にCPU関連。
adb shell
cd /sys/devices/system/cpu/cpu0/cpufreq
# ls -l
ls -l
-rw-rw-rw- root     root         4096 2011-07-05 20:22 cpuinfo_min_freq
-rw-rw-rw- root     root         4096 2011-07-05 20:22 cpuinfo_max_freq
-rw-rw-rw- root     root         4096 2011-07-05 20:22 cpuinfo_transition_latency
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_min_freq
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_max_freq
-rw-rw-rw- root     root         4096 2011-07-05 20:22 affected_cpus
-rw-rw-rw- root     root         4096 2011-07-05 20:22 related_cpus
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_governor
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_driver
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_available_governors
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_setspeed
-rw-rw-rw- root     root         4096 2011-07-05 20:22 cpuinfo_cur_freq
-rw-rw-rw- root     root         4096 2011-07-05 20:22 scaling_cur_freq
drwxr-xr-x root     root              2011-07-05 20:22 stats
drw-rw-rw- root     root              2011-07-05 20:22 ondemand

# cat cpuinfo_cur_freq
cat cpuinfo_cur_freq
100000
上記は100Mhzのステップを追加したときの状態ですが、注目すべきはcpuinfo_cur_freq。APLLの設定がちゃんと入ってないと、実際のクロックは変化しないようで200Mhzあたりになります。というわけで、みなさんSetCPUの表示にだまされるわけですね。コードと注意深くみていくと100MhzのAPLLの設定値が存在してるのがわかります。昔は100Mhz - 1.0Ghzだったような感じですね。そのAPLLの設定値をそのままいただけばOKですね。

手元のSGS2はこの設定で動作してますが、CPU時間の50%程度を占める周波数が今回設定した100Mhzなので、多少の効果は認められます、絶大とまではいかないのですがね。


それにしても、だれかExynosのドキュメントとか持ってないですかねぇ。みなさん手探り上等なんでしょうか。。

えー。次回はたぶんBLN。手元では動いたかも!

2011年7月5日火曜日

Galaxy S2 バッテリ消費と対策?

1.2Ghzのdual-core CPUのおかげでほとんどスペック的に不満のないGalaxy S2ですが、やっぱりバッテリの消費はいかんともしがたいものがありますな。sleep時もさることながら、普通にいじってるだけで、こんだけ減ってくのはイラっときますねw。

で、やってみたことは。

1.同期系をなるべくとめる。
それでもやっぱりとめられないのがあったり、とめたらAndroidのいみねぇよ、というのもあったり。
2.GPUであるMALI-400MPのClockと電圧のUC/UV
2ステップの切り替えのうち、下のclock/volを100/750程度にしてみた。
3.CPUのmin_scalingが200Mhzのところを100に落としてみる。
SetCPUでclock別のプロファイルとってみると、ほとんどの時間が200Mhzでの駆動だったから。

んで、どれもほとんど効かないです。多少変化はあるのですが、CPUの100Mhz駆動は今晩あたりテストしますが、大して変わらんような気がしますな。。

自分の試した100Mhz code。ポイントだけ。

/arch/arm/mach-s5pv310/cpufreq.c

#if 0
        {L4, 200*1000},
#else
        {L4, 100*1000},
#endif
#if 0
        /* APLL FOUT L4: 200MHz */
        ((200<<16)|(6<<8)|(0x3)),
#else
        /* APLL FOUT L4: 100MHz */
        ((200<<16)|(6<<8)|(0x4)),
#endif
#if 0
        .arm_volt       = 975000,
#else
        .arm_volt       = 950000,
#endif

見落としあんのかもしれないんで、気がついた人はtweetでもしてくださいな。
MALI400のほうは、

drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c
mali_dvfs_table mali_dvfs[MALI_DVFS_STEPS]={
..
.

このあたりで。mali_dvfs_table_updateでasv_numにしたがってstepする部分のvolもわすれずに。自分的にはidle時の設定を100/750000でやってみてる。

あと、この辺もか。
arch/arm/mach-s5pv310/mach-c1.c
static struct regulator_init_data buck3_init_data = {
        .constraints    = {
                .name           = "G3D_1.1V",
#if 0
                .min_uV         = 700000,
#else
                .min_uV         = 900000,
#endif


このあたりの作業全般、sysfsで確認&printkあたりでチェック忘れずに。じゃないとSetCPUの表示にだまされるかも?

まぁ、この作業はこの辺にしておいて、次はVoodoo sound系かBLNだな。

2011年6月30日木曜日

Galaxy S2とLauncherProとバッテリ消費

バッテリ消費が異常に早くなくなるのはなぜだろうと、いろいろしらべてみたんですが。おもにS1時代のブログの記事とかが多くヒットしました。よくあるのがlauncher系がandroid.process.acoreを暴走させるってやつみたい。で、気になってBattery MixをMarketからダウンロードして、「基本プロセス非表示」のチェックをオフにして、100に充電したうえで、ログを消去→就寝。という流れで、朝、ログを確認してみると。。


まじかー。

このグラフ積算じゃなかったよな!?いわゆるandroid.process.acoreの暴走ってやつなんですかね。これだけではacoreが食ってるってことしかわからないので、どのプロセスがacoreをつかんでるか表示するアプリをいれてみました。MarketだとFreeMemory Cleanerが分かりやすい表示でよかったので、推しておきます。

で、FMCによると、やっぱりacoreを一番つかんでいたのは、LauncherProでした。気に入ってるのだけど、ちょっとこれでは実用にならないので、純正に戻してみることにしました。「ホーム切替」なるアプリがはじめっからインストールされてますので、それで。起動しただけだと、プロセスがのこるみたいなので、設定変更から、「初期設定に戻す」をやったあとに、起動したいLauncherを選んで起動します。その後一回リブートしたら完了です。

まぁ、これでしばらく様子をみてみます。

バッテリ消費については、こう言ったアプリのお行儀を正す以外にも、kernelやドライバ周りでも調整できることがあります。CPUやGPU周りの動作クロック等の調整になると思いますが、このへんは今後のネタにとっときましょうw。

SCS2は動作速度にほぼ不満がないので、稼働時間をなるべく長くするhack等やってみたいですねー

あとLauncherProの名誉?ために書いておくと、もしかしたら、Twitter/Facebook Widgetを使わなければ、こう言った状況にはならないのかも。これはまだ検証してないので、あくまでカンですけどね。


追記:
うーむ、しばらく充電しないで普通にしてましたが、ちょっとよくなったかな程度でした。。やっぱりUV系の調整しないとだめかー

2011年6月28日火曜日

[HOWTO] Galaxy S2 SC-02C custom boot splash

とりあえず、kernelが安定的に焼けるようになったので、弄り始めてます。で、最初はお約束のboot logoの変更です。Nexus Sでやったときと同じ手法でやってみました。やり方はほぼ同じです。

Update:2011/08/12
以前の方法で下記のフッタを追加してましたが、SGS2では必要ないようです。これだけで4Mぐらい変わりますので。
cat end_logo.h >> my_logo_rgb24_wvga_portlait.h

cd drivers/video/samsung
vi s3cfb_ops.c
以前に作成したロゴデータのヘッダをincludeします。ロゴデータの作成方法などは書きのURLを参照してもらうとして、
http://creamsnexus.blogspot.com/2011/02/change-nexus-ss-boot-splash-image.html
s3cfb_ops.cの
    115       u8 *logo_virt_buf;
    116       logo_virt_buf = ioremap_nocache(bootloaderfb, fb->var.yres * fb->fix.line_length);
    117       /*memcpy(fb->screen_base, logo_virt_buf, fb->var.yres * fb->fix.line_length);*/
    118       memcpy(fb->screen_base, LOGO_RGB24, fb->var.yres * fb->fix.line_length);
    119       iounmap(logo_virt_buf);

このあたりを修正しただけです。LOGO_RGB24がヘッダで定義されている画像データそのものです。どうしてもdocomoのロゴは消せなかったのですが、以前Googleロゴが消せなかったようなもんです。まぁ、もう少しコード見れば何とかなるかもしれないけど。とりあえずはこれで、ささやかな主張ですw。

それはそうと、某所でS2のstockのzImageを拾ったのですが、initramfsをextractしてみると/tmpがありましたね。自作initramfsだと作り忘れてましたので、追加しておきました。ただ、supercurioさんのinitramfsコレクションwを見ると/tmpないinitramfsも結構ありますね。

で、以下youtubeに動画あげてみました。これはGalaxy Tabで撮影してみました。


2011年6月27日月曜日

[TEST] NTT docomo SC-02C Galaxy S2 自作kernel起動(rooted)

前回までビルドしたKernelは起動はするもののWIFIが使えない状態で、設定からもエラーが確認できました。initramfsにおいたモジュールは実機から取り出したものなので、それがまずいのかもしれません。version magicとかはあわせたんですけどね。

というわけで、モジュール類はすべて新規ビルドしたものと入れ替えることに。initramfsの/lib/modulesのものをすべていれかえてからmake cleanしてビルドしなおしです。
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  Building modules, stage 2.
  MODPOST 6 modules
  CC      drivers/bluetooth/bthid/bthid.mod.o
  LD [M]  drivers/bluetooth/bthid/bthid.ko
  CC      drivers/media/video/gspca/gspca_main.mod.o
  LD [M]  drivers/media/video/gspca/gspca_main.ko
  CC      drivers/net/wireless/bcm4330/dhd.mod.o
  LD [M]  drivers/net/wireless/bcm4330/dhd.ko
  CC      drivers/samsung/j4fs/j4fs.mod.o
  LD [M]  drivers/samsung/j4fs/j4fs.ko
  CC      drivers/samsung/vibetonz/vibrator.mod.o
  LD [M]  drivers/samsung/vibetonz/vibrator.ko
  CC      drivers/scsi/scsi_wait_scan.mod.o
  LD [M]  drivers/scsi/scsi_wait_scan.ko

出来上がったkernelは7Mくらい。heimdallで焼きこみます。heimdallはGalaxyS2対応という1.2.0がリリースされていますので、GUI使っている人はこの機会に入れ替えておきましょう。自分もGUIからアップデートしてます。

で、結果は。OKでした。WIFIもワンセグも問題ありません。insecureなのでadb shell直後にrootが取れます。ここからはSuperuser.apkとsuとbusyboxをいれれば完了ですね。busyboxはいつも言うけどz4root付属のがipv6対応してていい感じです。


su-2.3.6.1-ef-signed.zipを落としてきて展開

adb remount (systemパーティションをrwでリマウント)
adb push Superuser.apk  /system/app
adb push su /system/bin
adb shell
cd /system/bin/
chmod 6755 su

再起動したらOK。ターミナルappとかからsuしてみてダイアログがでればOK。busyboxはz4rootのから抜いたのがあればそれを用意。

adb push /system/bin/
adb shell
cd /system/bin
chmod 6755 busybox
busybox --install -s /system/bin/ (各種コマンドのシンボリックリンク作成)

で完了です。ためしに

busybox ifconfig

でeth0あたりにv6のリンクローカルあたりが見えてればOK。kernel入れ替えてみて明らかに変わったことが1点。はじめに非常にきになっていた、コントラストが強すぎるような現象が改善しました。これは、どういうことなのか調べていないのでわかりませんが。GalaxyS2はシャープネスなどまでsysfsで制御できるようなので、そのパラメータが変化したとか、そういうことなのかもしれません。

いずれにせよ、自分としてはガンマが少し持ち上がった感じで、黒つぶれが改善した用に見えます。これだけでも、kernel入れ替えた価値あるかなと。というわけで、今は明るさ自動調整で使ってます。

さて、次はストックkernelをどうするかだなぁ。もう一台かうかなぁw。

2011年6月26日日曜日

SC-01C Galaxy Tab 入手!

なぜか入手w。いや、マンガ読んだりWEBみたり。おおきいのっていいんです!。とりあえず、ドのーまるなわけですが。これから弄るネタになりますね~。以前から携帯端末でマンガや動画みてましたが、手持ちの中ではDroid Xの4.3inch液晶が最大で、それでもけっこう満足してたんですが、やっぱり7inchの大きさは伊達じゃないです。

当分はS2で頭いっぱいですが、じわじわとroot -> kernelという感じでやっていきます。そうそう、以前テザリングの記事かいたことあるんですが、その記事割とアクセスあるんですよね。記事を書いたときのファームだと、何も考えずにUI呼び出して設定すればOKだったんですが。いまは状況がちがうようで、特に2.3が出てからは不具合などの話もききます。

さてTさんにどうやってお礼しようか悩む。。

EPSON R-D1 Noctilux 50mm F1.0

写真のケースはamazonで買ったAcaseなる会社のビンテージレザー使ったものです。割といい感触で気に入りました。

[TEST] NTT docomo Galaxy S2 SC-02C kernel ビルドの続き

前回作成したzImageは、自分でSC-02Cからadb pullで抽出したファイルをベースにした
initramfsを含んでいますが、そもそもzImageがちゃんと作成されているのかどうか
チェックしてみました。チェック方法としては、

1.既存の手法をつかってinitramfsをExtractできるか?
2.version magicはinitramfsにある*.koとマッチするか?

といったところをチェックしてみました。まずinitramfsのExtractですが、TwitterをzImage
で検索してたときに見つけた@chromarockさんのgithubからinitrampickerを落として使わせて
もらいました。
https://github.com/chromabox/initrampicker
このツールはlzo圧縮されている対象にも有効なのでお勧めです。自分はgrepとか
ddとかの従来の方法で抜いてましたが、initrampickerのほうが圧倒的に楽なのでw。

で、そうなんです、GT-I9100のソースはそのままビルドするとlzoなんですね。
さておき適当なディレクトリにgit cloneしてビルドします。
mkdir initrampicker
cd initrampicker
git clone https://github.com/chromabox/initrampicker.git
make
できたら実行
$ ./initrampicker ../zImage ./initramfs.cpio
initram picker 1.00.00
check zimage file...
zimage LZO compressed.
zImage size 7249932, offset 6248
decompress file...
lzop: tempdec00.lzo: warning: ignoring trailing garbage in lzop file
lzop -d  tempdec00.lzo
 returncode 512
decompress success.
check cpio image file...
pickup cpio file...
found end marker file...
pickup cpio success.
うまくinitramfs.cpioがextractできたようです。さて展開できるかやってみます。
展開用のdirectoryをつくってそこに展開です。
mkdir test_cpio
cd test_cpio
cpio -ivmd --no-absolute-filenames < ../initramfs.cpio
..
.
initramfsの内容は問題ありませんでした。次はversion magicの確認です。modinfoコマンドで
ビルドされたモジュールをどれでもいいので確認してみます。
$ modinfo ./j4fs.ko
filename:       ./j4fs.ko
depends:       
vermagic:       2.6.35.7 SMP preempt mod_unload modversions ARMv7
ちなみにinitramfsに配置してある、SC-02Cから抜き出したオリジナルは
$ modinfo j4fs.ko
filename:       j4fs.ko
depends:       
vermagic:       2.6.35.7-SC02COMKF2-CL257138 SMP preempt mod_unload modversions ARMv7
なるほど、ビルドしたものにはLOCALVERSIONが無いですね。これでも大丈夫なような気もするけど
一応このあたりをあわせこんで見ましょう。kernelのツリーのトップに戻って
make menuconfig
  --> General setup
     --> Local version
の部分に
-SC02COMKF2-CL257138
を指定してみます。それから、CONFIG_LOCALVERSION_AUTOはいらないかもね。exitでsaveして抜けて。makeしてから、もう一度modinfoしてみると。
$ modinfo ./j4fs.ko
filename:       ./j4fs.ko
depends:       
vermagic:       2.6.35.7-SC02COMKF2-CL257138 SMP preempt mod_unload modversions ARMv7
今度はOKなようです。zImageも更新されています。さて、焼いてみるかなぁ。。

2011年6月25日土曜日

[TEST] NTT docomo SC-02C Galaxy S2 initramfs作成とzImageビルド

オリジナルのkernelを抜くには、どうしてもrootが必要なわけで、rootをとるにはオリジナルでないkernelを焼くしかない現状では、オリジナルkernel入手は難しいですね。可能性としては、だれかがGingerBreakみたいなexploit codeを実行できるようなセキュリティホールを見つけるぐらいしか無いってことでしょうかねぇ。

なにかいいアイデアはないものか。。とりあえず、オリジナルkernelビルドの続きをやることにします。

前回は、initramfs抜きのzImageを作成しましたが、今回はかなり強引にinitramfsを準備してみます。参考になるのは下記のURL。supercurioさんのUPしてるinitramfsです。
https://github.com/GalaxySII/initramfs-galaxysii
GT-I9100用のいくつかのバージョンのものと、KOREA版のやつが上がってます。これらを参考に、SC-02Cからadb pullでファイルを抜き出します。はじめに上記のinitramfsたちを落としておきます。
 git clone https://github.com/GalaxySII/initramfs-galaxysii.git
 ..
 .
取り出すファイルなどは下記の感じw
 data/
 dev/
 lib/
 proc/
 res/
 sbin/
 sys/
 system/
 vendor/
 default.prop
 fota.rc
 init
 init.goldfish.rc
 init.rc
 init.smdkc210.rc
 lpm.rc
 recovery.rc
 ueventd.goldfish.rc
 ueventd.rc
 ueventd.smdkc210.rc
ちゃんとサブディレクトリもチェックして、必要なものを全部取り出します。自分がやった限りではpermissionに阻まれることはありませんでした。これらのファイルをinitramfs_sc02c_KF2というディレクトリにコピーします。一部symlinkあるのでそれのリンクの再現も忘れずに行います。その後permissionを同様にあわせます。
       lib
       res
       sbin
       vendor
はサブディレクトリもちゃんと再現しましょう。ほかのディレクトリは空でOK。抜け漏れがないか、gitで落としたinitramfsたちを参考にチェックしておきましょう。大丈夫そうなら、ここでdefault.propをいじってsecure=0(insecure)にしておきます。パラメータいじりたければこのあたりでやっておきます。
vi default.prop
---
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=0
ro.allow.mock.location=0
ro.debuggable=0
persist.service.adb.enable=0
---

さて、これでinsecureなinitramfsが用意できましたw。次にこれを取り込んだkernelの構築です。展開するところから行きましょう。
tar xvfz GT-I9100_Kernel_Gingerbread.tar.gz
cd kernel
この後Makefileのpermissionをいじって、CROSS_COMPILEに指定されるコンパイラへのpath-prefixを指定します。

CROSS_COMPILE   ?= /somewhere/android_dev/arm-2009q3/bin/arm-none-eabi-
次に、defconfigをいじって、先ほど作成したinitramfsの位置をおしえます。男らしくdefconfigをviで編集します。
cd arch/arm/configs
vi c1_rev02_jpn_ntt_defconfig

---
CONFIG_INITRAMFS_SOURCE="/somewhere/android_dev/galaxys2/initramfs/initramfs_sc02c_KF2"
---

cd ../../../
ここまできたらあとはビルドするだけです。前回と同様に。
make c1_rev02_jpn_ntt_defconfig
make menuconfig ( if needed )
make -j2
で、しばらく待って出来上がりです。次回はできあがったzImageを検証してみたいと思います。ポイントは独自kernelと既存モジュールとの整合性(initramfsにはじめから配置されてますから)をversion magicから推測。zImageからinitramfsを抽出できるか?といったところでしょうか。

#そうこうしてるまにXDAあたりで「抜けたぜ!」って報告あるかなー。

この方法はversion magicがちゃんとしないぽいので、試しても焼かないほうがいいかな?

[TEST] NTT docomo SC-02C Galaxy S2 kernel build 。initramfsほしいです。

わすれっぽい自分のために。
世の中は進んでる人もいますが、自分は一歩一歩、たのしんで行きます。で、早速kernelビルドのための情報をあつめていましたが、なんともdocomo版のkernelを確実にビルドする方法はどこにも紹介されていないようで、面倒なのでsamsung opensourceサイトからGT-I9100のソースを落としてきて眺めてみることに。
https://opensource.samsung.com/
GT-I9100を検索してみるとその下にSGH-N033の文字が。これはdocomo版の型番だったような気がしますね。googleで検索してみてもそんな感じ。早速ダウンロード。
unzip GT-I9100_Opensource.zip

.GT-I9100_Kernel_Gingerbread.tar.gz
.GT-I9100_Platform_Gingerbread.tar.gz

tar xvfz GT-I9100_Kernel_Gingerbread.tar.gz
..
.
README_kernel.txtを眺めて、defconfig関連に目を通していると、どうやらdocomo版のソースもこれでOKな感じです。defconfigをざっと眺めただけで、推測にすぎませんが、ファイル名とconfigの内容からして下記のような対応かと考えました。
GT-I9100 : c1_rev02_defconfig         (UK? version)
SGH-N033 : c1_rev02_jpn_ntt_defconfig (Japan version)
SHW-M250S: c1_rev02_kor_skt_defconfig (Korea version)
KOR版にはCONFIG_TDMBが有効になっており、JPN版にはCONFIG_ISDBT_FC8100が有効なことから判断してみました。まぁ憶測ですw。あとc1_rev01_*関連は目をとおしてないですがいらないでしょうね。

というわけで、なにはともあれbuildしてみることに。README_kernel.txtには
http://www.codesourcery.com/
からarm eabiなコンパイラを落としてきて使えとあります。これは以前のエントリでも書いたChina Telecom版のGalaxy Sのkernelをビルドしたときに落としてきたのと同じコンパイラですね。
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
これを適当なディレクトリに展開します。次にMakefileをいじって、コンパイラへのパスを通します。
cd kernel
chmod 666 Makefile
vi Makefile
--
CROSS_COMPILE   ?= /somewhere/android_dev/SCH-i909_OpenSource/arm-2009q3/bin/arm-none-eabi-
--
のような感じで編集しておきます。できたらc1_rev02_jpn_ntt_defconfigでビルドします。
make ARCH=arm c1_rev02_jpn_ntt_defconfig
make ARCH=arm menuconfig
menuconfigしたのは、TUN/TAPなどをenableにしようと考えたわけですが、なんと!今回のc1_rev02_jpn_ntt_defconfigはTUN/TAPがはじめからenableでしかもmoduleじゃありませんでした!。これは、、このconfigで当たりwならけっこうすごいことなんじゃないでしょうかね。どっちみにdeviceをオープンするのにrootいるのかなと思いためしに、なにもいじくってない状態のSC-02Cにadb shellしてlsしてみると。。
adb shell
ls -l /dev/tun
crw-rw---- vpn      vpn       10, 200 2011-06-24 00:11 tun
おお!あんじゃん。しかもgroup writableなんだけど!。と前回かいたわけです。ちなみにGalaxy S2用らしいdefconfigたちをCONFIG_TUNでgrepしてみると。
$ grep CONFIG_TUN c1_rev02*
c1_rev02_c1q1_defconfig:# CONFIG_TUN is not set
c1_rev02_defconfig:CONFIG_TUN=y
c1_rev02_jpn_ntt_defconfig:CONFIG_TUN=y
c1_rev02_kor_skt_defconfig:CONFIG_TUN=y
c1_rev02_p6_defconfig:# CONFIG_TUN is not set
c1_rev02_talbot_defconfig:# CONFIG_TUN is not set
こんな感じでした。

#中国版はソースが別みたいなので調べてません。

ちょっと脱線しましたが、最後にkernelをmakeします。
warning : このzImage絶対焼かないように!。initramfs準備してないので起動しません。コンパイルのテストです。

make -j2 ARCH=arm
zImageを作る手前でエラーがでました、lzopが無かったようです、これをapt-getで入れて再度コンパイル
sudo apt-get install lzop
make -j2 ARCH=arm

$ make -j2 ARCH=arm
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  Kernel: arch/arm/boot/Image is ready
  Building modules, stage 2.
  LZO     arch/arm/boot/compressed/piggy.lzo
  MODPOST 6 modules
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  AS      arch/arm/boot/compressed/piggy.lzo.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
zImageできましたね、これでもREADME_kernel.txtのとおりにbuildしたわけですが、initramfsが無いので、このzImageは起動しません。UKあたりのinitramfsを参考に構築してみますかねぇ。

initramfsが準備できたら
.configをいじって、
CONFIG_INITRAMFS_SOURCE="path"
のように指定してビルドでいけると思われます。

今日のところはこの辺で。

[INFO] SC-02C NTT docomo Galaxy S2 support TUN/TAP driver!

いまkernelビルドの話を書くべく、いろいろソースをながめていたら、なんとdefconfigの中にCONFIG_TUN=yの文字が!これはと思い、なにもいじくってないSC-02Cにadb shellして確認してみると。。

ls -l /dev/tun
crw-rw---- vpn      vpn       10, 200 2011-06-24 00:11 tun
おお!あんじゃん。しかもgroup writableなんだけど!。
ということはこれを使うアプリあんのかな?dmesgはどんなだ?
dmesg
..

<6>[    0.493374] tun: Universal TUN/TAP device driver, 1.6
<6>[    0.493385] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
おー

いままで、Droid X, Nexus One, CT-Galaxy S, Nexus S, Camangi FM600などさまざまなAndroid端末のkernelビルドしてTUN/TAPを有効にしてましたが。。

まぁ問題はこのpermissionでオープンできるかどうかなんですがね。

次回はkernelビルドっぽいこと?について書く予定です。

2011年6月23日木曜日

Galaxy S2 購入!

今日は朝から地元のdocomo shopにでかけて、Galaxy S2を購入してきました。10時半過ぎぐらいでしたが、そんなに混んではいませんでした。ちなみに初回、次回の予約分までいっぱいらしく、予約しなければ買えなかったでしょう。とりあえずは、各種設定をしてみてますが、Nexus Sにくらべて圧倒的なアドバンテージを感じるかというと、そうでもないです。1回だけQuadrant計測してみましたが、2900程度のスコアでした。docomoの回線もまだ早いのかどうか、よくわからないですw。

まぁ、ぼちぼちやってきます。

一点きになるのがSuperAMOLED+のディスプレイです。ガンマの調整がわるいのか、暗いところが暗すぎます。調整してもやっぱり暗い印象ですね。もちろん輝度をあげていけばいいのですが、オートの調整を選択すると上記のような印象です。これから選ぶ人は実際にそのあたりを見たほうがいいと思われます。一方同じ800x480のNexus Sとくらべても、精細感は非常に高く感じます。自分は当分オートの設定は使わずに70%程度の明るさで運用してみます。


次はroot取得ですかねぇ。とりあえず、explot codeをつかったものは、ダメっぽいとききましたので、CF-Rootあたりを使うことになるかもしれないですね。できればオリジナルkernelを持っておきたいので、そのあたりを念頭に情報を収集することにします。

2011年6月10日金曜日

World IPv6 Dayおしまい、Galaxy S2 予約

さて、日付も変わって6月10日、全国的にDSでGalaxy S2の予約が開始されますね。次のスマフォはGalaxy S2と決めているので、明日は朝から並ぼうかと。まぁ、実は医者にも行かなくちゃならなくて、休みは取ってあるのだけど、地元のDSは小さいから予約しても発売日に買えるかは微妙なところです。

まぁ、とにかくDual CoreのAndroid機がほしいわけで、何とか手に入れたいところですね。手に入れた暁には、root、開発環境セットアップ、original-kernelビルド等、やることありますねぇーw。DoCoMo版を手に入れるということは、まずrootの壁があるみたいなんで、今のうちから情報収集です。グローバル版Galaxy S2(UK版?)は、いろいろな方がhackしてますから、それを参考にやってみます。

一方IPv6界隈では6/8からWorld IPv6 Dayでしたね。いろいろ問題が出るかもといわれてましたが、普段からほとんどv6-enableなdual-stack環境にいる自分にとってはあまり関係ないなーと思ってました、ところが。。この2日間は、結構な数のISPがDNSにAAAAフィルタをかけたんですねぇ。v6のコネクティビティが無い人には確実にv4でアクセスできるわけで、いいのかもしれないですけど、もともとv6で生活していた人には、「あれ?今日はカメ踊んないじゃん?」ということになるわけです。なわけで、この2日はAAAAを返すDNSを探してそいつを設定したりと、なんだか本末転倒みたいなことをしてたわけです。

仕事のほうでもv6がらみの動きがあって、そこではいかにv6を使うかを考えてるというのに、AAAAフィルタのような措置にはちょっと納得がいかないですねぇ。。しかしほとんど大きな問題も無かったように見えますので、今後はある程度v6化の動きは加速するのでしょうね。

ちなみにAndroidは1.6?ぐらいからv6-enableですね。2.3の標準ブラウザはちゃんとカメも踊るようになりましたしね。そういうわけもあって、Android-kernelをビルドするときは必ずTUN/TAPをenableにしてます、3Gの環境ではトンネル掘るしかv6のコネクティビティを確保できませんからね。Galaxy S2もそうしたいですね。

あ、DoCoMoのSPモードはそういえばPrivate-IPでしたね。トンネル掘る場合は気をつけないとですね。さて、じゃ今日はこの辺で、明日は朝から医者とDSです。おやすみなさい。

2011年5月21日土曜日

[INFO] Droid X ROM LIBERTY 2.0

Droid X用のCustomROMを導入してみました。いろいろあるけど、なんとなくLIBERTY 2.0を選んでみることに。オリジナルのKERNELで動作するROMなので導入も安心です。本体はdroid forumの該当スレからダウンロードするとして、Liberty Toolboxなるものは、有料版と無料版があり、多少使える機能もちがうのですが、無料版で十分だと思います。ToolboxはMarketからダウンロードできます。

まずは、バックアップから、すでに導入済みであるDroid X Bootstrapperでclockworkmodをrecoveryにflashしてからrecoveryを起動。現在のROM全体をバックアップしておきます。バックアップがおわったら、再起動して、LIBERTY2.0のzipをダウンロードして/sdcardにコピー。 もう一度clockworkmodへ再起動します。

該当スレ(こっからダウンロード)
http://www.droidforums.net/forum/liberty-rom-dx/137375-liberty-rom-v-2-0-a.html

clockworkのメニューからdata/cacheをクリアしておきます。それから、LIBERTYのzipを選択してインストールします。インストールが完了したら再起動しますので、bootロゴがLIBERTYのものに変更されているのを確認して完了です。

次に、MarketからLiberty Toolsをダウンロードしてインストールします。LIBERTYではこのToolからテーマの変更やROMのアップデート、テーマに合わせたデザインのアプリ等がダウンロードできますし、その他、ストックのROMでは変更できないようなシステムのプロパティにアクセスできます。


あまりにいじれる項目がたくさんあるので、紹介しきれませんが、かゆいところに手の届くROMといえますね。あと、設定メニューの項目が日本語リソース用意されているので。Localeを変更すると、日本語表示がされます、こまかいところですけどうれしいポイントですね。

飽きたら、clockworkで一発で戻せますから、自己責任で!楽しんでください。

# Droid X Bootstrapperは探せばそこらにおちてますんで、MarketでDonate版買わなくてもOKです。

2011年5月15日日曜日

[INFO] Droid X and Japanese Locale.

Droid XはVerizon等が販売しているCDMA2000の端末で、日本では販売されていません。auからなら出る可能性はあるのかもしれませんが、そういう話は聞きません。当然、設定できる言語環境は限られてくるわけですが、デフォルトでは、英語とスペイン語のみが選択できます。

多くのAndroidは、アプリレベルで多言語化のためのファイルを持って、システムロケールにあわせて、表示文字を変更できます。ただしシステムで選択できないロケールに変更するにはMorelocale2等のアプリを導入する必要があるのですが、Droid XではMorelocale2がうまく動作しません。

そんなわけでいろいろMarketを覗いてみていたところ、Custom Localeなるアプリを発見。pre-defined-localeを選択すると、様々なロケールに対応できます。ここでja_JPを選択して、Set localeすることで、日本語リソースをもつアプリは日本語が表示できます。ただし、stock ROMでは設定メニューの内容は英語のままでした。リソースが用意されていないのでしょう。

再起動すると設定をわすれてしまうので、再度設定が必要となりますが、アプリを起動してロケールを選択するだけですので簡単です。

<Custom Locale>
https://market.android.com/details?id=com.mhoffs.customlocale&feature=search_result

そろそろ公式のGingerbreadへのアップグレードの噂も聞こえてきました。その前に少しCustom ROM等で遊んでみるつもりです。

2011年5月14日土曜日

[HOWTO] Install clockworkmod for Droid X and full-backup.

[HOWTO] Install clockworkmod for Droid X and full-backup.

Droid Xを購入してから、すぐにNexus Sを購入してしまったので、ほとんど漫画ビューワと
化していましたがw、標準のROMにもあきてきたので少しカスタマイズやっていこうかと思います。
まずは、なんといってもbackupですね、いろいろbackupするアプリはありますが、基本はrootです。
rootは簡単にとれます。z4root一発です。z4rootはMarketからは消えましたが、探せばいろんなところに
落ちてますので、それを使いましょう。

※Stock ROMのバージョンは2.3.340が前提です。

さて、backupですが、Nexus Sでもお世話になっているclockworkmodがよさそうなので、これを使うことに
します。DroidのTips等をしらべるとflash_imageを利用するものが多く見られますが、エラーでrecoveryに
書きこむことができません。MarketにはDroid X Bootstrapというツールがあって(有料)それを使えば
簡単にclockworkmodをインストール可能ですが、出来ればタダwでやりたいのが人情というもの。

まぁ、普通にGoogle先生に聞けばapkが上がってるアップローダがワラワラ出てきます。DroidXBootstrap.apkで
検索してみましょう。みっけたらdownloadしてsdcardにコピーします。ASTRO等のファイルマネージャで
インストールもしくはadbでインストールしたら、起動します。異常にシンプルな画面が表示されますが
Bootstrap Recoveryを選択してOKのダイアログがでたら、Reboot Recoveryでclockworkmodの画面に入れます
あとは、いつものように、backup and restore を選択してbackupをします。

backupとれたら再起動します。なぜか、adb shellで端末にアクセスするとはじめっからrootになってます
次回からは/systemをadb remountでrwにするのも楽ですね。動作についてよく知りたい人は下記のページを
読むといいでしょう。

http://www.koushikdutta.com/2010/08/droid-x-recovery.html

2011年5月5日木曜日

[DEV] Nexus S build custom kernel (2.3.4 base)

2.3.4のkernelがgoogleからリリースされましたね。基本的にはNexus S4G対応や、LCDディスプレイをもつNexus Sへの対応がメインのようです。あといろんなBugFixですね。

これまでkernelをいろいろいじくって遊んできましたが、満足度がたかくて効果的だったのは、Voodoo-sound対応、BLN対応、ext4対応、色温度D65->8500K対応、くらいでした。逆にあまり必要性を感じなくなってしまったのが、Overclocking、CPU・IOスケジューラ変更でした。Overlockingもたしかにベンチマークや体感は高速になりますが、消費電力が上がってしまうのと、安定度が多少落ちる印象でした。スケジューラまわりははっきり言って体感も出来ませんでしたし、BFS等は安定度が低くなる印象でした。

今回はOverclockingとCPU/IOスケジューラ変更はやらずに、以下の方針で行くことにします。基本的に初期のNexus SなのでSuper AMOLEDのディスプレイのもののためのkernelとします。現在は4G(Wimax)対応とかLCDディスプレイとかいろいろありますけどね。。

1.Voodoo sound patch
2.BLN
3.ext4 (kernelは関係ないです)
4.D65->8500Kへの色温度変更
5.起動ロゴ変更w
6.TUN/TAPサポート

BFQあたりは適用してもいいかもしれないですが、なるべくノーマルに近い構成で、消費電力等をチェックして行きたいと考えました。実際、2.3.4のノーマルkernelだと消費電力が抑えられたような印象があります。全部入りがほしい人はNetarchyさんとかのkernelいれればいいですね。今回も必要なpatchの生成はNetarchyさんのkernelからいただきますw。

まず、2.3.4のオリジナルkernelをダウンロードしてきます。
git clone git://android.git.kernel.org/kernel/samsung.git
次にNetarchyさんのkernelをダウンロードして、patchを生成します。
git clone https://github.com/netarchy/nexus-s.git
cd nexus-s
git format-patch remotes/origin/android-samsung-2.6.35
(生成されます)
いただくのは
0041-Voodoo-sound-v8.patch
0042-initial-bln-support-v4.patch
でOK。オリジナルのディレクトリに移動してgitでpatchを当てます。
#必ずしも同じファイル名のパッチとはかぎらないので注意してみてください。
git am ../nexus-s/0041-Voodoo-sound-v8.patch
git am ../nexus-s/0042-initial-bln-support-v4.patch
次に、BootLogo、ext4 hack導入、色温度変更、起動ロゴ変更、TUN/TAP導入ですが。以前のエントリと同じなので省略します。知りたい人は以前のエントリ見てください。

ビルドしてから、いつものようにramdiskイメージを作成して、bootイメージを作成します。
make herring_defconfig ARCH=arm
make menuconfig ARCH=arm
(TUN/TAP等をここでenableに)
そしてビルド
make -j2 ARCH=arm CROSS_COMPILE=/home/somewhere/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi
zImageができたら、bootイメージを作成します。
mkbootimg --cmdline 'console=ttyFIQ0 no_console_suspend' --kernel zImage --base 0x30000000 --pagesize 4096 --ramdisk new.ramdisk.image.gz -o creamsboot234.img
できあがってboot.imgで普通に起動できるようであれば、これを適用します。同時にbcm4329.koも適用します。自分はdefault.propのro.secure=0にするramdiskイメージを用意することで、adb remountで/systemをrwでリマウントしやすくしてます。ro.secure=1な状態の人はbcm4329.koを入れるには/systemをrwでリマウントしてくださいね。
adb reboot bootloader
fastboot boot creamsboot234.img
adb remount
adb push bcm4329.ko /system/modules/
adb reboot bootloader
fastboot flash boot creamsboot234.img
fastboot reboot
のように、はじめに新しいkernelで起動してみて、その状態で/systemをrwでリマウントし、bcm4329.koをpushしてしまいます。その後boot領域にflashして完了です。

以上、試す場合は、くれぐれも自己責任でよろしく。

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

2011年3月19日土曜日

[DEV] SCH-i909 Chine telecom version Galaxy S Kernel build

これまた自分のためのメモ。

今日はSCH-i909のkernelビルドと入れ替えについて。前のエントリにも書いたとおり、およそAndroid端末とは思えない仕様のSCH-i909であるが、OpenSourceなモノの宿命でフツーにkernelが手に入る。ちなみに、日本が地震に揺れている現在、何故か以前より海外線のトラフィックが非常に細くなってて時間がかかります。
http://opensource.samsung.com/
でSCH-i909で検索。CN版のソースをwget等でダウンロードしておく。ちなみにビルドの環境は以下のとおり。
Ubuntu10.04 (32bit)
androidのサイトからおとしたSDK(toolchain)類。
SCH-I909_CN_OpenSource.zipをダウンロードしたら、適当なディレクトリにてんかいします。中にはいくつかのアーカイブがさらに含まれている。以下のとおり。
3d_module_GPL.tar.gz
SCH-i909_eclair.tar.gz
SCH-i909_Kernel.tar.gz
今回使うのはKernel。tarを展開したら、生成されるGalaxySディレクトリにcd

build_kernel.shをそのまま叩いてもkernelはできません。ちょっと調整が必要です。README.txtにいくらか解説があるけど、適当臭いので参考程度に。トライアンドエラーでもできると思うけどね。build_kenerl.shをemacs等でひらいて、ちょっと修正します。主にTOOLCHAINへのパス。一応Androidのtoolchainでもいけるかとおもうけど、README.txtにcodesourceryから落とせってかいてあるから、落とします。
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
おとしたら、GalaxySと同じ階層に展開しておくと楽。でbuild_kernel.shを下記に修正。
vi build_kernel.sh

--

TOOLCHAIN=`pwd`/../arm-2009q3/bin
TOOLCHAIN_PREFIX=arm-none-eabi-

--
さて、ここでいきなりbuild_kernel.shをぶったたくのもいいけど、準備はまだこれから。initramfsの中身を準備しておく必要がある。kernelソースには付属してこないので、DL10のzImageから抽出して、kernelのビルドディレクトリに展開しておいておこう。そのために、kernelソースを展開するとrootというディレクトリがデフォで作成される。(DL10の入手については別エントリをみてちょ)

zImageからinitramfsの抜くにはXDAの下記のエントリを参照するといい。このページの最初のスクリプトがinitramfsを抜き出すためのスクリプト。
http://forum.xda-developers.com/wiki/index.php?title=Extract_initramfs_from_zImage
で、このスクリプトにzImage食わせて展開してinitramfsが抜けたら、それを展開する。cpioで展開するけど、カレントに展開されるので、先程のrootディレクトリ等に移動してやっとくと楽。
cpio -v -i --no-absolute-filenames < path-to-initramfs.img
ここまできたら一回build_kernel.shを実行してみるが、下記のエラーで止まるはず。
fs/binfmt_aout.c: In function 'load_aout_binary':
fs/binfmt_aout.c:270: error: 'SEGMENT_SIZE' undeclared (first use in this function)
fs/binfmt_aout.c:270: error: (Each undeclared identifier is reported only once
fs/binfmt_aout.c:270: error: for each function it appears in.)
make[1]: *** [fs/binfmt_aout.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [fs] Error 2
これを回避するためにkernelソースのてっぺんにあるMakefileを
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) -Dlinux
と修正しておく。それから、initramfsの中身を展開したrootのディレクトリもそのままだとzImageの中身に取り込まれる様子がまったくみられなかったので、configを修正してrootディレクトリまでの絶対パスを書いておく。修正するconfigは下記のモノ。
~/android_dev/china/SCH-i909_OpenSource/GalaxyS/kernel/linux-2.6.29/arch/arm/configs/ariesct_rev00_defconfig

--
CONFIG_INITRAMFS_SOURCE="/home/somewhere/android_dev/GalaxyS/root"
--
ここまで準備したら気兼ねなくbuild_kerne.shを実行。気長に待ってOUTPUTディレクトリにzImageが出来上がってればOK。build_kernel.shを実行すると、kernel -> module の順番でビルドされるが、DL10なROMのzImageを入れ替えるだけであればモジュールは入れ替えなくてもいい。

出来上がったzImageはheimdallを使って、書きこむ。heimdallはGUIのフロントエンドが追加されてて、使いやすくなった。SCH-i909をダウンロードモードで起動して、PCに接続、heimdallのGUIを起動してzImageのところに、今回ビルドしたイメージを指定してstartするだけ。しくじっても、DL10のROMがあれば一発でもとに戻せるだろうし。fastbootなくて不安という人もいるかと思うけど。やっちゃってください、自己責任でw。

余談だけど、地震の当日というか次の日もAndroidいじくって遊んでたわけだけど。そのときは、えらいネットワーク遅かった。まぁ、こんだけの事がおこれば、みんな情報とりたくて必死になるのも分かるけど、S/Nの悪いネットの情報に踊らされてる人のなんと多いことか。そこにネットの良さもあるわけだが、なんとも。。

以上。

2011年3月16日水曜日

Galaxy S SCH-i909 China Telecom version libjavacore hack.

Droid Xも日本じゃレアだけど、これほどじゃないよって端末のSCH-i909、中身はGalaxyS。
Google関連には一切アクセス不可!!な、CDMA2000端末。
しかもdalvikのlibcoreに仕掛けがあって、IPv6なhostnameのresolvができない。AF_INET固定になっとる。
これは確実に故意に修正されているので、kernelはv6喋れても、名前解決はv4しかできない。

まずSamsungのOpensourceサイトからi909のGPLコードを全部ダウンロードする。zipで1つにまとまって
いるので楽。
#生のエクレアのライブラリと入れ替えるので、おとさなくてもいいけど、kernelビルドしたいとか
#必ずそうなるw。
http://opensource.samsung.com/
SCH-I909_CN_OpenSource.zip
ダウンロード後、libjavacore構成要素である
./dalvik/libcore/luni/src/main/native/java_net_InetAddress.cpp
を見てみる。
static jobjectArray getAllByNameUsingDns(JNIEnv* env, const char* name,
                                         jboolean preferIPv4Stack)
{
    struct addrinfo hints, *addressList = NULL, *addrInfo;
    jobjectArray addressArray = NULL;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_flags = AI_ADDRCONFIG;

モロに、AF_INET指定しとります。Eclairの素のコードではちゃんとAF_UNSPECが指定されている。
これではlibjavacoreを利用するjavaのネットコードからはipv6にアクセスできない。
Eclairのソースをダウンロードして、普通にビルドしたlibjavacoreと入れ替えることにする。
#実際はlibnativehelper.soの入れ替えとなる。
Android 2.1 Eclair
build with jdk1.5
build env  Ubuntu 10.04

repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair

sudo vi /etc/apt/sources.list
以下を追加する

deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

sudo apt-get update
sudo apt-get install sun-java5-jdk

jdk1.6をつかっているのなら、下記のコマンドでjdk1.5へ変更しておく。

sudo update-alternatives --config java
sudo update-alternatives --config javac
ほしいのは下記のスタティックライブラリだが
out/target/product/generic/obj/STATIC_LIBRARIES/libjavacore_intermediates/libjavacore.a
これをつかってビルドされている、shared-libをさがす。
find . -name Android.mk | xargs grep libjavacore
find: `./lost+found': Permission denied
./dalvik/libcore/Android.mk:LOCAL_MODULE := libjavacore
./dalvik/libnativehelper/Android.mk:# Any shared/static libs required by libjavacore
./dalvik/libnativehelper/Android.mk: libjavacore \
というわけで、libnativehelper.so があやしいw.これを単独でビルドできればして
入れ替えてみることにする。といってもjavaにちゃんとパスが通っていれば、Eclairの
ディレクトリでmakeするだけです。

入れ替え手順。
はじめにrootありき。/systemパーティションのなかを入れ替えるので、/systemパーティションを
Read/Writeでマウントしなおす。それからコピー、再起動という感じ。
adb shell
su
mount -o remount,rw /dev/block/stl9 /system
exit
exit

adb push libnativehelper.so /sdcard/
adb shell
su
cd /system/lib
cp /sdcard/libnativehelper.so .
reboot
再起動後にはブラウザでアクセスチェックを行う。pre-installのemaliアプリもサーバアドレスの部分
にIPv6を直接指定してアクセスが可能だった。単純な入れ替えでうまくいったようにみえるが、テストは
ほとんどやってないので、この方法をやって見る人は自己責任でよろしく。

ipv6の環境は、たとえば、feel6等で自宅でトンネル掘ってGlobl V6に接続している人じゃないと
なかなか他にいい方法がない。NTTの光NEXTのv6は外に出れないしね。

次回はkernelビルドと入れ替えまで。