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風。

    1 コメント:

    Income School さんのコメント...

    Sorry but it dint work....What should i do...???

    コメントを投稿