十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1 修改u-boot中的LOGO
10年积累的网站设计、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有江干免费网站建设让你可以放心的选择与我们合作。更换logo
替换u-boot-imx/2015.04-r0/git/tools/logos/目录下的freescale.bmp,注意这里要替换的图片一定是256色的位图,如果是24位色的图片转换可能会出错,造成图片显示不正常。
我们也可以,直接把自己需要显示的文件不命名为freescale.bmp,那就需要自己修改u-boot-imx/2015.04-r0/git/tools/Makefile文件,将LOGO_BMP=后面的路径设置为自己的图片的名称。
编译的时候,bmp_logo会将我们指定的图片转换为数组文件,保存在/u-boot-imx/2015.04-r0/git/mx6qsabresd_config/include/目录下的bmp_logo.h、bmp_logo_data.h中
2 将图片居中显示
修改u-boot-imx/2015.04-r0/git/drivers/video/cfb_console.c
在函数static
void *video_logo(void)中修改
splash_get_pos(&video_logo_xpos, &video_logo_ypos);
if(video_logo_xpos==0&&video_logo_ypos==0)//这里是增加的代码,设置图片居中显示
{
video_logo_xpos= (VIDEO_VISIBLE_COLS - BMP_LOGO_WIDTH)>>1;
video_logo_ypos= (VIDEO_VISIBLE_ROWS - BMP_LOGO_HEIGHT)>>1;
}
3 去掉编译信息
在函数static
void *video_logo(void)函数中注释掉下面的代码
sprintf(info, "%s", version_string);
space =(VIDEO_COLS - VIDEO_INFO_X) / VIDEO_FONT_WIDTH;
len = strlen(info);
if (len >space) {
int xx = VIDEO_INFO_X, yy = VIDEO_INFO_Y;
uchar p = (uchar) info;
while (len) {
if (len > space) {
video_drawchars(xx,yy, p, space);
len -=space;
p =(uchar *) p + space;
if(!y_off) {
xx += VIDEO_FONT_WIDTH;
space--;
}
yy +=VIDEO_FONT_HEIGHT;
y_off++;
} else {
video_drawchars(xx, yy, p, len);
len = 0;
}
}
} else
video_drawstring(VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *) info);
2 修改Linux启动的logo
1 生成logo文件
生成logo文件,我们需要用png图片来转换
在terminal中运行下面的命令
pngtopnm car.png > car.pnm
#转换png成pnm格式
pnmquant 224
car.pnm > car224.pnm #转换像素数为224
pnmtoplainpnmcar224.pnm > logo_car_clut224.ppm
2 将logo_car_clut224.ppm拷贝到/kernel-source/drivers/video/logo/目录下
3 在/kernel-source/drivers/video/logo/Kconfig下增加
config LOGO_CAR224
bool"Standard car logo"
default y
在/kernel-source/drivers/video/logo/Makefile下增加
obj-$(CONFIG_LOGO_CAR224) += logo_car_clut224.o
4 执行bitbake-c menuconfig -v linux-imx
在menuconfig中选择Standard car logo
5 在/kernel-source/drivers/video/logo/logo.c中的
const struct linux_logo *
__init_refok fb_find_logo(int depth)函数中
if (depth >= 8) {
。。。。。。。
}
里面添加
#ifdef CONFIG_LOGO_CAR224
/ Generic car logo/
logo = &logo_car_clut224;
#endif
在/kernel-source/include/linux/linux_logo.h
中添加externconst struct linux_logo logo_car_clut224;
6 去掉根据CPU的数目显示logo,只显示一个logo
将/kernel-source/drivers/video/fbmem.c
中函数intfb_show_logo(struct fb_info *info, int rotate)
将y =fb_show_logo_line(info, rotate, fb_logo.logo, 0,
num_online_cpus());
改为
y =fb_show_logo_line(info, rotate, fb_logo.logo, 0,
/num_online_cpus()/1);
7 设置logo居中显示
修改/kernel-source/drivers/video/fbmem.c中的
static voidfb_do_show_logo(struct fb_info info, struct fb_imageimage,
int rotate, unsigned
int num)函数
代码如下:
unsigned int x;
unsigned intxoff,yoff;
//添加的代码 ,设置logo居中显示
xoff =(info->var.xres - num * (fb_logo.logo->width ))>>1;
yoff =(info->var.yres - (fb_logo.logo->height ))>>1;
////////////////////////////////////////////////////////////
if (rotate ==FB_ROTATE_UR) {
//添加的代码,设置logo居中显示
image->dx = xoff ;
image->dy = yoff ;
///////////////////////////////
for (x = 0;
x < num && image->dx +image->width <= info->var.xres;
x++) {
info->fbops->fb_imageblit(info,image);
printk(KERN_ALERT"end\n" );
image->dx += image->width + 8;
}
}
修改函数int fb_prepare_logo(struct fb_info *info, int rotate)
在函数的结尾
returnfb_prepare_extra_logos(info, fb_logo.logo->height, yres);
改为
returnfb_prepare_extra_logos(info, fb_logo.logo->height, yres)+((info->var.yres)>>1);
重新编译就大功告成。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。