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。