海思的手机开机卡在logo画面logo是怎样实现 的

制作开机LOGO就是这么简单! - Linux论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [直播]
制作开机LOGO就是这么简单!
发表于 8&小时前  
本帖最后由 weidongshan 于
11:57 编辑
内核:linux-2.6.22.6ubuntu:Ubuntu 9.10开发板: JZ2440(方法通用,不局限于JZ2440)
目的:JZ2440开机logo默认是一只可爱的小企鹅。我们把它替换成我们自己喜爱的图片
准备工作:准备好BMP或者PNG 图片,若是别的格式的图片,可以使用Windows自带的画图软件打开,然后另存为BMP或者PNG格式Logo图片分辨率不小于JZ2440分辨率480*272,否则显示不了。
步骤:1.&&安装资料光盘Ubuntu 9.10没有的图片转换工具netpbm$ sudo apt-get install netpbm 然后输入y //前提是ubuntu能上网
2. 制作linux logo图片假设图片为 jz2440.png(png格式图片)$ pngtopnm jz2440.png & jz2440.pnm$ pnmquant 224 jz2440.pnm & logo224.pnm$ pnmtoplainpnm logo224.pnm &logo_linux_clut224.ppm
假设图片为 jz2440.bmp(BMP格式图片)$ bmptopnm jz2440.bmp & jz2440.pnm$ pnmquant 224 logo.pnm & logo224.pnm$ pnmtoplainpnm logo224.pnm &logo_linux_clut224.ppm 注意:转换后的文件名有规定,必须是logo_linux_clut224.ppm
3.生成的logo_linux_clut224.ppm就是我们需要的logo文件,把它拷贝到内核目录覆盖原来的logo文件$ cd /work/system/linux-2.6.22.6/drivers/video/logo/$ cp /work/logo_linux_clut224.ppm .& &//笔者制作的logo文件在/work/目录
4. 查看logo目录是否存在logo_linux_clut224.o的文件,如果有一定要删除!$ rm logo_linux_clut224.o
5. 配置内核支持logo显示(如果内核用的是linux-2.6.22.6_jz2440.patch补丁,默认已经支持logo显示)$ make menuconfigDevice Drivers ---&&&Graphics support ---&& &&&Console display driver support---&& && && &&*&Framebuffer console support& & Bootup logo ---&& && && &&*& Standart 224-color linux logo
6.重新编译内核,烧写$make uImage把uImage上传到window tftp软件所在目录
进入开发板uboot,作一些必要设置,以PING通windowset gatewayip 192.168.1.1&&//设置网关set netmask 255.255.255.0 //设置子网掩码set ipaddr 192.168.1.111&&//设置uboot阶段的开发板ipset serverip 192.168.1.170 //设置服务器iptftp
uImage //下载uImagenand erase kernel& & //擦除kernel分区nand write.jffs2
kernel //烧写uImage
因为笔者的文件系统在nfs上, 所以先设bootargsset bootargs noinitrd root=/dev/nfsnfsroot=192.168.1.199:/work/busybox-1.21.0/rootfsip=192.168.1.100:192.168.1.199:192.168.1.255:255.255.255.0::eth0 init=/linuxrcconsole=ttySAC0,115200 //设置bootargssave&&//保存环境变量boot //启动开发板
效果:伟大的百问网出来了!
QQ图片11.png (736.42 KB, 下载次数: 0)
8&小时前 上传
注:如果您使用的linux发行版是Fedora,可以使用友善之臂公司提供的工具logomaker制作,具体步骤参考它们用户手册,不在赘述。
12个问题&&&&&&&&9838个浏览
21个问题&&&&&&&&21539个浏览
34个问题&&&&&&&&8110个浏览
Powered by匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。修改Uboot&中文件
1、添加函数LogintImage如下代码:
&/****************************************************************************/
void&LogintImage(void)
&&&&run_command(&sf&probe&0&,1);
&&&&run_command(&sf&read&00&30000&,1);
&&&&setenv(&jpeg_addr&,&0x&);
&&&&setenv(&jpeg_size&,&0x6384&);
&&&&setenv(&vobuf&,&0x&);
&&&&if(0&==&load_jpeg())
&&&&&&&&jpeg_decode();
&&&&//set_vobg(1,&0x000000);
&&&&start_vo(1,1,0);&//&start_vo[dev,&type,&sync],&-&dev&&:&0(HD),&1(AD),&2(SD)
&&&&start_gx(1,0x0,0,0,720,576);
2、在start_armboot函数中加入&调用函数LogintImage语句
void&start_armboot&(void)
&&&.......
&&&LogintImage();
/*&main_loop()&can&return&to&retry&autoboot,&if&so&just&run&it&again.&*/
for&(;;)&{
main_loop&();
然后图片是放在的某个固定地址中的。
本人把图片放在flash的地址c0000&大小30000
具体地址要和run_command(&sf&read&00&30000&,1);上的地址对应。
烧写图片到Flash的步骤如下
mw.b&&ff&30000&&&&&&&&&&&&按回车
tftp&0x&hisi.jpg&
& & & & & &按回车
sf&probe&0&&&&
& & & & & & & & & & & & & & & & &按回车
sf&erase&c0000&30000
sf&write&&c0000&30000&&&&&按回车
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12227次
排名:千里之外
转载:12篇
(1)(1)(2)(6)(4)(1)(2)(3)(1)随笔(38)
希望朋友们多多指点,好的技术或心得一起分享:
看了不少显示kernel开机logo的帖子,在经过数次实验后,针对224位色格式的logo图片进行以下总结:
一.更换开机logo
&&& 嵌入式linux下kernel的开机logo默认图片名为logo_linux_clut224.ppm,因此若有一张png格式的图片,将其换成ppm格式图片即可,转换方法可以用linux下的GIMP绘图软件(将分辨率改成与硬件平台分辨率一致,并转换成224位色格式),另一种方法可以用命令行进行(需要png转换为ppm的工具,自行下载):
&&& pngtopnm mylogo.png & mylogo.pnm
&&& pnmquant 224 mylogo.pnm & mylogo224.pnm
&&& pnmtoplainpnm mylogo224.pnm &
logo_linux_clut224.ppm
&&& 其中mylogo.pnm和mylogo224.pnm为中间生成文件,结束后可以删除。最后将logo_linux_clut224.ppm拷贝值kernel主目录下的driver/video/logo/中,最后编译内核即可。
二.添加开机logo
&&& 自定义logo的制作与配置,(这里仍旧是224位色格式图片,其中custom名称可以自己改变):
1.在kernel目录下:
拷贝.ppm图片至logo目录中:
cp logo_linux_custom_224.ppm driver/video/logo/logo_custom_clut224.ppm
2.修改Kconfig文件:
vi driver/video/logo/Kconfig:
config LOGO_CUSTOM_CLUT224
&& &bool &224-color CUSTOM Linux logo&
&& &default y
3.修改Makefile文件:
vi driver/video/logo/Makefile:
添加:obj-$(CONFIG_LOGO_CUSTOM_CLUT224) += logo_custom_clut224.o
4.修改logo.h文件:
vi include/linux/linux_logo.h:
添加:extern const struct linux_logo logo_custom_clut224;
5.修改logo.c文件
vi driver/video/logo/logo.c:
fb_find_logo函数中:
#ifdef CONFIG_LOGO_LINUX_CLUT224
&& &/* Generic Linux logo */
&& &logo = &logo_linux_clut224;
#ifdef CONFIG_LOGO_CUSTOM_CLUT224
&& &/* Custom Linux logo */
&& &logo = &logo_custom_clut224;
6.make menuconfig 确保自定义logo被选中:
Device Drivers& ---&
&&& Graphics support& ---&
&&&&&& [*] Bootup logo& ---&
&& &&& &&& &........
&&&&&&&&&& [*] 224-color CUSTOM Linux logo
&&& 最后编译内核即可,这样可以使多张logo共存于kernel中,若用户有以后要在文件系统中更改开机logo的需求的话,可以使用这种方法,用户层可以通过fw_setenv工具修改uboot中自定义好的参数,该参数从uboot中传递进kernel,重启后kernel根据参数的值进行判断使用哪一张logo。这样还得在uboot和kernel中添加自定义参数,并进行判断,这个且看下回分解。
&&& 另附logo居中显示方法(注:若图片分辨率和屏幕分辨率相同则不需要):
1.vi driver/video/fbmem.c:
fb_show_logo_line函数中:
&&& image.dx=0;
&&& image.dy=y;
&&& image.width = logo-&
&&& image.heigh = logo-&
&& image.dx = (info-&var.xres / 2) - (image.width / 2);
&& image.dy = (info-&var.yres / 2) - (image.height / 2);
(2)vi driver/video/console/fbcon.c:
fbcon_prepare_logo()函数中:
&& &logo_height = fb_prepare_logo(info, ops-&rotate)
&&&& logo_height += (info-&var.yres / 2) - (logo_height / 2);
&&& 若有些朋友开机无法显示logo,可以参考以下方法试试:
在drivers/video/console/fbcon.c中:
&&& fbcon_prepare_logo函数中:
&&&&&& logo_lines = DIV_ROUND_UP(logo_height, vc-&vc_font.height);
&&&&&&& 修改为:
&&&&&&&& logo_lines = DIV_ROUND_UP(logo_height, (vc-&vc_font.height+1));
*****************************************************************************************
若要对kernel启动logo有更深入的理解可以参见老罗的博客:http://blog.csdn.net/luoshengyang/article/details/7691321/
大神的讲解十分详尽!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:23881次
排名:千里之外
原创:21篇
转载:30篇
(2)(2)(1)(2)(7)(4)(1)(1)(7)(4)(3)(2)(3)(5)(4)(3)uboot里开机LOGO显示功能解析-爱编程
uboot里开机LOGO显示功能解析
&uboot里开机LOGO显示功能解析&& 开机LOGO,对于绝大多数带显示屏的电子产品都是必备的一个功能,是产品开机的第一印象,重要性不言而喻的,那我们下面就看看这个是怎么实现的。&& 要尽早的显示出LOGO就需要在系统真正起来之前的boot阶段就能打通显示,而这个任务大多是以U-BOOT这样的角色来充当,全志平台在android4.4平台就是在u-boot里面实现的,支持的是BMP图片。大家分为几个步骤了,首先要读取图片,再解析图片数据,然后再送到显示部分,最后显示出来。事就是这么个事,说起来简单,理起来也简单,真正写出来的人并不简单,需要对这几个部分都很了解,当然对于平台来说,难度倒不是太大。下面一起看看吧!/*****************************************************************************************************/声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!/*****************************************************************************************************/&& 首先,加载图片到内存中。加载的话,大家比较熟悉的也就是fatload,就是挂载一个fat的文件系统,从这个文件系统里面去读取这个文件的数据到指定内存位置,看看代码吧,也不难! char *const bmp_argv[6] = { &fatload&, &sunxi_flash&, &0&, &&, bmp_name, NULL };
memset(bmp_name, 0, 32);
strcpy(bmp_name, name);
if(do_fat_fsload(0, 0, 5, bmp_argv))
printf(&sunxi bmp info error : unable to open logo file %s\n&, bmp_argv[4]);
return -1;
}& 其次,得到图片原始数据了就需要做解析了,当然BMP图片的数据格式也是确定的,数据头确定,一般是54个字节,我们看看数据头的数据结构:typedef struct bmp_header {
/* Header */
char signature[2];
__u32 file_
__u32 data_
/* InfoHeader */
__u16 bit_
__u32 image_
__u32 x_pixels_per_m;
__u32 y_pixels_per_m;
__u32 colors_
__u32 colors_
/* ColorTable */
} __attribute__ ((packed)) bmp_header_t;& 打印出来又是怎么一个效果呢?如下:bmp signature[]
bmp file_size
bmp reserved
bmp data_offset
bmp height
bmp planes
bmp bit_count
bmp compression
bmp image_size
bmp x_pixels_per_m
bmp y_pixels_per_m
bmp colors_used
bmp colors_important 0
bmp x = 320, bmp y = 1e0& &笔者测试的这个BMP图片用工具处理过,就是调整它的透明度,所以显示的高度有一点异常,取反就好了。看看下面的处理: if((bmp-&header.signature[0]!='B') || (bmp-&header.signature[1] !='M'))
printf(&this is not a bmp picture\n&);
return -1;
debug(&bmp dectece\n&);
bmp_bpix = bmp-&header.bit_count/8;
if((bmp_bpix != 3) && (bmp_bpix != 4))
printf(&no support bmp picture without bpix 24 or 32\n&);
return -1;
if(bmp_bpix ==3)
zero_num = (4 - ((3*bmp-&header.width) % 4))&3;
debug(&bmp bitcount %d\n&, bmp-&header.bit_count);
x = bmp-&header.
y = (bmp-&header.height & 0x) ? (-bmp-&header.height):(bmp-&header.height);
printf(&bmp x = %x, bmp y = %x\n&, x, y);
tmp_buffer = (char *)bmp_info-&
bmp_data = (char *)(addr + bmp-&header.data_offset);
if(bmp-&header.height & 0x)
if(zero_num == 0)
memcpy(tmp_buffer,bmp_data,x*y*bmp_bpix);
int i, line_bytes, real_line_
line_bytes = (x * bmp_bpix) + zero_
real_line_byte = x * bmp_
for(i=0; i&y; i++)
src = bmp_data + i*line_
memcpy(tmp_buffer, src, real_line_byte);
tmp_buffer += real_line_
uint i, line_bytes, real_line_
line_bytes = (x * bmp_bpix) + zero_
real_line_byte = x * bmp_
for(i=0; i&y; i++)
src = bmp_data + (y - i - 1) * line_
memcpy(tmp_buffer, src, real_line_byte);
tmp_buffer += real_line_
bmp_info-&x =
bmp_info-&y =
bmp_info-&bit = bmp-&header.bit_
flush_cache((uint)bmp_info-&buffer, x * y * bmp_bpix);& 然后就是送到显示的地方了,因为解码buffer的地址是确定的,只要在显示layer的参数里挂上钩就可以了,申请layer,设置参数,打开layer,顺理成章!简单代码如下: debug(&begin to set framebuffer\n&);
if(board_display_framebuffer_set(bmp_info.x, bmp_info.y, bmp_info.bit, (void *)bmp_info.buffer))
printf(&sunxi bmp display error : set frame buffer error\n&);
return -2;
debug(&begin to show layer\n&);
board_display_show(0);
debug(&bmp display finish\n&);
board_display_layer_para_set();
board_display_layer_open();& 整个流程确实就是这样的,有深度的地方就是把各个部分有机的串联起来,组织起来,不会做的事情都难,会做了的事情都不难!当然,我们不要在不懂的情况下就去评说这个事情难不难,难不难谁做谁知道!谦虚谨慎,低调潜行!&
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。}

我要回帖

更多关于 手机开机卡在logo画面 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信