内核版本为2.6.30.4
为了实现了在linux内核启动时不仅仅是只显示一个静态的全屏logo, 而是显示能够表示内核正在启动的进度条,因此需要能够在启动过程中直接操纵framebuffer的功能。 而进度条则可以很简单的使用多次贴图来实现。
既然在启动时能够显示logo,那么按照自己的要求来贴图也就是可能的。关于logo的显示可以参考fbmem.c和logo.c文件。
在fbmem.c中fb_prepare_logo()调用logo.c中的fb_find_logo()获得struct linux_logo指针,该结构体中包含了logo显示的数据和各种参数如高宽。
然后fbmem.c中fb_show_logo()函数中调用fb_show_logo_line()进行实际的显示操作。不需要管fb_show_extra_logos(),一般这个函数不会有用处的。
在fb_show_logo_line()函数中,根据struct linux_logo中的数据,主要是clut信息,设置好fb_info中的调色板;其次创建一个struct fb_image结构体,该结构体为实际用于显示的变量。将fb_image的数据指向linux_logo中的数据,然后设置到fb_image的显示位置和高宽,最后调用函数fb_do_show_logo()。
fb_do_show_logo()中实际上是调用fb_info中的fb_ops的fb_imageblit()函数将fb_image表示的图像写入到framebuffer中,然后显示出来。
至此,一个logo的显示便完成了。由此看出,如果要显示自己的图像,需要准备和设置的东西包括:图像数据、设置fb_image的各个参数以及设置调色板。
图像数据的获得和自制linux的logo的过程一样ÿ