Igor Posted March 27, 2017 Share Posted March 27, 2017 This way it works with 720p or whatever less than 1080p. There kernel logo doesn't want to show. Good on 1280x1024 or 720p Spoiler [ 3.336551] simple-framebuffer 7fb00000.framebuffer: framebuffer at 0x7fb00000, 0x500000 bytes, mapped to 0xf0900000 [ 3.336562] simple-framebuffer 7fb00000.framebuffer: format=x8r8g8b8, mode=1280x1024x32, linelength=5120 [ 3.363471] Console: switching to colour frame buffer device 160x64 [ 3.365113] simple-framebuffer 7fb00000.framebuffer: fb0: simplefb registered Broken on 1080p: Spoiler [ 3.337435] simple-framebuffer 7f817000.framebuffer: framebuffer at 0x7f817000, 0x7e9000 bytes, mapped to 0xf0900000 [ 3.337447] simple-framebuffer 7f817000.framebuffer: format=x8r8g8b8, mode=1920x1080x32, linelength=7680 [ 3.379192] fbcon_init: disable boot-logo (boot-logo bigger than screen). [ 3.379203] Console: switching to colour frame buffer device 240x67 [ 3.420003] simple-framebuffer 7f817000.framebuffer: fb0: simplefb registered Relevant patch (without 320x200 bitmap.): Spoiler diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig --- a/drivers/video/logo/Kconfig +++ b/drivers/video/logo/Kconfig @@ -27,6 +27,10 @@ config LOGO_LINUX_CLUT224 bool "Standard 224-color Linux logo" default y +config LOGO_ARMBIAN_CLUT224 + bool "Standard 224-color Armbian logo" + default y + config LOGO_BLACKFIN_VGA16 bool "16-colour Blackfin Processor Linux logo" depends on BLACKFIN diff --git a/drivers/video/logo/Makefile b/drivers/video/logo/Makefile --- a/drivers/video/logo/Makefile +++ b/drivers/video/logo/Makefile @@ -15,6 +15,7 @@ obj-$(CONFIG_LOGO_SUPERH_MONO) += logo_superh_mono.o obj-$(CONFIG_LOGO_SUPERH_VGA16) += logo_superh_vga16.o obj-$(CONFIG_LOGO_SUPERH_CLUT224) += logo_superh_clut224.o obj-$(CONFIG_LOGO_M32R_CLUT224) += logo_m32r_clut224.o +obj-$(CONFIG_LOGO_ARMBIAN_CLUT224) += logo_armbian_clut224.o obj-$(CONFIG_SPU_BASE) += logo_spe_clut224.o diff --git a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c --- a/drivers/video/logo/logo.c +++ b/drivers/video/logo/logo.c @@ -1,4 +1,3 @@ - /* * Linux logo to be displayed on boot * @@ -36,6 +35,8 @@ static int __init fb_logo_late_init(void) late_initcall(fb_logo_late_init); +extern const struct linux_logo logo_armbian_clut224; + /* logo's are marked __initdata. Use __ref to tell * modpost that it is intended that this function uses data * marked __initdata. @@ -111,6 +112,10 @@ const struct linux_logo * __ref fb_find_logo(int depth) /* M32R Linux logo */ logo = &logo_m32r_clut224; #endif +#ifdef CONFIG_LOGO_ARMBIAN_CLUT224 + /* Armadeus Linux logo */ + logo = &logo_armbian_clut224; +#endif } return logo; } diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -487,7 +487,7 @@ static int fb_show_logo_line(struct fb_info *info, int rotate, } if (fb_logo.depth <= 4) { - logo_new = kmalloc(logo->width * logo->height, GFP_KERNEL); + logo_new = kmalloc(info->var.xres * info->var.yres, GFP_KERNEL); if (logo_new == NULL) { kfree(palette); if (saved_pseudo_palette) @@ -498,8 +498,9 @@ static int fb_show_logo_line(struct fb_info *info, int rotate, fb_set_logo(info, logo, logo_new, fb_logo.depth); } - image.dx = 0; - image.dy = y; + image.dx = (info->var.xres - logo->width) / 2; + image.dy = (info->var.yres - logo->height) / 2; + image.width = logo->width; image.height = logo->height; @@ -657,15 +658,14 @@ int fb_prepare_logo(struct fb_info *info, int rotate) } } - return fb_prepare_extra_logos(info, fb_logo.logo->height, yres); + return fb_prepare_extra_logos(info, info->var.yres, yres); } int fb_show_logo(struct fb_info *info, int rotate) { int y; - 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, 1); y = fb_show_extra_logos(info, y, rotate); return y; I can't see what I did wrong. Link to comment Share on other sites More sharing options...
Abelard Posted April 8, 2017 Share Posted April 8, 2017 when I run ./compile.sh BOARD=orangepipc KERNEL_ONLY=yes FORCE_CHECKOUT=no BRANCH=default I got this make[3]: *** No rule to make target `drivers/video/logo/logo_armbian_clut224.o', needed by `drivers/video/logo/built-in.o'. Stop. help me , thanks. Link to comment Share on other sites More sharing options...
Igor Posted April 8, 2017 Author Share Posted April 8, 2017 You need a whole patch which include logo: https://github.com/igorpecovnik/lib/blob/master/patch/kernel/sunxi-next/armbian-boot-logo-on-screen-center.patch ... but I am not sure it's working on this kernel. Link to comment Share on other sites More sharing options...
Abelard Posted April 8, 2017 Share Posted April 8, 2017 3 hours ago, Igor said: You need a whole patch which include logo: https://github.com/igorpecovnik/lib/blob/master/patch/kernel/sunxi-next/armbian-boot-logo-on-screen-center.patch ... but I am not sure it's working on this kernel. thank you,I get armbian logo,but it not change, only one logo. Link to comment Share on other sites More sharing options...
Igor Posted April 8, 2017 Author Share Posted April 8, 2017 That's correct - as I told, this logo function is not completely done and functional since it has some bugs and I don't know how to proceed. Link to comment Share on other sites More sharing options...
Abelard Posted April 8, 2017 Share Posted April 8, 2017 ok, thank you. Link to comment Share on other sites More sharing options...
BoreyCutts Posted November 1, 2017 Share Posted November 1, 2017 Hey I tried this patch in Yocto Linux on a 1024x600 LVDS touchpanel and got the same error message fbcon_init: disable boot-logo (boot-logo bigger than screen). Linux seems to be weird about the resolution of the kernel logo. I changed return fb_prepare_extra_logos(info, info->var.yres, yres); back to return fb_prepare_extra_logos(info, fb_logo.logo->height, yres); and was able to get the logo to display again but it only showed half of the logo vertically. I'm thinking that allowing the extra logos to take up the full size of the screen makes the kernel think that the framebuffer image is too big (not sure whatsoever just a guess). Did you ever fix this issue? Link to comment Share on other sites More sharing options...
Igor Posted November 1, 2017 Author Share Posted November 1, 2017 42 minutes ago, BoreyCutts said: Did you ever fix this issue? No, I haven't dug deeper into this issue but I would like to see this sorted ... once. Link to comment Share on other sites More sharing options...
BoreyCutts Posted November 2, 2017 Share Posted November 2, 2017 Ok so I think I'm getting closer to a solution. There's a parameter in drivers/video/console/fbcon.c called logo_height which controls the amount of vertical screen space allowed for the kernel logo to show. I increased it to 600 (the vertical dimension of my screen) and the logo was finally able to display. However doing so caused issues with an application I'm using called wayland but that could just be a wayland thing so idk. I'll look more into this later today. Link to comment Share on other sites More sharing options...
Recommended Posts