Linux FB Console---boot logo and the flash cursor


1 Remove the flash cursor when booting into Linux kenrel(开机光标)

 drivers/video/console/fbcon.c 

 change:

   static void fb_flashcursor(void *private) {

    ...

}

   static void fbcon_cursor(struct vc_data *vc, int mode) {

...

}

 

To:

   static void fb_flashcursor(void *private) {

    nothing;

}

   static void fbcon_cursor(struct vc_data *vc, int mode) {

nothing;

}


 

   

2 Customerlization the booting LOGO

     (1)Male kernel support fb LOGO

        

        Device Drivers ---->   Graphics support ---->

       [enable] Bootup logo ----> Standard 224-color Linux logo

     (2) create a new boot logo file named "logo_linux_clut224.png"

     (3)sudo apt-get install netpbm


          #pngtopnm logo_linux_clut224.png>logo_linux.pnm

          #pnmquant 224 logo_linux.pnm > logo_linux_224.pnm

          #pnmtoplainpnm logo_linux_224.pnm>logo_linux_clut224.ppm 

      (4)put the logo_linux_clut224.ppm LOGO at drivers/video/logo  

           

    

      (5)Rebuild the kernel

 

 

3 How to enable or disable the kernel bootup message output to fb device(e.g LCD)

 

    in u-boot or grub or other bootloader

   

    add boot params: quiet

 

 

Add some contents from Internet:

 

1.定制启动画面

a)linux启动画面分为两种,grub使用的背景图片,以及kernel启动时的图片(即一般在启用linux framebuffer设备时出现的小企鹅画面,一般系统有几个CPU,就会出现几个小企鹅)

首先定制grub的背景,要求图像尺寸为640*480(没试过其他尺寸), 而且主机已安装了convert开源图像处理工具。

例如准备了一张图像为splash.bmp,

执行:

convert -geometry 640x480 -colors 14 splash.bmp splash.xpm /*背景要求640x480的尺寸,以及14色*/

gzip -9 splash.xpm

cp splash.xpm.gz /boot/grub

注意备份原有的splash.xpm.gz

再次启动,grub的背景图片已被更改,需要注意的是grub的配置menu.cfg中需要命令行支持splash画面

 b)

linux kernel的启动logo存放于KERNEL_PATH/drivers/video/logo/logo_linux_cult224.ppm

是被编译到内核的,所以不能简单的替换就改变原有的logo,按以下命令制作logo_linux_cult224.ppm

bmptopnm logo.bmp > logo_linux_cult224.pnm            /*格式转换*/

pnmquant 224 logo_linux_cult224.pnm > logo_linux_cult224.pnm  /*将图像改为224色*/

pnmtopnm logo_linux_cult224.pnm > logo_linux_cult224.ppm    /*将图像转存为ppm格式*/

替换新内核中原有的logo_linux_cult224.ppm,注意备份原有的企鹅logo_linux_cult224.ppm。

内核编译后,且以framebuffer方式启动新内核,此时企鹅图标就变成了自定义的LOGO(注意LOGO图像的尺寸不能大于framebuffer的尺寸)

但是在启动中,logo上会有光标在闪烁,如果需要将光标去除(提示console的光标也会消失),将内核中的KERNEL_PATH/drivers/video/console/fbcon.c中的fb_flashcursor和fbcon_sursor函数体置空。重新编译安装内核即可。

 

 

nitrd定制

内核编译安装后,重启可能会遇到类似insmod xxxx.ko error: xxxx.ko exist的错误

这是因为在生存initrd.img文件时,打包软件重复的引入了某些驱动模块

按以下步骤解压initrd.img

新建一个目录用于存放解压的initrd

mkdir initrd

cd initrd

cp /boot/initrd.img initrd.img.gz

gunzip initrd.img.gz

cpio -idcmv < initrd.img

此时initrd目录下生成了诸多文件,其他不理会,编辑init文件,删除其中的重复项,保存并退出

删除旧的压缩文件

rm initrd.img

然后执行以下命令生成新的initrd.img

find . | cpio -c -o > initrd.img

gzip -9 initrd.img

mv initrd.img.gz inird.img

使用新的initrd.img替换boot目录下的对应文件,使用时注意initrd.img的具体文件名,中途勿随意更改中间结果的名称。

 

 

 

 

 

fb设备提供了一个图形硬件的抽象层,代表某些视频硬件的帧缓冲,帧缓冲可以直接通过规范定义的接口供软件访问(/dev/fb*)。我们熟知的Xwindows有一个非加速X服务器,XF86_FBDev就是使用帧缓冲驱动,该驱动最早出现于XFree86   3.2版本中,现在已很成熟。 
帧缓冲在各种显卡硬件各有不同,如ATI   Rage128提供了自己的帧缓冲,Cirrus   Logic,Matrox,PowerVR   2,都有自己的帧缓冲,TGA,VESA,是两种帧缓冲设备标准,VESA由于被大多数现代显卡所具有,所以使用的较为广泛。不同的帧缓冲设备需要在内核编译时使用不同的驱动。所以欲使用帧缓冲必须要拥有具有帧缓冲能力的显示卡。并且不同显卡对帧缓冲的支持能力也不同,如可以使用的分辨率模式(1024*768或800*600)及其下的色深。 

        fb在linux的出现目的最初是为了在linux内核启动开始后,显示linux的logo图标(小企鹅),才增加入内核(是不是觉得有点无聊),这种东西是通过在内核启动时在未进入保护模式之前在bios的帮助下将显卡工作模式置于FB模式下,当然以后我们也不可能再切换回来了,因为大家知道在80x86的保护模式中我们无法使用底层bios功能。 
        后来当然就开始使用它为linux文本控制台提供更大的字体和显示分辨率(如1024*768   32位真彩色),并且可以使用很cool的字体,以区别于80x25列的令人枯燥的文本字体。例如你可以让linux的文本界面像黑客帝国里的尼奥的电脑。Linux2.0之后的内核,你都可以通过在内核启动参数(一般在grub或lilo的配置文件中内核镜像文件名之后)中加一条vga= 让linux在启动时进入帧缓冲控制台模式,linux内核模式号如下: 
  linux内核模式号   =   VESA模式号+   0x200 
所以linux内核模式号如下表 
        |   640x480     800x600     1024x768   1280x1024 
----+------------------------------------- 
256   |     0x301         0x303         0x305         0x307 
32k   |     0x310         0x313         0x316         0x319 
64k   |     0x311         0x314         0x317         0x31A 
16M   |     0x312         0x315         0x318         0x31B 
如果启动时出现问题,大多数情况下是显卡的问题。 

        后来有人使用它为其它的国家语言提供语言平台,如我们的中文平台zhcon就是使用fb来显示中文字体。 
        当然还有就是前面提到过的X   Server:XF86_FBDev 

 

 

 

你可能感兴趣的:(LINUX,DRIVER)