imax6q项目:实现linux多logo的灵活更换

1.uboot:

添加参数setenv logo_type "logo_type=0'',这里logo_type作为logo配置类型,

可任意设定,以供kernel获取。

2.logo脚本制作:将png图片转为kernel可识别的文件类型

vim mk_logo.sh

在mk_logo.sh中添加以下内容:

logo=$1

if [ -z ${logo} ];then
echo "err: no file"
exit
fi

sudo pngtopnm ${logo}.png > ${logo}.pnm 
sudo pnmquant 224 ${logo}.pnm > ${logo}_clut224.pnm
sudo pnmtoplainpnm ${logo}_clut224.pnm > ${logo}_clut224.ppm

rm ${logo}.pnm
rm ${logo}_clut224.pnm

通过./mk_logo.sh logo_xxxxx生成logo_xxxxx.ppm,将logo_xxxxx.ppm拷贝到drivers/video/logo下。

3.kernel:

1)修改Kconfig

config LOGO_XXXXX
bool "xxxxx logo"
default y

2)修改Makefile

obj-$(CONFIG_LOGO_XXXXX) += logo_xxxxx.o

3)修改drivers/video/logo/logo.c

添加获取boot args  logo_type的代码,

static int logo_type = 3;
static int __init logo_type_setup(char *str)
{
if (!strncmp(str, "0", 1)) 
{
logo_type = 0;
} else if (!strncmp(str, "1", 1))
{
logo_type = 1;
}
return 1;
}

__setup("logo_type=", logo_type_setup);

在fb_find_logo函数添加如下代码,

#ifdef CONFIG_LOGO_XXXXX
printk("[debug]:logo type = %d \n", logo_type);

switch(logo_type)

{

case 0: logo = &logo_xxxxx_0; break;

case 1: logo = &logo_xxxxx_1; break;

case 2: logo = &logo_xxxxx_2; break;

//添加自己的logo

}
#endif

4.错误修改:显示logo时,由于分辨率的问题可能会导致报“fbcon_init: disable boot-logo (boot-logo bigger than screen)”错误

修改drivers/video/console/fbcon.c,

注销 ://logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
 添加:logo_lines=(logo_height)/vc->vc_font.height;


5.总结,通过上述,就实现uboot配置kernel显示不同的logo,避免了更换logo时,kernel的不兼容问题。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值