UBOOT LOGO增加PNG格式的支持

前言

在大多数的项目中, 客户都会有修改开机LOGO的需求, 而且最好是能动态修改.
这里就分享一下在Rockchip平台的UBOOT中, 增加开始LOGO支持PNG格式的一些流程和思路.

流程

一些背景

  • 平台是Rockchip的安卓平台, 原则上Linux之类的也通用
  • UBOOT版本是uboot-next
  • RK的平台, 开机LOGO默认使用的是kernel下的 logo.bmp 和 logo_kernel.bmp, 被编译到 boot.img 中, 再被UBOOT以Resource的方式加载
  • UBOOT中加载和显示LOGO的代码主要在 drivers/video/drm/rockchip_display.c

文件读取方式

首先我们不再使用默认的Resource方式, 改为从外部读取.
一般有两种方式:

  • 使用RAW分区
  • 使用EXT4/FAT32文件系统分区

RAW分区的方式比较简单, 但分区里不方便存放其它数据, 所以这里选择了使用EXT4的工厂分区方式.

读取EXT分区文件的方式

  1. 先设置要读取的设备类型和分区: fs_set_blk_dev("mmc", "0:factory", FS_TYPE_EXT)
    • 注: 这里的 0:factory 代表第1个mmc设备的factory分区, 这个函数默认不支持按分区名来指定, 需要做一定的修改
  2. 读取文件内容 ext4_read_file(filename, dst, offset, size, &actread)

PNG解码库

UBOOT只支持C语言, 所以这里选择了 LodePNG (lodev.org) 这个纯C的解码库.
下载后将 lodepng.cpp 改名为 lodepng.c, 另外 logdepng.h 可以按需做一些配置修改, 以让UBOOT能成功编译.

修改显示LOGO的流程

rockchip_display.crockchip_show_logo() 函数中, 可以看到对 load_bmp_logo() 的调用, 只需要修改对应的流程就可以了.

调用 lodepng_decode24() 来对PNG进行解码.

这里需要注意的是, lodepng 解码出来的像素格式是 rgb24, 而 UBOOT 中使用的格式是 bgr24, 需要做一下转换, 不然颜色不正确.

总结

这里对整个流程做了一些思路上的介绍, 具体在实现时还需要仔细查看 UBOOT 和 lodepng 的 API. 欢迎交流讨论.

全部评论

相关推荐

12-18 19:36
已编辑
门头沟学院 Java
程序员牛肉:可以的,简历没毛病了。 虽然还是偏向同质化,不过学历不错。后续我觉得重心放到刷实习+摆脱同质化问题上
实习简历求拷打
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务