//--------------------------------------------------------------------------------------------
// 作者:longtian635241([email protected])
// 論壇ID:idea6410
// 版權:idea6410
// 平臺:友堅idea6410開發板
// 發佈日期:2012-11-19
// 最後修改:2012-11-19
//http://www.urbetter.com/main.asp
//----------------------------------------------------------------------------------------------
實驗平臺:友堅android210、ubuntu10.04
1、安裝圖形轉換軟件
$ sudo apt-get install netpbm
2、轉換圖片
$ pngtopnm android210.png > android210.pnm
說明:用來轉換的圖片必須爲 png 格式(可以用windows下軟件保存爲png格式),否則會有如下提示:
pngtopnm: input file not a PNG file
$ pnmquant 224 android210.pnm >android210.pnm
pnmcolormap: making histogram…
pnmcolormap: 5854 colors found
pnmcolormap: choosing 224 colors…
pnmremap: 222 colors found in colormap
注意:此處 pnmquant 必須輸出到另一個不同名的文件,否則會出現如下錯誤提示
eg:$ pnmquant 224 android210.pnm > android210.pnm
pnmcolormap: EOF / read error reading magic number保存
pnmcolormap failed, rc=256
$ pnmtoplainpnm android210.pnm > android210.ppm
其實用這個工具製作的圖片很可能失真~這時我們在轉換前,在window是下用ACDsee將圖片的顏色:真彩色(24位)改爲256色(8位),效果會好些~
第二種方法:使用windows下的IrfanView軟件來製作ppm格式圖片
用IrfanView打開圖片:
a、選擇圖像->減少色深->自定義224->確定
b、選擇圖像->調整尺寸->去掉縱橫比選項後然後設置爲屏的分辨率
c、圖片另存爲ppm格式選擇保存爲ascii碼格式!保存就製作成功了!
3、然後用轉換好的 android210.ppm 替換 kernel/drivers/video/logo/logo_linux_clut224.ppm(最好先做好備份),然後刪除同一目錄下的 logo_linux_clut224.c 文件,重新編譯內核即可
配置支持logo
$ make menuconfig //在內核裏面選上logo 支持Device Drivers --->
[*] Graphics support --->
[*] Bootup logo --->
[*] Standard black and white Linux logo
[*] Standard 16-color Linux logo
[*] Standard 224-color Linux logo
如果想要單獨顯示,將現在生成的圖片添加進內核,就需要修改linux-x-xx/drivers/vedio/logo下的Makefile和Kconfig文件將這個添加進去。
bool "Standard xx 224-color Linux logo"
depends on LOGO
default y
logo = &logo_linux_xx_clut224;
#endif
然後執行重新make內核,make之前需要執行make clean或者是指定clean(make clean SUB_DIR=./drivers/video/logo/)目錄。
3、如何將開機logo中的光標去除
在內核的當前目錄進入到drivers/video/console/fbcon.c文件
將static void fb_flashcursor(void *private)製成空函數如下
386 static void fb_flashcursor(void *private)
387 {
388 #if 0 //modify by yejj for clear cursor of lcdc
389 struct fb_info *info = private;
390 struct fbcon_ops *ops = info->fbcon_par;
391 struct display *p;
392 struct vc_data *vc = NULL;
393 int c;
394 int mode;
395
396 acquire_console_sem();
397 if (ops && ops->currcon != -1)
398 vc = vc_cons[ops->currcon].d;
399
400 if (!vc || !CON_IS_VISIBLE(vc) ||
401 registered_fb[con2fb_map[vc->vc_num]] != info ||
402 vc->vc_deccm != 1) {
403 release_console_sem();
404 return;
405 }
406
407 p = &fb_display[vc->vc_num];
408 c = scr_readw((u16 *) vc->vc_pos);
409 mode = (!ops->cursor_flash || ops->cursor_state.enable) ?
410 CM_ERASE : CM_DRAW;
411 ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
412 get_color(vc, info, c, 0));
413 release_console_sem();
414 #endif
415 }
同樣的方法將函數static void fbcon_cursor(struct vc_data *vc, int mode)用空函數替換如下
1304 static void fbcon_cursor(struct vc_data *vc, int mode)
1305 {
1306 #if 0 //modify by yejj for clear cursor of lcdc
1307 struct fb_info *info
另一種禁止光標的方法:
drivers/video/console/Makefile
#obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o softcursor.oobj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o編譯遇到一個soft_cursor沒有定義的問題問題,註釋代碼:drivers/video/console/bitblit.c//ABING// if (err)// soft_cursor(info, &cursor);
Linux Logo製作工具 : LogoMaker.tgz 4.7MB
http://www.arm9.com.cn/downloads.htm
LogoMakers可以讓你十分方便地製作linux logo文件,它基於Fedora 9平臺開發並使用。其使用方法十分簡單,打開一個圖形文件(Jpeg, bmp或者png格式),然後點轉換按鈕就可以了;它會固定輸出文件名:logo_linux_clut224.ppm,該文件一般位於內核源代碼目錄kernel-src/drivers/video/logo中,替換之後再重新編譯一下內核就可以看到你所喜愛的linux logo了。
注意:LogoMaker程序實際調用了netpbm工具組,因此要確保你的PC Linux系統安裝了此工具,方可轉換成功。
logo居中:
1、設置logo圖片在屏幕中的位置
vi drivers/video/fbmem.c
找到"fb_show_logo_line"函數,把
image.dx = 0;
image.dy = y;
改爲
image.dx = (info->var.xres/2) - (610/2);
image.dy = (info->var.yres/2) - (206/2);
[注:
info->var.xres和info->var.yres是分辨率大小
610和206是logo圖片的大小
]
2、
vi drivers/video/console/fbcon.c
找到"fbcon_prepare_logo"函數,在
logo_height = fb_prepare_logo(info, ops->rotate);
後面加上
logo_height += (info->var.yres/2) - (206/2);
添加新圖片:
在Makefile中有這麼一句:extra-y += $(call logo-cfiles,_clut224,ppm)
它的意思是在當前找到以"_clut224"結尾的ppm圖片,然後根據它生成.c文件,所以添加新的圖片名可以
類似這樣:logo_linux_sullg_clut224.ppm
1.Makefile,加入一行
obj-$(CONFIG_LOGO_LINUX_SULLG_CLUT224) += logo_linux_sullg_clut224.o
2.Kconfig,加入
config LOGO_LINUX_SULLG_CLUT224
bool "Standard 224-color Linux logo for sullg"
default y
3.logo.c,加入
extern const struct linux_logo logo_linux_sullg_clut224;
在"fb_find_logo"中找到"#ifdef CONFIG_LOGO_LINUX_CLUT224",在其後加入:
#ifdef CONFIG_LOGO_LINUX_SULLG_CLUT224
logo = &logo_linux_sullg_clut224;
#endif
Android系統開機動畫包括兩部分:
開機顯示的 ANDROID 文字;
ANDROID發光動畫。
這篇文章說的開機動畫是第一種,下面開始正文!
1. 製作當前屏幕像素的圖片(模擬器默認爲320*480)
使用PS製作一張320*480的圖片,保存時選“保存爲 Web 所用格式”,然後在彈開的窗口上,“預設”項選擇“PNG-24”,保存爲android_logo.png
注:好像只支持png-24,其他格式生成的rle文件顯示不正常,有興趣大家可以再驗證一下。
2. 將圖片轉換爲raw格式
使用linux下的ImageMagick自帶的convert命令,進行raw格式轉換,命令爲:
convert -depth 8 android_logo.png rgb:android_logo.raw
注:ubuntu 10.04 默認已經安裝ImgageMagick工具,如果當前系統沒有安裝,可以執行下面的命令安裝:
sudo apt-get install imagemagick
3. 將raw格式轉化爲rle文件
需要用到android編譯後的rgb2565工具,在android/out/host/linux-x86/bin目錄下(android爲當前源碼所在目錄),轉換命令如下:
rgb2565 -rle < android_logo.raw > initlogo.rle
到目前爲止,啓動需要顯示的圖像已經做好了,就是initlogo.rle,注意文件名必須是這個,如果想改文件名,需要修改android/system/core/init/init.h中的宏:
#define INIT_IMAGE_FILE "/initlogo.rle"
============================================================================================
下面需要將initlogo.rle加入的android文件系統中
4. 找到ramdisk.img文件(android/out/target/product/generic/ramdisk.img),將文件名改爲ramdisk.img.gz,然後使用下面的命令解壓:
gunzip ramdisk.img.gz
解壓後得到ramdisk.img,可能有人要問,怎麼文件名又改回去了?其實不然,使用file ramdisk.img查看一下就知道了:
解壓前:ramdisk.img: gzip compressed data, from Unix
解壓後:ramdisk.img: ASCII cpio archive (SVR4 with no CRC)
跑題了,還是說正事兒。
5. 使用cpio提取文件:
新建一個temp目錄:
mkdir temp
cd temp
cpio -i -F ../ramdisk.img
6. 導出文件列表:
cpio -i -t -F ../ramdisk.img > list
注:list是一個文本文件,裏面存儲了ramdisk.img的文件結構,我們需要在這個文件中加入initlogo.rle這一行,修改後的文件如下:
data
default.prop
dev
init
init.goldfish.rc
init.rc
initlogo.rle
proc
sbin
sbin/adbd
sys
system
7. 生成ramdisk.img
cpio -o -H newc -O ramdisk.img < list
注:根據list文件的描述,生成ramdisk.img文件
8. 用ramdisk.img覆蓋sdk目錄下的ramdisk.img(android-sdk-windows/platforms/android-2.1/images/ramdisk.img),最好先備份一下。
9. 啓動模擬器,就可以看到我們自己做的的開機界面了。
------------------------------------------------------------------------------------------------------------------
開機第三屏(android動畫)
編譯成功後在android源碼根目錄生成out目錄,
修改android\out\target\product\sdkDemo\system\framework目錄下的framework-res.apk
用winrar格式打開,替換assets\images裏的2張圖片即可
開機第二屏(android字樣)
1、選張320*480分辨率的圖
2、將圖轉換成raw,用Advanced Batch Converter工具即可
3、虛擬機android\out\host\linux-x86\bin目錄下執行
./rgb2565 -rle <android_logo.raw> initlogo.rle
4、將initlogo.rle放置到android\out\target\product\sdkDemo\root下即可
如果不放置 則顯示的是源碼init.C init.c.bak裏
5、make firmware
6、全部重燒
開機第一屏(Linux企鵝圖樣)
1、選張png格式的圖片,在Linux下執行:
# pngtopnm logo.png > logo_linux.pnm
# pnmquant 224 logo_linux.pnm > logo_linux_clut224.pnm
# pnmtoplainpnm logo_linux_clut224.pnm > logo_linux_clut224.ppm
將生成的ppm拷貝到drivers\video\logo目錄下
如果想要修改菜單配置 可以在kernel目錄下執行make menuconfig
進Device Drivers
進Graphics Support
進Bootop logo
進standard 224-clor Linux logo選擇性加入圖片
在有實現LCD顯示和LCD命令行終端的U-boot中,在左上角都有顯示一個logo,如果是atmel的芯片,就會有atmel的logo,三星的則是denx的logo。
有的網友發郵件說想改成自己公司的Logo,而且如果是自己玩的話,改成自己喜歡的logo也爽阿。所以今天我做好了實驗,將簡單的修改方法總結如下:
一、圖片的放置路徑
所有的開機logo都放在了 /tools/logos 之下,你只需要將你的班子作對應的logo替換就好了。
對於S3C2440,你只需要將denx.bmp替換成你想要的logo就好了。
對於ATMEL的芯片,據說會顯示ATMEL的logo,所以替換那個logo即可。
但是你所替換的logo必須和原來的大小、格式一模一樣,否則會出現u-boot使用過程中宕機重啓的後果。
在製作圖片前,請您現確認您的Linux主機上安裝了Netpbm工具包。如果是ubuntu,你可以直接用新立得安裝;如果是別的發行版,可以在 Netpbm主頁 下載源代碼編譯。
將你想要的圖片裁減成160*96的JPG圖片,然後用以下的腳本處理一下就好了:
|