1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > linux驱动开发扩展--内核启动logo

linux驱动开发扩展--内核启动logo

时间:2020-02-02 00:39:31

相关推荐

linux驱动开发扩展--内核启动logo

static struct logo_data {int depth;int needs_directpalette;int needs_truepalette;int needs_cmapreset;const struct linux_logo *logo;} fb_logo __read_mostly;

里面包含了色深depth以及一些调色板数据和logo数据指针

struct linux_logo {int type;/* one of LINUX_LOGO_* */unsigned int width;unsigned int height;unsigned int clutsize;/* LINUX_LOGO_CLUT224 only */const unsigned char *clut;/* LINUX_LOGO_CLUT224 only */const unsigned char *data;};

该结构体中包含了logo本身的所有信息以及图像数据,这些数据并没有直接出现在内核源码中,内核源码中只能找到logo信息数据的声明

真正的数据来自于drivers/video/logo下对应的.ppm文件,文件的前缀名必须与内核源码中所用到的logo信息数据变量相同

.ppm文件其实就是用文本的方式存储了logo图像的信息和图像数据,可以使用文本方式打开进行查看

drivers/video/samsung/s3cfb.c

static int __devinit s3cfb_probe(struct platform_device *pdev){...#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) && defined(CONFIG_LOGO)if (fb_prepare_logo( fbdev->fb[pdata->default_win], FB_ROTATE_UR)) {printk("Start display and show logo\n");/* Start display and show logo on boot */fb_set_cmap(&fbdev->fb[pdata->default_win]->cmap, fbdev->fb[pdata->default_win]);fb_show_logo(fbdev->fb[pdata->default_win], FB_ROTATE_UR);}#endif...}

上面这段代码是用于在内核启动阶段显示logo的

fb_prepare_logo

获取色深

fb_logo.logo = fb_find_logo(depth); 根据色深和配置将目标logo数据绑定到fb_logo.logo

logo = &logo_x210_clut224;

根据显示时的旋转角度进行一些值得确定

如果logo的大小超限则清除之前获得的logo数据直接返回

如果所要求的深度与我们所得到的不同则进行一些数据处理

fb_show_logo

y = fb_show_logo_line(info, rotate, fb_logo.logo, 0,num_online_cpus()); 真正显示logo

进行一些判断和数据确定

fb_do_show_logo(info, &image, rotate, n); 该函数内部根据显示的旋转角度调用实际操作硬件fb的函数进行显示

info->fbops->fb_imageblit(info, image); 实际操作硬件fb的函数

内存释放

自定义logo

提供一个.ppm文件格式的logo信息数据文件在drivers/video/logo目录下,如何由普通的图片格式得到.ppm文件格式请百度在内核源码include/linux/linux_logo.h文件中添加对应的struct linux_logo类型的logo信息数据变量声明,变量名需要与.ppm格式的文件的前缀相同在内核源码drivers/video/logo/logo.c文件中的fb_find_logo函数的正确位置添加对应的条件编译和logo信息数据变量的赋值传递在drivers/video/logo/Makefile中添加对应的项,使得对应的条件编译成立时编译阶段可以由.ppm文件得到对应的.o文件在drivers/video/logo/Kconfig中添加对应的项,方便我们可以在配置阶段make menuconfig将对应的条件编译使能或失能在drivers/video/samsung/s3cfb.c的s3cfb_probe函数中修改fb_prepare_logo函数和fb_show_logo函数的参数确定显示时的旋转角度在drivers/video/fbmem.c的fb_show_logo_line函数中修改image.dx和image.dy确定我们要显示的位置

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。