编者:linux的开机默认logo是一只可爱的小企鹅。这里我们可以把它换成我们自己喜爱的图片,只要将linux-2.6.32.2/drivers/video/logo/linux_logo_clut224.ppm替换成自己的图片即可。方法很简单,照着操作基本就没问题。以下按照手册介绍两种方法。注意在进行图片的转换时候,一定要先注意图片的大小,要和使用的液晶屏的大小匹配。我这是320*240的。
1 使用命令行工具修改Linux LOGO
linux-2.6.32.2/drivers/video/logo/linux_logo_clut224.ppm文件是一个特殊格式的图像文件,有很多方法可以把普通的图片转换为logo 文件,最常用的就是netpbm 工具组。“netpbm”是一组命令行的工具,它可以转换很多格式的图片,在此以png 格式为例介绍一下如何把普通的PNG 文件转换为我们需要的Linux LOGO 图片:假定我们要转换的文件名为linux_logo.png,首先将png 图片转成pnm
# pngtopnm logo_linux.png >logo_linux.pnm
然后将pnm 图片的颜色数限制在224
# pnmquant 224 logo_linux.pnm > logo_linux_clut224.pnm
最后将pnm 图片转换成我们需要的ppm
# pnmtoplainpnm logo_linux_clut224.pnm > logo_linux_clut224.ppm
然linux_logo_clut224.ppm 替换linux-2.6.32.2/drivers/video/logo 中对应的图像就可以
了。
2 使用图形化的LogoMaker 制作Linux LOGO
友善公司设计了一个图形界面的制作工具LogoMaker,它基于Fedora 9 平台开发,其实它的底层调用的就是上述命令行工具,如果你运行的结果出现浮点数错误,那可能你使用的平台并非Federa9,如果在Fedora9 下运行出现如图错误,你可能没有正确安装netpbm 工具。
下面是Linux LogoMaker 的使用步骤(摘自mini2440 用户手册),请先按照用户手册第五章节安装好logomaker 工具程序,在任意命令行输入logomaker,就可以启动它,打开时它会显示一幅缺省的花朵图片。
点File->Open a picture file…或者使用快捷键Ctrl+O 可以打开一个图片文件,在跳出的文件打开窗口中选择一个图片,这时点File->Convert the picture to a Linux Logo File,或者使用快捷键Crtl+C 会跳出文件保存目录窗口,不需要输入任何东西,选择要保存的目录即可,文件名将会自动保存为logo_linux_clut224.ppm,使用这个文件代替linux-2.6.32.2/drivers/video/logo 目录下的同名文件即可。
2、配置logo选项
在内核路径下执行make menuconfig
开发板上开启logo显示的选项
Device Drivers --->Character devices ---》Bootup logo
a、选择虚拟控制台为控制台显示驱动做准备
Device Drivers --->Character devices ---> Virtual terminal
[*] Support for console on virtual terminal
b、选择虚拟控制台显示驱动
Device Drivers --->Graphics support --->下有这个选项Console display driver support --->
根据你的硬件选择由Framebuffer还是VGA
[*] Framebuffer Console support或者
[*] VGA text console
c、Device Drivers --->Graphics support --->
<*> Support for frame buffer devices
<*> MXC Framebuffer support下选择是VGA还是TVOUT
[*] tvout CH7024 on MX27 //TVOUT
[*]support VGA daughter //VGA
当然以上的配置选项,因平台而异会有些小的差别。
做好以上两个步骤,你就可以重新编译内核,将其烧到开发板,接VGA或者TVOUT显示。
这样你可以看到你自己制作的logo,你可以发现在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
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.bootloader里修改启动参数 char *Linux_params ="noinitrd root=/dev/mtdblock2 init=/Linuxrc console=tty0,ttySAC0,115200 mem=64M devfs=mount";
noinitrd no init ramdisk support
mtdblock2 nand flash的第三个分区作为rootfs
console=tty0,ttySAC0,115200 系统启动信息的前半部分(bootloader+kernel前部分)显示在ttySAC0(串口终端),115200表示波特率,kernel的后半部分启动信息加载到tty0(LCD终端)
64M 64M内存
2.配置内核make menuconfig时,修改boot option为 noinaitrd root=/dev/mtdblock2 init=/Linuxrc console=tty0,ttySAC0,115200 mem=64M devfs=mount
3.UBOOT作为bootloader时,修改UBOOT环境变量bootargs setenv bootargs 'noinitrd root=/dev/mtdblock2 init=/Linuxrc console=tty0,ttySAC0,115200' saveenv(保存变量)
Linux-BootLoader = Superboot210.bin
Linux-Kernel = Linux/zImage_ myarm
Linux-CommandLine = root=/dev/mtdblock4 rootfstype=yaffs2 console=tty1,ttySAC0,115200 init=/linuxrc
Linux-RootFs-InstallImage = Linux/ myarm .img