完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
Platform: Rockchip
OS: Android 6.0 Kernel: 3.10.92 diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dts index ad3bc1a..f000e29 100644 --- a/arch/arm/boot/dts/rk3288-b.dts +++ b/arch/arm/boot/dts/rk3288-b.dts @@ -353,7 +353,7 @@ &fb { rockchip,disp-mode = - rockchip,uboot-logo-on = <1>; + rockchip,uboot-logo-on = <0>; }; 在移除了uboot logo之后还是会显示kernel logo(kerne自带而并非rk显示logo机制),所有需要关闭. diff --git a/arch/arm/configs/rockchip_b_defconfig b/arch/arm/configs/rockchip_b_defconfig index 092dc3c..b699f96 100644 --- a/arch/arm/configs/rockchip_b_defconfig +++ b/arch/arm/configs/rockchip_b_defconfig @@ -439,7 +439,7 @@ CONFIG_RK1000_TVOUT_CVBS=y CONFIG_RK3036_TV_ENCODER=y CONFIG_ROCKCHIP_RGA=y CONFIG_ROCKCHIP_RGA2=y -CONFIG_LOGO=y +#CONFIG_LOGO=y CONFIG_SOUND=y CONFIG_SND=y # CONFIG_SND_SUPPORT_OLD_API is not set kernel logo是根据是否开启了uboot logo display来决定是否要显示的,在函数rk_fb_register()中, 并且kernel logo的图片大小要和uboot一直,否则就无法显示。 #if !defined(CONFIG_FRAMEBUFFER_CONSOLE) if (dev_drv->prop == PRMRY) { u16 xact, yact; int format; u32 dsp_addr; struct fb_info *main_fbi = rk_fb->fb[0]; main_fbi->fbops->fb_open(main_fbi, 1); main_fbi->var.pixclock = dev_drv->pixclock; if (dev_drv->iommu_enabled) { if (dev_drv->mmu_dev) rockchip_iovmm_set_fault_handler(dev_drv->dev, rk_fb_sysmmu_fault_handler); } rk_fb_alloc_buffer(main_fbi); /* only alloc memory for main fb */ dev_drv->uboot_logo = support_uboot_display(); //是否支持uboot logo display if (dev_drv->uboot_logo && uboot_logo_offset && uboot_logo_base) { int width, height, bits, xvir; phys_addr_t start = uboot_logo_base + uboot_logo_offset; unsigned int size = uboot_logo_size - uboot_logo_offset; unsigned int nr_pages; int ymirror = 0; struct page **pages; char *vaddr; int i = 0; if (dev_drv->ops->get_dspbuf_info) dev_drv->ops->get_dspbuf_info(dev_drv, &xact, &yact, &format, &dsp_addr, &ymirror); nr_pages = size >> PAGE_SHIFT; pages = kzalloc(sizeof(struct page) * nr_pages, GFP_KERNEL); while (i < nr_pages) { pages = phys_to_page(start); start += PAGE_SIZE; i++; } vaddr = vmap(pages, nr_pages, VM_MAP, pgprot_writecombine(PAGE_KERNEL)); if (!vaddr) { pr_err("failed to vmap phy addr 0x%lxn", (long)(uboot_logo_base + uboot_logo_offset)); return -1; } //bmp图片解压 if (bmpdecoder(vaddr, main_fbi->screen_base, &width, &height, &bits)) { kfree(pages); vunmap(vaddr); return 0; } kfree(pages); vunmap(vaddr); if (dev_drv->uboot_logo && (width != xact || height != yact)) { pr_err("can't support uboot kernel logo use different size [%dx%d] != [%dx%d]n", xact, yact, width, height); return 0; } xvir = ALIGN(width * bits, 1 << 5) >> 5; ymirror = 0; local_irq_save(flags); if (dev_drv->ops->wait_frame_start) dev_drv->ops->wait_frame_start(dev_drv, 0); if (dev_drv->ops->post_dspbuf) { dev_drv->ops->post_dspbuf(dev_drv, main_fbi->fix.smem_start, rk_fb_data_fmt(0, bits), width, height, xvir, ymirror); } if (dev_drv->iommu_enabled) { rk_fb_poll_wait_frame_complete(); if (dev_drv->ops->mmu_en) dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } local_irq_restore(flags); return 0; } else if (dev_drv->uboot_logo && uboot_logo_base) { u32 start = uboot_logo_base; int logo_len, i = 0; int y_mirror = 0; unsigned int nr_pages; struct page **pages; char *vaddr; int align = 0, xvir; dev_drv->ops->get_dspbuf_info(dev_drv, &xact, &yact, &format, &start, &y_mirror); logo_len = rk_fb_pixel_width(format) * xact * yact >> 3; if (logo_len > uboot_logo_size || logo_len > main_fbi->fix.smem_len) { pr_err("logo size > uboot reserve buffer sizen"); return -1; } if (y_mirror) start -= logo_len; align = start % PAGE_SIZE; start -= align; nr_pages = PAGE_ALIGN(logo_len + align) >> PAGE_SHIFT; pages = kzalloc(sizeof(struct page) * nr_pages, GFP_KERNEL); while (i < nr_pages) { pages = phys_to_page(start); start += PAGE_SIZE; i++; } vaddr = vmap(pages, nr_pages, VM_MAP, pgprot_writecombine(PAGE_KERNEL)); if (!vaddr) { pr_err("failed to vmap phy addr 0x%xn", start); return -1; } memcpy(main_fbi->screen_base, vaddr + align, logo_len); kfree(pages); vunmap(vaddr); xvir = ALIGN(xact * rk_fb_pixel_width(format), 1 << 5) >> 5; local_irq_save(flags); if (dev_drv->ops->wait_frame_start) dev_drv->ops->wait_frame_start(dev_drv, 0); dev_drv->ops->post_dspbuf(dev_drv, main_fbi->fix.smem_start + (y_mirror ? logo_len : 0), format, xact, yact, xvir, y_mirror); if (dev_drv->iommu_enabled) { rk_fb_poll_wait_frame_complete(); if (dev_drv->ops->mmu_en) dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } local_irq_restore(flags); return 0; } else { if (dev_drv->iommu_enabled) { if (dev_drv->ops->mmu_en) dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } } #if defined(CONFIG_LOGO) main_fbi->fbops->fb_set_par(main_fbi); #if defined(CONFIG_LOGO_LINUX_BMP) if (fb_prewine_bmp_logo(main_fbi, FB_ROTATE_UR)) { fb_set_cmap(&main_fbi->cmap, main_fbi); fb_show_bmp_logo(main_fbi, FB_ROTATE_UR); } #else if (fb_prepare_logo(main_fbi, FB_ROTATE_UR)) { fb_set_cmap(&main_fbi->cmap, main_fbi); fb_show_logo(main_fbi, FB_ROTATE_UR); } #endif main_fbi->fbops->fb_pan_display(&main_fbi->var, main_fbi); #endif } else { struct fb_info *extend_fbi = rk_fb->fb[dev_drv->fb_index_base]; extend_fbi->var.pixclock = rk_fb->fb[0]->var.pixclock; extend_fbi->fbops->fb_open(extend_fbi, 1); if (dev_drv->iommu_enabled) { if (dev_drv->mmu_dev) rockchip_iovmm_set_fault_handler(dev_drv->dev, rk_fb_sysmmu_fault_handler); } rk_fb_alloc_buffer(extend_fbi); } #endif |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
谁有3566+电池+POE充电的方案,有个项目需要用该功能的主板
880 浏览 0 评论
RK3588的GMAC0与PHY的参考时钟电平匹配问题??????
4677 浏览 1 评论
请问各位大佬,如何解决,瑞芯微 RV1126B 使用 mpp 自带工具 调试时,内核直接报错崩溃!
1833 浏览 0 评论
使用rk3568开发板,核0\\1\\3运行linux,核2运行hal,在核0中怎么关闭核2
2393 浏览 0 评论
2395 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 13:14 , Processed in 0.644150 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1511