如何生成MFG工具的UBOOT和KERNEL镜像

如何生成MFG工具的UBOOT和KERNEL镜像,第1张

:1、u-boot先初始化一些必要的设备,如串口、网卡、flash、显示屏等驱动。 2、从flash、SD卡、tftp服务器取内核映像文件。 3、将内核映像文件解压到内存。 4、校验内核。 5、设定配置参数,跳到内核执行。

让uboot启动时显示logo的方法
我用的u-boot是200908版的。想要修改开机logo为自定义的,而不是原来的denxbmp。
方法其实很简单,只需替换u-boot的tools/logos目录中的denxbmp,再重新编译(可能需要先执行make clean,再make,新的
才会起作用),大小不要起过你的屏的大小,色彩深度不能大于256色,即8位色深的。
不过,如果你不想替换denxbmp,而要用自已的文件,比如,我用的是rat-linuxbmp文件,也可以。把你的文件拷贝
到/tools/logos目录中,再修改/tools目录下的makefile文件,找到以下代码段
ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denxbmp
endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmelbmp
endif
ifeq ($(VENDOR),ronetix)
LOGO_BMP= logos/ronetixbmp
endif
将其中的LOGO_BMP= logos/denxbmp改为 LOGO_BMP= logos/rat-linuxbmp即可。重新编译,你的就可以起作用了。
U-boot开机logo的制作方法
在有实现LCD显示和LCD命令行终端的U-boot中,在左上角都有显示一个logo,如果是atmel的芯片,就会有atmel的logo,三星的则是denx的logo。
有的网友发邮件说想改成自己公司的Logo,而且如果是自己玩的话,改成自己喜欢的logo也爽阿。所以今天我做好了实验,将简单的修改方法总结如下:
一、的放置路径
所有的开机logo都放在了 /tools/logos 之下,你只需要将你的班子作对应的logo替换就好了。
对于S3C2440,你只需要将denxbmp替换成你想要的logo就好了。
对于ATMEL的芯片,据说会显示ATMEL的logo,所以替换那个logo即可。
但是你所替换的logo必须和原来的大小、格式一模一样,否则会出现u-boot使用过程中宕机重启的后果。
二、的大小标准
不同的logo对应不同的大小,这里S3C2440所对应的是160*96分辨率的BMP。
三、的转换脚本
在制作前,请您现确认您的Linux主机上安装了Netpbm 工具包。如果是ubuntu,你可以直接用新立得安装;如果是别的发行版,可以在 Netpbm主页 下载源代码编译。
将你想要的裁减成160*96的JPG,然后用以下的脚本处理一下就好了:
#!/bin/sh
#install Netpbm first
jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
使用方法: (脚本名) ( 待处理的JPG名) (输出文件名)
26 的Kernel LOGO真容易改试着改了一下,似乎比24容易。26的logo数据在/drivers/video/logo里,ppm文件就是logo图像了。每 个ppm对应一个c文件,内容大概就是图像尺寸、调色板、位图数据等信息。c文件无需自己建立,在make的时候如果不存在某个ppm文件对应的c 文件,就会自动从ppm生成一个,然后把它编译成o文件。所以看看目录下哪些ppm文件有同名的o文件,就说明那个logo被编译进了 kernel。标准的224色logo是logo_linux_clut224ppm,因此修改这个就可以实现修改logo了。
在 windows下,可以用PaintShopProX直接打开ppm进行编辑,编辑完毕后用decrease color depth命令降为224色,然后保存,把logo_linux_clut224c删掉,重新make就可以了。这个是我昨晚随便改的logo :
在 深入一点点。很容易发现,对于一般的vga console,logo是由drivers/video/fbmemc里的fb_show_logo()函数显示的,这个函数的调用者是 drivers/video/console/fbconc(跟24差不多,嗯)。这个函数做的事情不多,就是先把非8位色深的位图转换为8位色深, 然后用info->fbops->fb_imageblit(info,& image);把logo显示出来,有一个cpu时显示一个logo,有2个cpu时显示2个,以此类推。
略加修改,就可以实现将logo居中显示,并加入一个“重复显示右边界”,也就是把logo最右边4个点宽的区域作为背景填充到整个logo bar。diff如下:
--- /gs2e/source/linux26-2edev/drivers/video/fbmemc2006-08-29 14:07:15000000000 +0800
+++ /fbmemc2006-09-27 20:40:08000000000 +0800
@@ -375,9 +375,9 @@
int fb_show_logo(struct fb_info info)
{
u32 palette = NULL, saved_pseudo_palette = NULL;
-unsigned char logo_new = NULL;
-struct fb_image image;
-int x;
+unsigned char logo_new = NULL, border = NULL;
+struct fb_image image, imageborder;
+int x, xoffset;
/ Return if the frame buffer is not mapped or suspended /
if (fb_logologo == NULL || info->state != FBINFO_STATE_RUNNING)
@@ -421,12 +421,45 @@
imageheight = fb_logologo->height;
imagedy = 0;
+#ifdef CONFIG_LOGO_REPEAT_RIGHT
+border = kmalloc(4 fb_logologo->height, GFP_KERNEL);
+if (border != NULL){
+ for (x = 0; x < fb_logologo->height; x++){ / use x as y /
+((u32 )border + x) = / will repeat 4 pixels of the right side/
+(u32 )(imagedata + (x+1)fb_logologo->width - 4);
+ }
+ imageborderdepth = 8;
+ imageborderdata = border;
+ imageborderwidth = 4;
+ imageborderheight = imageheight;
+ imageborderdy = 0;
+ for (x = 0; x < info->varxres; x+=4){
+imageborderdx = x;
+info->fbops->fb_imageblit(info, &imageborder);
+ }
+ kfree(border);
+}
+#endif
+#ifndef CONFIG_CENTER_LOGO
+xoffset = 0;
for (x = 0; x < num_online_cpus() (fb_logologo->width + 8) &&
x <= info->varxres-fb_logologo->width; x += (fb_logologo->width + 8)) {
imagedx = x;
info->fbops->fb_imageblit(info, &image);
}
-
+#else
+xoffset = (info->varxres - num_online_cpus() (fb_logologo->width + 8))>>1;
+if (xoffset<0)xoffset = 0;
+ for (x = xoffset; x < num_online_cpus() (fb_logologo->width + 8) + xoffset &&
+ x <= info->varxres-fb_logologo->width+xoffset; x += (fb_logologo->width + 8)) {
+ imagedx = x;
+ info->fbops->fb_imageblit(info, &image);
+}
+#endif
kfree(palette);
if (saved_pseudo_palette != NULL)
info->pseudo_palette = saved_pseudo_palette;
我在这里定义了两个配置变量,CONFIG_LOGO_REPEAT_RIGHT和CONFIG_CENTER_LOGO,修改/drivers/video/logo/Kconfig,加上:
config CENTER_LOGO
bool "Center logo"
depends on LOGO
default n
config LOGO_REPEAT_RIGHT
bool "Repeat the right border (4 pixels)"
depends on LOGO
default n
这样就可以在make menuconfig之类的界面中设置是否开启这两项功能了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10623654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存