カーネル修正Android起動プロセスロゴ修正

3891 ワード

本稿では、カーネルの修正内容を主に紹介します.
ここではubuntuで操作していますrootユーザーでログインしたので、まずnetpbmライブラリをインストールします.
実行:apt-get install netpbm
Androidシステムで最初にロゴを表現するのはカーネルの中にあるので、まずカーネルのロゴを修正します.
一.カーネル内の関連変更
linuxカーネルロゴ製造スクリプトmklogoをコンパイルする.sh、内容は以下の通りです.
#!/bin/sh

pngtopnm logo.png > linuxlogo.pnm

pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm

pnmtoplainpnm linuxlogo224.pnm > logo_linux_gzsd_clut224.ppm

rm linuxlogo.pnm linuxlogo224.pnm

選択したロゴをpngフォーマットに変換し、ロゴと名付けます.pngとmklogo.shは統一経路の下に置く.実行./mklogo.sh最後にlogo_を生成linux_gzsd_clut224.ppm
このネーミングは自由に変更できますが、ロゴを守らなければなりません.yourname_typeのようなネーミング方法は、ここでは*_のみを羅列します.clut224.ppmの命名方法、その他のフォーマットの命名方法はdrivers/video/logo/Makefileファイルを参照してください.
logo_をlinux_gzsd_clut224.ppmファイルはカーネルソースのdrivers/video/logo/ディレクトリの下に配置されます
drivers/video/logoディレクトリへ
    1.Kconfigファイルの変更
追加:endif#LOGOの前に
    
config LOGO_LINUX_GZSD

        bool "gzsd logo"

        default n

    2.Makefileファイルの変更
追加:
    obj-$(CONFIG_LOGO_LINUX_GZSD)       += logo_linux_gzsd_clut224.o
    3.logo.c中関数fb_find_logoのif(depth>=8)の上に追加:
    #ifdef CONFIG_LOGO_LINUX_GZSD                 logo = &logo_linux_gzsd_clut224; #endif
    4.カーネルソースディレクトリのinclude/linux/linux_logo.hで増加
    extern const struct linux_logo logo_linux_gzsd_clut224;
毎日同じ理屈
根気は、千里の堤防の一砂一石の凝集であり、少しずつ蓄積されてこそ、前に頭を見ないと尾を見ない壮麗さがある.根気は、春蚕が糸を吐いて一筋一筋一筋に囲まれ、一筋に堅持してこそ、繭を破って再び光の輝きを見ることができる.根気は、遠航する船の帆で、帆があって、船はやっと成功の向こう岸に着くことができます.
    5.端末でmake menuconfigを実行する、を選択する.
    Device Drivers  ---> Graphics support  --->Bootup logo  --->gzsd logo
保存終了後にコンパイル
    6.LCDコンソールのカーソル禁止
カーネルソースディレクトリの下drivers/video/console/fbcon.c中
注記削除関数:fb_Flashcursorとfbcon_cursor内のすべての内容
    7.ロゴの画面の横に表示させます.
    drivers/video/fbmem.c
関数fb_の変更do_show_ロゴは以下の通り
static void fb_do_show_logo(struct fb_info *info, struct fb_image *image,

			    int rotate, unsigned int num)

{

	unsigned int x;

	int xoff,yoff; 



	/**for central logo**/ 

	xoff = (info->var.xres - num * (fb_logo.logo->width + 8))>>1; //    x  

	yoff = (info->var.yres - num * (fb_logo.logo->height + 8))>>1; //    y  



	if (rotate == FB_ROTATE_UR) {

		for (x = 0; x < num && image->dx + image->width <= info->var.xres; x++) {

			image->dx = xoff; 

			image->dy = yoff; 

			info->fbops->fb_imageblit(info, image);

			image->dx += image->width + 8;

		}

	} 

	else if (rotate == FB_ROTATE_UD) {

		for (x = 0; x < num && image->dx >= 0; x++) {

			info->fbops->fb_imageblit(info, image);

			image->dx -= image->width + 8;

		}

	} 

	else if (rotate == FB_ROTATE_CW) {

		for (x = 0; x < num && image->dy + image->height <= info->var.yres; x++) {

			info->fbops->fb_imageblit(info, image);

			image->dy += image->height + 8;

		}

	} 

	else if (rotate == FB_ROTATE_CCW) {

		for (x = 0; x < num && image->dy >= 0; x++) {

		info->fbops->fb_imageblit(info, image);

		image->dy -= image->height + 8;

		}

	}

}

再コンパイル
二.Android起動後フラッシュ画面修正:
パス:ファイルシステムのソースコードの下のframeworks/base/core/res/assets/images/の下に2枚の画像があります
    android-logo-mask.png
    android-logo-shine.png
この2枚の画像を修正すればいいので、本来の保存に注意してください.
    
文章の終わりに、プログラマーのジョークの語録を共有します.ソフトウェアエンジニア、ハードウェアエンジニア、プロジェクトマネージャが車に乗ってセミナーに参加しているそうです.残念なことに、盤山道路から下山した時、途中で壊れてしまった.そこで2人のエンジニアと1人のマネージャーは車の修理方法について討論した.ハードウェアエンジニアは「持ち歩いていたスイスのナイフで車の壊れた部分を取り外し、原因を見つけ、故障を排除することができます」と話しています.プロジェクトマネージャは、「経営管理学に基づいて、会議を開き、問題の現状に基づいて需要報告書を書き、計画を作成し、スケジュールを作成し、徐々に近づき、alphaテスト、beta 1テスト、beta 2テストで問題を解決しなければならない」と話しています.ソフトウェアエンジニアリングは「車を山頂に戻してから降りて、問題が繰り返されているかどうかを見なければならない」と話しています.