2011年2月26日土曜日

[HOWTO] Nexus S GRI40 Color Fix

新しいAndroid 2.3.3(GRI40)を適用したらかなり色温度が低くなった印象で、海外の掲示板等でも話題となってますね。ある程度高い明るさ設定で使う場合はいいのですが、画面の明るさの自動調節モードを使っていると、かなり色温度が低い印象。

Kernelのソースもアップデートされましたので、早速眺めてみることに。主にvideo周りを中心です。
新しいソースを新たに落としておきましょう。
git clone git://android.git.kernel.org/kernel/samsung.git
ポイントは
drivers/video/samsung/s3cfb_tl2796.c
arch/arm/mach-s5pv210/herring-panel.c
あたりです。

herring-panel.c

        .color_adj = {
                /* Convert from 8500K to D65, assuming:
                 * Rx 0.66950, Ry 0.33100
                 * Gx 0.18800, Gy 0.74350
                 * Bx 0.14142, By 0.04258
                 */
                .mult = {
                        2318372099U,
                        2117262806U,
                        1729744557U,
                },
                .rshift = 31,
        },

怪しいですねw。herring_panel_dataストラクチャに新しく追加されたメンバですが、8500K to D65の部分色温度の調整に使う定数ですねこれは。というわけでドライバをながめると。

s3cfb-tl2796.c

        shift = lcd->data->color_adj.rshift;
        if (shift)
                for (c = 0; c < 3; c++)
                        bc[c] = bc[c] * lcd->data->color_adj.mult[c] >> shift;

新しいメンバを参照しているコードが。ビンゴでしょう。まぁ、その他もいろいろビデオ周りは修正されていますが、今回はこの部分のコードをコメントアウトしてビルド。

一応、色温度は高めで表示されるようになりましたが、試す人は自己責任でよろしく。

Nexus S 2.3.3(GRI40) stock-kernel ext4 secure=0 bootイメージ

あくまでも2.3.3のOTAを当てられた人にだけですが、default.propをsecure=0にして、ext4のオプションにnoauto_da_allocを追加しただけのmyboot233.imgをおいておきます。

this boot-image only for GRI40 user.

myboot233.img

root消えちゃった人でclockwork面倒というひとは、これで起動してsuとSuperuser.apkを入れてもいいと思います。

当て方
adb reboot bootloader
fastboot flash boot myboot233.img
起動して、su/Superuser.apkを入れる場合
adb remount
adb push su /system/bin/
adb push Superuser.apk /system/app/
adb shell
cd /system/bin/
chmod 6755 su
以上でOKなはず。
なお、不具合起こっても責任はとれないので、自己責任でよろしく。

ちなみに古いkernelではまともに起動すらしない。古いkernel試してみてdmesg見ると、なんとなく変更点が見えるかな?。

Nexus S 2.3.3(GRI40) OTA Update with StockROM and custom-kernel.

2.3.3のOTAがきたのでアップデートしてみました。今回もまたXDAからURLをいただいで
ダウンロード→アップデートです。

今回のOTAはカーネルのパッチふくまれているので、ストックのROMにカーネルだけ入れ替えて遊んでいた人も
一度もとに戻す必要があります。clockworkmodを入れていれば簡単です。おそらくストックの状態で
バックアップをとっていることでしょうから、その中からboot.imgだけを選択してリカバします。

前提:2.3.2のrootをとって、ストックROM+自作kernelの状態

バックアップなんてとってねぇwという人は下記のURLからnandroid backupをダウンロードして、それを使えばいいと思う。あると便利。つかバックアップとろうねw(自分)
http://forum.xda-developers.com/showthread.php?t=884093

1.ROM Managerからclockworkmodをインストール
成功したら、メニューから「リカバリへ再起動」を選んでclockworkmodの画面に

2.「backup and restore」を選択
「Advanced restore」を選択して、ストックのバックアップのディレクトリを
選択する、「Restore boot」を選択したら実行。
しばらくしたら、書き換え完了です。

3.再起動
次にwifiのドライバの入れ替えですが、おそらくkernelに合わせた物になっている
はずですので、これをストックのモノに。
バックアップしてあったbcm4329.koをpushします
adb remount
adb push bcm4329.ko /system/modules/
adb reboot
(これでOTAくるのを待つってのもあるかも)

4.WIFIがちゃんと使えることを確認したら、XDAから頂いてきたURLから自分のversionに合った
アップデータをダウンロードしておきます。

GRH78Cの人
http://android.clients.google.com/packages/ota/google_crespo/98f3836cef9e.signed-soju-GRI40-from-GRH78C.98f3836c.zip

GRH78の人
http://android.clients.google.com/packages/ota/google_crespo/e0b546c442bf.signed-soju-GRI40-from-GRH78.e0b546c4.zip

5.ダウンロードしたzipを/sdcardに放りこんでおく。
ROM Managerからclockworkmodをインストール
リカバリへ再起動して、「install zip from sdcard」を選択
「choose zip from sdcard」を選択
sdcard上のzipファイルを指定してインストール。
再起動。設定の端末情報からAndroidバージョンが2.3.3であればOK


Appendix
2.3.3(GRI40)のrootの再取得方法。

bootloaderがunlockなのが前提です。
suコマンドは利用不可になってしまいますので、再度使えるようにします。
suのzipパッケージをダウンロードして/sdcardにpushしておきます。
adb push su-2.3.6.1-ef-signed.zip /sdcard/
注:clockworkmodはサイトがみつからなくて、適当なダウンロードサイトから落としました。

1.はじめにclockworkmodを適用します
adb reboot bootloader
fastboot flash recovery recovery-clockwork-3.0.0.5-crespo.img
2.clockworkmodを起動します。
  メニューから、suのパッケージをインストールします。
以上でsuとSuperuser.apkが利用可能になる。

2011年2月24日木曜日

DoCoMo Galaxy Tab Wifi Tethering & USB Tethering

DoCoMo版Galaxy Tabの隠されたテザリング インターフェースを呼び出す方法。
まず、簡単にテストしてみる。rootは必要なし。amコマンドでインテントを直接投げてみる。
adb shell
am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings
am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiApSettings
前者はUSBテザリングのUIを呼び出す。後者はWIFIテザリングのUIを呼び出す。インテントを直接投げます。WIFIの設定UIから消えているだけで、実際はこのように存在するわけですね。WIFIしかためしていませんが、普通にテザリングできました。

アプリで書くならこんな感じ。

package com.hogehoge.gtether;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class GTether extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btnUSB = (Button)findViewById(R.id.Button01);
        Button btnWIFI = (Button)findViewById(R.id.Button02);
        btnUSB.setText("USB Tethering Mode");
        btnWIFI.setText("Wifi AP Tethering Mode");
        
        btnUSB.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_MAIN);
                ComponentName com = new ComponentName("com.android.settings",
                                       "com.android.settings.TetherSettings");
                intent.setComponent(com);
                startActivity(intent);
            }
        });
        btnWIFI.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_MAIN);
                ComponentName com = new ComponentName("com.android.settings",
                                       "com.android.settings.wifi.WifiApSettings");
                intent.setComponent(com);
                startActivity(intent);
            }
        });
    }
}

UIはボタン2個だけなのでeclipseならエディタでボタンを2つドロップしたらおしまい。Androidはこう言うのがたくさんあって面白い。ちなみにamコマンドで、
am start -a com.android.intent.action.MAIN
とだけ入力してみると。いろいろ出てくるので楽しめます。不具合でても責任とれないので、自己責任でよろしく。

2011年2月22日火曜日

[HOWTO] Adding BFQ I/O scheduler to Nexus S stock kernel.

Linuxの標準のI/OスケジューラはCFQで、Nexusのkernelもこれをデフォルトとしている、ほかにも利用可能なスケジューラとして、noop | deadline などがあるが、
Nexus Sのstock kernelは2.6.35なので、これに対応するpatchをダウンロードしておく
http://algo.ing.unimo.it/people/paolo/disk_sched/
mbox形式のpatchなので、git amで当てる。configもやり直すので、distcleanしておくといい。
cd samsung
make distclean ARCH=arm
git am ../bfq_patch/0001-bfq_iosched-block-prepare_IO_context_code-2.6.35-v1-r1.patch
git am ../bfq_patch/0002-bfq_iosched-block-add_cgroups_kconfig_and_build_bits-2.6.35-v1-r1.patch
git am ../bfq_patch/0003-bfq_iosched-block-introduce_BFQ-2.6.35-v1-r1.patch

configをやり直す

make herring_defconfig ARCH=arm
make menuconfig ARCH=arm
(TUN/TAPを有効にしたりしておく)

デフォルトのIO schedulerをBFQにするために

Enable the block layer => IO Schedulers => BFQ I/O Scheduler に*
出現するオプションも*いれておく。

その後

Default I/O scheduler で BFQを選択してExitしていく。
よければbuild

make -j2 ARCH=arm CROSS_COMPILE=/home/somewhere/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
mkbootimg ....
..
いつものように、fastbootモードにしてお試し起動してチェックしてみること。

adb reboot bootloader
fastboot boot myboot.img

デフォルトが変更されていたらOK。

dmesg | grep scheduler
<6>[    0.377504] io scheduler noop registered
<6>[    0.377640] io scheduler deadline registered
<6>[    0.377762] io scheduler cfq registered
<6>[    0.377960] io scheduler bfq registered (default)

動的にI/Oスケジューラを変更するには、おそらく下記の作業で行けるはず(未検証)
cd /sys/devices/platform/s3c-sdhci.0/mmc_host/mmc0/mmc0:0001/block/mmcblk0/queue
echo cfq > scheduler
cat scheduler
noop deadline [cfq] bfq 

追記:
git amでpatchを適用するとcommitも反映されるので、kernelのバージョンマジックが変わるようです。
モジュールなどは全部コンパイルし直して入れ直しましょう。

2011年2月20日日曜日

横浜中華街

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

横浜の中華街に食事にいってきました。人数が多いといろいろ頼めていいね!それにしてもうまかったなぁ。あの店続いていってほしいなぁ。。街はすごい人出でした。写真は歩いているときにノーファインダーでの1枚。

またいこう!

2011年2月18日金曜日

Nexus S Voodoo Sound driver hack

Voodoo Sound driver hack の取り込み。割り込みタイマーの調整に疲れて、関係ないディレクトリをいじりはじめましたw。soundドライバといえばNexus SではVoodooパッチを当てる人が多いと思われます。

thanks supercurio!
Nexus S 用のVoodoo Sound Driverを組み込んだカーネルを開発しているsupercurioさんの
githubからとりあえずリポジトリを取得します。


git clone https://github.com/project-voodoo/linux_samsung.git
cd linux_samsung

ここからVoodoo Sound Driver部分のパッチだけを取り出します。基本的にandroid.git.kernel.orgの
samsung.gitのkernelをベースにしているようなので。それとの差分という形で取り出します。
まずVoodooの更新だけをパッチで取り出す。

git checkout -b vodoo-sound remotes/origin/nexus-s-voodoo-sound
git diff remotes/origin/android-samsung-2.6.35 > ./voodoo-sound.patch
これでpatchコマンドでapply出来る形式のpatchができました。これを当てます。

cd samsung
git apply -p1 < ../linux_samsung/voodoo-sound.patch

あとはビルド

make menuconfig ARCH=arm
いろいろ追加するならここで。
make -j2 ARCH=arm CROSS_COMPILE=/home/somewhare/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
出来上がったらmkbootimgでmyboot.imgを作成してfastbootで起動テストします。
fastboot boot myboot.img

Voodooのドライバハックは、専用のアプリをMarketからダウンロードすることで使えるようになります。

Voodoo Control App


ジッターキャンセルと128倍のオーバーサンプリングをチェックして使いましょう。
音は?よくなったような気がしますw。


Camangi FM600 how to build tun.ko module.

rootがとれたところで、おきまりのtunnel deviceのビルド。Camangiはkernelを公開してないようなので、いくらさがしてもみつけられなかった、FM600は似たような構成のハードがほかの会社からもでていて、おそらくどこかのOEMなのだろう。msmのkernelならいけそうな気がしたので、android.git.kernel.orgからmsmを一式ダウンロードして、ビルドしてみた。FM600は/proc/config.gzにビルド時のconfigが保存されているので、これを取得しておいた。

kernel version : 2.6.32.9
1.androidのgitリポジトリからmsmのkernel一式をダウンロードする。
git clone git://android.git.kernel.org/kernel/msm.git
2.msmの現在のバージョンは2.6.35なのでブランチをたどって2.6.32をとりだす
  まず現在のbranchを確認
  git branch
  * android-msm-2.6.35
3.ブランチを表示してみる
  git branch -r
    origin/HEAD -> origin/android-msm-2.6.35
    origin/android-msm-2.6.35
    origin/archive/android-msm-2.6.25
    origin/archive/android-msm-2.6.27
    origin/archive/android-msm-2.6.29
    origin/archive/android-msm-2.6.29-donut
    origin/archive/android-msm-2.6.29-nexusone
    origin/archive/android-msm-2.6.32
    origin/archive/android-msm-htc-2.6.25
    origin/archive/msm-2.6.25
4.現在のブランチを2.6.32へ変更
git checkout --track -b android-msm-2.6.32 origin/archive/android-msm-2.6.32
  ..
  .

  変更されたか確認

  git branch
  * android-msm-2.6.32
  android-msm-2.6.35

  変更されていたらOK.
5.FM600からconfig.gzをとりだす
adb pull /proc/config.gz .

  展開

gunzip config.gz

  名前を.configにしてmsmディレクトリ直下にコピー

  cp config ../msm/.config
6.tun.koが生成されるようにmenuconfigしてモジュールだけビルドする
make menuconfig ARCH=arm
    Device Drivers => Network device support => Universal TUN/TAP device driver support [M]にする。
make -j2 ARCH=arm CROSS_COMPILE=/home/somewhere/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- modules
  drivers/net/tun.koができていたらOK

6.実機にコピーしてinsmodしてみる
adb push tun.ko /data/local/tmp
  adb shell
  chmod 755 /data/local/tmp/tun.ko
  insmod /data/local/tmp/tun.ko
  lsmod
  ..
  .
  dmesgなどでちゃんとインストールされたか、確認しておくのもいいでしょう

以外にすんなりinsmodできてしまったので、拍子抜けでしたね。某プログラムも問題なく動作したのでよしとしましょう。

Camangi FM600 get root instruction

新しい端末が手に入ったので、早速root化など。CPUスペックはたいしたことないけど、2.2のおかげか、そこまで遅くない。個人的にはけっこういいんじゃないかと。今後新しいTablet端末が出て来たら一気に陳腐化しちゃうけどね。。

Machine Information
  Camangi-FM600
  Android  2.2
  Baseband PR3.7_128
  Kernel   Apps_2.6.32.9
  Build    5023_3_16R

1.XDAからSuperOneClick1.5.5をダウンロードしておく

   http://forum.xda-developers.com/showthread.php?t=803682

2.FM600をADBとして認識させる
デバイスドライバは、USBマウントさせるとCD-ROMエリアが出現するので
そのなかのSetupを実行するだけでOK。勝手に認識される。
PCのデバイスマネージャで?が無いのを確認しておく

3.FM600のタスクマネージャアプリ(はじめから入っている)で、全部のタスクを一回KILL
しておく。やらないと、途中で止まる。

4.SuperOneClickをクリックして、ROOTを選択して待つ。10秒程度でROOT化。
途中で止まる場合は、タスクをしつこくKILL。
これでsu Superuser.apkがはいるので。通常のROOTアプリならこれでOK。

5.busyboxを入れる場合はここまででrebootしないこと。しちゃったらShell ROOTで
取りなおす。SuperOneClickを終了して、Windowsのコマンドプロンプトで

  adb push busybox /system/bin
  adb shell
  cd /system/bin/
  chmod 755 busybox
  busybox --install -s /system/bin

  で、/system/binにコマンドがずらっと作成される。

余談だがz4rootについてるbusyboxはipv6対応なので、できればこれをいれたい
SuperOneClick付属のものはチェックしてない。

以上。

2011年2月15日火曜日

Nexus S kernel 1000Hz

今日はタイマ割り込みの周波数を調整してみる。Nexus SはデフォルトでHZ=256が設定されている、この値がどのように決定されたのかは知らないが、VM等では1000Hzあたりだと、取りこぼしが発生して時計が狂ったりとかあるらしい。歴史的に100-1000のあいだの値がデフォルトとして採用されているようであるが、Androidのkernel mod界隈では1000hzあたりを採用しているものが多い。

AndroidのようなOSでどのような効果があるのか試してみよう。割り込みが頻繁ということは、コンテキストスイッチに直接効いてくるので、やり過ぎは良くないのだろうけど。256って中途半端だよなぁ。ここは1000あたりで、アプリの挙動などを見ることにする。

arch/arm/Kconfig
default 1000 if S5P_HIGH_RES_TIMERS

make -j2 ARCH=arm CROSS_COMPILE=/home/somewhere/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

defaultを修正して、すぐにビルド。バッテリ消費等を少しモニタしたいところですね。

dmesg | grep HZ
<6>[    0.000000] HZ[1000]

dmesgでHZの設定を確認。明日はVoodoo Sound Driverでも組み込んでみよう。128倍のover samplingとか?ちょっと期待。。

続報:
いまいち不安定。。rebootや固まることが多い。もうすこし調整してみる。

2011年2月13日日曜日

Nexus S kernel, BFS scheduler and 1.4Ghz overclocking.


Nexus SのQuadrantスコアの3000超えを目標にkernelを修正してみました。Quadrantの実行画面を見ていると、DBアクセスがかなりボトルネックになっていそうなのですが、オーバークロックとCPUスケジューラの変更からせめてみることに。やることは単純で、XDAなどで公開されているNexus S用のカスタムkernelのソースからover clockingの部分をパッチとして抜き出し、BFSのサイトから現在のNexus Sのkernelに適用できるBFSのパッチを取得して、当てるだけです。

普通にカスタムカーネル入れればいいじゃんて?、それはそのとおりなんですけどw.なるべくストックの部分を残しておきたいし、なにより過程が面白いのですね。それにAndroidのアーキテクチャへの理解も深まりますし(だよな。。)。

まずは、XDAでこのスレに注目、作者はgithubでソースを公開していますね。こっから最新のバージョンを落としてきます。そこからover clockingに関係する部分だけをpatchとして取り出します。

git clone https://github.com/netarchy/nexus-s.git
diff -cNr ./samsung/arch/arm/mach-s5pv210/ ./nexus-s/arch/arm/mach-s5pv210/ > mach-s5pv210.patch
diff -cNr ./samsung/arch/arm/plat-s5p/ ./nexus-s/arch/arm/plat-s5p/ > plat-s5p.patch

一回ビルドしちゃったカーネルソースを使うなら一度distcleanしてからpatchとりましょう。次にはpatch当て。

cd samsung
make distclean ARCH=arm
diff ..
..

patch -p0 < mach-s5pv210.patch
patch -p0 < plat-s5p.patch

この時点でmake menuconfigしてビルドしてもいいと思います。ストックのkernelコード+overclockingコードでどの程度変化するのか、自分は試してみました。Quadrantだと1.4Ghz固定で3000は超えますね。
次はCPUスケジューラの変更です。kernel mod界隈wでは、BFS(Brain Fuck Scheduler)がデファクトみたいになってるので、導入することに。BFSのサイトからこのパッチをダウンロードして、当てます。そしたら、make。

wget http://ck.kolivas.org/patches/bfs/2.6.35/2.6.35.7-sched-bfs357+penalise_fork_depth_account_threads.patch
patch -p1 < 2.6.35.7-sched-bfs357+penalise_fork_depth_account_threads.patch

cd samsung
make menuconfig ARCH=arm
(TUNとかをenableするならここで)
make -j2 ARCH=arm CROSS_COMPILE=/home/someone/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
(まつ)
mkbootimg ...

bootイメージができたら、いきなり書き込まずにfastbootでbootだけしてみて動作をチェックします。SetCPU等で動作クロックを変化させて、Quadrantベンチでもとってみましょう。Quadrantは数回実行してみるのをおすすめします。自分は1.4Ghz常用は無理かと思います。

現状のOriginal Kernelのスペックは
  • TUN Support
  • BFS
  • OverClocking 1.4Ghz Max.
  • Original Boot Splash image.
といったところですか。

2011年2月11日金曜日

Gary Moore forever..


Gary Mooreが死んだって、会社の後輩のTweetで知ったのだけど、高校時代から好きだったギタリストのひとりでした。いろいろ名曲はあるんだけど、自分的にはGary MooreといえばThinLizzy時代なんだよね。Black Roseは最も好きなアルバムで、LPでもCDでも買って持ってます。ROISIN DUBHはGary Mooreのルーツがよくわかる一曲で、なくなった日の朝にも聞いてました。最近はブルースの人?みたいになってたよに思うけど、相変わらず凄いギター弾いてて、本当に惜しいです。。

2011年2月6日日曜日

iPhone4 SIM with Nexus S


b-mobileのu300の期限があと1週間程度残ってるはずですが、SMSとかその他いろいろな環境を整えてしまったので、さくっとiPhone4 SIMに入れ替えてみることに。APNはsmile.worldで安定なので、それを設定。Nexus Sの横にあるのがb-mobile u300で、普通のFOMAのSIMですね。u300は自分の使い方だと、すこしストレスの感じる遅さでした。料金の事を考えたら仕方ないのかもしれないですが、せめて倍のスピードで同じようなプランがで来てほしいものです。

SMSアプリはHandcentを選択してみました、iPhoneから乗り換えた人にはいいのかも。ちなみにSoftbankのSIMをさしたらMarketに「Softbankメール」が出現。レビューみて、入れるかどうか迷ってますw。

追記:
SMSを実際に運用してみたら、デフォルトのSMSが反応しちゃいますね。デフォルトのSMSの設定をいじくって全部Handcent SMSに任せるようにしないとダメです。

2011年2月5日土曜日

Change Nexus S's boot splash image

Nexus Sの起動時のロゴはgoogleなんですが、これを変更しようというお話。

SurfaceFlinger周りを見てたけど、もっと簡単に主張wできそうなboot splashの変更をやってみました。以下は、わすれっぽい自分のための記録。

基本的には、videoドライバ周りのコードでgoogleのsplashを表示している部分を書き換える方法をとる。gitからNexus Sのkernelをダウンロードして展開しておく。

画像作成はGIMPがおすすめ、RGB24フォーマットをCのヘッダとして書き出すことができるので便利、Ubuntuでのビルド環境があるのなら、いっしょにaptで入れておこう。ロゴを変更する方法としてはGalaxy Sでの方法があるのでここからダウンロードしてヘッダまで作成しておく。同じようにできる。
GIMPで480x800の画像を準備 
画像をCのヘッダとして書き出す 
https://github.com/morfic/Samsung-logo.git を展開 
makelogo.cppを編集してGMPで書き出したヘッダ形式の画像をincludeするように修正 
g++ -o makelogo makelogo.cpp 
cat start_logo.h > my_logo_rgb24_wvga_portlait.h 
makelogo >> my_logo_rgb24_wvga_portlait.h 
cat end_logo.h >> my_logo_rgb24_wvga_portlait.h
    作成した、my_log_rgb24_wvga_portlait.hをdriver/video/samsung以下にコピーしておく

    drivers/video/samsung/s3cfb.c
    --- xxx/s3cfb.c    2011-02-04 01:58:40.124438126 -0800
    +++ yyy/s3cfb.c    2011-02-04 01:50:19.397099076 -0800
    @@ -38,6 +38,7 @@
     #include <linux/suspend.h>
     #endif
     #include "s3cfb.h"
    +#include "my_logo_rgb24_wvga_portrait.h"
    
     struct s3c_platform_fb *to_fb_plat(struct device *dev)
     {
    @@ -96,8 +97,7 @@
             logo_virt_buf = ioremap_nocache(bootloaderfb,
                     fb->var.yres * fb->fix.line_length);
    
    -        memcpy(fb->screen_base, logo_virt_buf,
    -                fb->var.yres * fb->fix.line_length);
    +        memcpy(fb->screen_base, LOGO_RGB24, fb->var.yres * fb->fix.line_length);
             iounmap(logo_virt_buf);
         }
         return 0;
    
    コードを修正したらビルドして、mkbootimgでboot.imgを作成する。

    fastboot boot newlogoboot.img

    などとしてテスト。OKなら書き込む。注意するべきは、codeにtouchしてしまっているのでdirtyフラグが立ってしまう。ここまでcodeにtouchしていなかったのであれば、moduleは今回作成されたものに入れ替えよう。version magicの不一致でロードされないので。

    googleのロゴを完全に消すのはよくわからないので今回パスw。
    起動ロゴはこんな感じでNintendo風。

    2011年2月4日金曜日

    SmartPhones

    EPSON R-D1, LEICA Noctilux E60 F1.0/50mm

    気がついたらこんなことになってましたが、やっぱりiPhoneがきっかけですねぇ。これ以外にもGDD Phoneとかあったりして、、

    いまはAndroid面白くなってきてますね、かなり。あたりまえですけど、sourceが公開されてるってのはモチベーションにつながります。というわけで、今日はSurfaceFlinger周りを探検中。某デバイスのパフォーマンス改善できないかなぁ。。などと妄想中。。

    2011年2月3日木曜日

    k-9とIPv6の問題

    mailアプリはk-9を利用することが多いのですが、受信のPUSH通知があまりうまく動作しなくて困っていました。DDMS起動してちょっとログを調べてみると、ConnectionExceptionが出ていました。どうやらIPv6のアドレス(メールサーバはv6対応のためAAAAの登録があります)に接続しようとして、リンクが存在しないためExceptionが出ているようです。念のためadbでつないでアドレス確認してみると。。


     自宅はFlets光NEXTなのでIPv6がRAされてきますが、このあたりが問題だと思われます。まぁ、Wifiを切るとか、対応方法はいろいろあるかと思いますが。とりあえずはメールサーバをIP(v4)直指定しておきました。
     
    自宅のWifiだとIMAP IDLEきかないよー、という人は、この辺を疑ってみるのもいいかと。

    #ちなみにv6がきちんと使える状態にしてあげたところ、普通にIPv6でメールサーバとやりとりしてました。Androidはいいなぁw。