有两种方法可以改变开机logo,编译进内核或者修改u-boot。
《一》、编译进内核
一、 制作LOGO图片(可以使用gimp)
1. 制作一个.ppm格式图片(logo_tvu_clut.ppm)
2. ppmquant 224 logo_tvu_clut.ppm > logo_tvu_clut224.ppm
3. pnmnoraw logo_tvu_224.ppm > logo_tvu_clut224_ascii.ppm
4. cp logo_tvu_clut224_ascii.ppm logo_tvu_clut224.ppm
5. mv logo_tvu_clut224.ppm ~/ingenic/.../kernel/drivers/video/logo/
二 、修改相关文件
一、修改kernel目录下的如下文件:
1、 在include/linux/linux_logo.h添加
extern const struct linux_logo logo_tvu_clut224;
2、在drivers/video/logo.c添加:
#ifdef CONFIG_LOGO_TVU_CLUT224
/* Tvu Linux logo */
logo = &logo_tvu_clut224;
#endif
3、修改Makefile:
添加 obj-$(CONFIG_LOGO_TVU_CLUT224) += logo_tvu_clut224.o
4、修改Kconfig:
添加:config LOGO_TVU_CLUT224
bool "Tvu 224-color logo"
default y
二、修改 u-boot 目录下的如下文件:
1.修改include/configs/halley2.h文件
/* #define CONFIG_LCD_LOGO */ 注释掉此行,否则如果u-boot中也存在开机logo的话,会先在LCD上显示u-boot LOGO,再显示framebuffer上的LOGO。
三、配置内核
1.Device Drivers
-->Graphics support
-> Support for frame buffer devices
2.Device Drivers
-->Graphics support
--><*>Backlight & LCD device support
--> Lowlevel LCD controls
SLCD TRULY TFT240240-2-E with control IC st7789s (240x240)
SLCDC USE TE SIGNAL
SLCDC CONTINUA TRANFER
Lowlevel Backlight controls
Generic PWM based Backlight Driver V13
3.Device Drivers
-->Graphics support
--><*>JZ LCDC framebuffer V1.3
-->set lcd gpio (lcd v13 8bit slcd)
---> lcd v13 8bit slcd
4.Device Drivers
-->Graphics support
----->Console display driver support
--------> < * > Framebuffer Console support
[ * ] Map the console to the primary display device
5.Device Drivers
-->Graphics support
---> [ * ] Bootup logo --->
----> [ * ] Tvu 224-color logo (选取哪一个取决于../kernel/drivers/video/logo/Kconfig)
eg.
config LOGO_TVU_CLUT224
bool "Tvu 224-color logo"
default y
四、编译内核及u-boot
注意:编译之前要先初始化编译环境
source build/envsetup.sh
lunch halley2_norflash-user
1、编译内核:
进入kernel目录下,执行make uImage, 会在arch/mips/boot/下生成uImage.
2、编译u-boot:
进入u-boot目录下,先执行make distclean, 再执行make halley2_v10_uImage_sfc_nor, 会在u-boot目录下生成u-boot-with-spl.bin。
将uImage 和 u-boot-with-spl.bin 烧录进X1000E核心板,开机即可显示你所设计的logo。
五、开机黑屏没有显示logo
如果出现黑屏现象,可能是由于图片像素不正确,可以先找一个像素较小的图片来测试一下是否成功,再制作与屏幕相对应的图片。
想实现logo的居中显示、拉伸显示修改、kernel/drivers/video/fbmem.c文件中的fb_show_logo_line函数(大概位于第500行左右)和kernel/drivers/console/fbcon.c文件中的fbcon_prepare_logo函数(大概位于第596行左右)。
居中显示:
(1)修改源码/driver/video/fbmem.c中的fb_show_logo_line函数。
在
//image.dx=0;
//image.dy=y;
image.width=logo->width;
image.height=logo->height;
下增加:
image.dx = (info->var.xres / 2) - (image.width / 2);
image.dy = (info->var.yres / 2) - (image.height / 2);
全屏显示:
(2)修改源码/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);
经过以上方式重新编译内核,把uImage烧录进X1000E核心板,开机即可居中全屏显示logo。
六、Linux下LCD 10分钟自动熄屏的问题
Linux下的LCD驱动默认10分钟后会自动关闭屏幕,我们可以修改一下代码让其不自动关屏。
方法1:修改kernel/drivers/tty/vt/vt.c 文件中的变量blankinterval,设置为0;
方法2:修改kernel/drivers/tty/vt/vt.c 文件中的函数(blank_screen_t),在函数开头直接return;
七、去除开机LOGO中的光标
打开fbcon.c文件(kernel/drivers/video/console/fbcon.c)
方法一:
1.将static void fb_flashcursor(struct work_struct *work)制成空函数
static void fb_flashcursor(struct work_struct *work)
{
#if 0
...
...
#endif
}
2.同样的方法将函数static void fbcon_cursor(struct vc_data *vc, int mode)制成空函数。
方法二:
打开Makefile文件(kernel/drivers/video/console/Makefile)
#obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o softcursor.o
改为:
obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o
编译遇到一个soft_cursor没有定义的问题问题,注释代码:
/kernel/drivers/video/console/bitblit.c
//ABING
// if (err)
// soft_cursor(info, &cursor);
《二》、U-boot logo
一、制作logo图片,并命名为tvu_logo.bmp,把tvu_logo.bmp拷贝到u-boot/tools/logos/目录下
二、修改u-boot/tools/Makefile文件,大约在第158行
158 LOGO_BMP ?= logos/ingenic.bmp
改为 LOGO_BMP ?= logos/tvu_logo.bmp
三、在u-boot目录下,先执行make distclean, 再执行make halley2_v10_uImage_sfc_nor,会在u-boot目录下生成u-boot-with-spl.bin。
将u-boot-with-spl.bin 烧录进X1000E核心板,开机即可显示你所设计的logo。
注意:
此种方法具有局限性,不适合显示较大的logo图片,如果图片较大,u-boot-with-spl.bin大小大于烧录器所分配的空间大小,不能进行烧录(经验证15K左右的.bmp图片可以)。此种方法制作开机logo可能会出现u-boot使用过程中宕机重启的后果!