显示标签为“logo”的博文。显示所有博文
显示标签为“logo”的博文。显示所有博文

星期一, 一月 28, 2008

2.6的Kernel LOGO真容易改

试着改了一下,似乎比2.4容易。2.6的logo数据在/drivers/video/logo里,ppm文件就是logo图像了。每个ppm对应一 个.c文件,内容大概就是图像尺寸、调色板、位图数据等信息。.c文件无需自己建立,在make的时候如果不存在某个ppm文件对应的.c文件,就会自动 从ppm生成一个,然后把它编译成.o文件。所以看看目录下哪些.ppm文件有同名的.o文件,就说明那个logo被编译进了kernel。标准的224 色logo是logo_linux_clut224.ppm,因此修改这个图片就可以实现修改logo了。 在windows下,可以用PaintShopProX直接打开ppm进行编辑,编辑完毕后用decrease color depth命令降为224色,然后保存,把logo_linux_clut224.c删掉,重新make就可以了。这个是我昨晚随便改的logo :


在 深入一点点。很容易发现,对于一般的vga console,logo是由drivers/video/fbmem.c里的fb_show_logo()函数显示的,这个函数的调用者是 drivers/video/console/fbcon.c(跟2.4差不多,嗯)。这个函数做的事情不多,就是先把非8位色深的位图转换为8位色深, 然后用info->fbops->fb_imageblit(info, &image);把logo显示出来,有一个cpu时显示一个logo,有2个cpu时显示2个,以此类推。
略加修改,就可以实现将logo居中显示,并加入一个“重复显示右边界”,也就是把logo最右边4个点宽的区域作为背景填充到整个logo bar。diff如下:

--- /gs2e/source/linux26-2edev/drivers/video/fbmem.c2006-08-29 14:07:15.000000000 +0800
+++ ./fbmem.c2006-09-27 20:40:08.000000000 +0800
@@ -375,9 +375,9 @@
int fb_show_logo(struct fb_info *info)
{
u32 *palette = NULL, *saved_pseudo_palette = NULL;
-unsigned char *logo_new = NULL;
-struct fb_image image;
-int x;
+unsigned char *logo_new = NULL, *border = NULL;
+struct fb_image image, imageborder;
+int x, xoffset;

/* Return if the frame buffer is not mapped or suspended */
if (fb_logo.logo == NULL || info->state != FBINFO_STATE_RUNNING)
@@ -421,12 +421,45 @@
image.height = fb_logo.logo->height;
image.dy = 0;

+#ifdef CONFIG_LOGO_REPEAT_RIGHT
+border = kmalloc(4 * fb_logo.logo->height, GFP_KERNEL);
+if (border != NULL){
+ for (x = 0; x < fb_logo.logo->height; x++){ /* use x as y */
+*((u32 *)border + x) = /* will repeat 4 pixels of the right side*/
+*(u32 *)(image.data + (x+1)*fb_logo.logo->width - 4);
+ }
+ imageborder.depth = 8;
+ imageborder.data = border;
+ imageborder.width = 4;
+ imageborder.height = image.height;
+ imageborder.dy = 0;
+ for (x = 0; x < info->var.xres; x+=4){
+imageborder.dx = x;
+info->fbops->fb_imageblit(info, &imageborder);
+ }
+ kfree(border);
+}
+#endif
+#ifndef CONFIG_CENTER_LOGO
+xoffset = 0;
for (x = 0; x < num_online_cpus() * (fb_logo.logo->width + 8) &&
x <= info->var.xres-fb_logo.logo->width; x += (fb_logo.logo->width + 8)) {
image.dx = x;
info->fbops->fb_imageblit(info, &image);
}
-
+#else
+xoffset = (info->var.xres - num_online_cpus() * (fb_logo.logo->width + 8))>>1;
+if (xoffset<0)xoffset = 0;
+ for (x = xoffset; x < num_online_cpus() * (fb_logo.logo->width + 8) + xoffset &&
+ x <= info->var.xres-fb_logo.logo->width+xoffset; x += (fb_logo.logo->width + 8)) {
+ image.dx = x;
+ info->fbops->fb_imageblit(info, &image);
+}
+#endif
kfree(palette);
if (saved_pseudo_palette != NULL)
info->pseudo_palette = saved_pseudo_palette;
我在这里定义了两个配置变量,CONFIG_LOGO_REPEAT_RIGHT和CONFIG_CENTER_LOGO,修改/drivers/video/logo/Kconfig,加上:
config CENTER_LOGO
bool "Center logo"
depends on LOGO
default n
config LOGO_REPEAT_RIGHT
bool "Repeat the right border (4 pixels)"
depends on LOGO
default n
这样就可以在make menuconfig之类的界面中设置是否开启这两项功能了。 更多关于logo hack的信息,可以参考: http://gentoo-wiki.com/HOWTO_Linux_Logo_Hack

Read More...

[Linux] 更換Linux Boot up Logo

2.4 kernel 需要浩大工程才能完成的 Logo更換, 沒想到在2.6 中是
a piece of cake....
如何換咧?

別吵!! 準備好飲料爆米花, silence your mobile phone, 我們正式開始.

1. 到http://kernel.org下載2.6 kernel, 目前已經到2.6.11.4了!

2. 準備好美美的圖片, 使用png 格式, 顏色要少於224, 此例是使用1024x80.
使用pngtopnm及pnmtoplainpnm這兩個tool來轉換
pngtopnm my_logo.png | pnmtoplainpnm > logo_linux_clut224.ppm
cp logo_linux_clut224.ppm /your_kernel_source/drivers/video/logo/

3. Untar kernel source code後, 執行 make menuconfig
Graphics Support ->
[*] Support for frame buffer devices
[*] VESA VGA graphics support

Console display driver support ->
[*] Video mode selection support

<*> Framebuffer Console support

[*]Select compiled-in fonts
[*]VGA 8x16 font

Logo configuration->
[*]Bootup logo
[*] Standard 224-color Linux logo

4. 接下來就是compile kernel囉, 這都不會就收工了 =.=|||
make bzImage

5. 選好心儀的bootloader, 在append 參數中, 加上 'vga=0x318' 會設定
開機時使用1024x768 24bit的模式.

6. 開機試試囉... Enjoy yourself ^_^

Read More...

lInux下修改logo

但你如果想在LCD上显示自己的Logo,那下面我介绍一下自定义Logo的方法:
    (1)进入
linuxkde图形界面,使用The  GIMP 图像编辑器打开你想要的图像文件,依次选择图像->模式->索引颜色,将颜色改为224色;至于图片大小,不要大于你的显示器分辨率就好(我只试过80*80和320*240的大小),最后将文件保存为ppm格式(ASCii码),文件名为:logo_linux_clut224.ppm。
    (2)将logo_linux_clut224.ppm拷贝到/drivers/video/logo文件夹下,替换原有的文件(记得备份啊,以防万一)。
    (3)重新编译内核,tftp到开发板启动。

Read More...

linux启动logo修改

本文针对的嵌入式系统为Intel Xscale pxa255 400MHz, Linux OS.

一般的嵌入式系统刚启动时,在显示屏的左上方都会出现一个小企鹅的logo,如何才能将该logo改为我们喜欢的图片,比如自己的照片,风景或公司的图标呢,下面给出了答案.虽然本文针对的是嵌入式系统,但对PC机系统也是一样的.

1)首先下载linux progress project软件包lpp-0.4.2.tar.gz,解压,在contrib的boot_logo目录中运行make,生成boot_logo工具;

2)将要在启动时显示的图片用GIMP打开,另存为origin.pcx格式文件;
3)运行#convert -colors 214 -dither -resize 640x480 origin.pcx converted.pcx生成214色,640x480的pcx文件,
注意不要生成800x600的格式,这种情况下生成的内核会死机,可能是因为内核太大,将存放文件系统的Flash给Erase掉的缘故;
4)运行./boot_logo convertd.pcx linux_logo.h生成linux_logo文件,将它拷贝到/include/linux/目录下,
修改drivers/video/fbcon.c为
#define LOGO_H 480
#define LOGO_W 640
重新编译内核即可.

Read More...