RK3588 Android13添加开机logo或开机动画

wzh@lenkeng-HP-Pro-Tower-ZHAN-99-G9-Desktop-PC:/media/extern_sda/wzh/rk3588_android/device/rockchip/rk3588$ git show 
commit e8da2099dccfed7f7b348c2e324d9c3d3e555d39 (HEAD)
Author: wzh <wuzenghong@lenkeng.com>
Date:   Tue Jun 4 09:53:48 2024 +0800

    添加开机logo,注意压缩bootanimation.zip时压缩方式要选仅存储
    
    Change-Id: I0222563c4b104ed4f6ce4e335236f813ab3b40f2

diff --git a/bootanimation.zip b/bootanimation.zip
new file mode 100755
index 0000000..43e26d5
Binary files /dev/null and b/bootanimation.zip differ
diff --git a/device.mk b/device.mk
index 70e4381..0fcec48 100644
--- a/device.mk
+++ b/device.mk
@@ -43,6 +43,9 @@ PRODUCT_COPY_FILES += \
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.hardware.opengles.aep.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.opengles.aep.xml
 
+PRODUCT_COPY_FILES += \
+                     device/rockchip/rk3588/boo
### RK3566 芯片平台开机动画设置教程 #### 1. U-Boot 阶段配置 为了在RK3566平台上实现开机动画,首先需要修改U-Boot中的显示驱动程序。具体来说,在`u-boot/drivers/video/display-uclass.c`文件中定义了显示类的初始化逻辑[^1]。 ```c // display-uclass.c 中的相关代码片段 static int rockchip_display_bind(struct udevice *dev) { struct rockchip_display_platdata *plat = dev_get_plat(dev); plat->panel = dev_read_ptr_default(dev, "rockchip,panel", NULL); if (!plat->panel) { printf("Failed to get panel device\n"); return -EINVAL; } // 初始化面板和其他必要的硬件资源 } ``` 此外,还需要确保`u-boot/drivers/video/drm/bmp_helper.c`能够正确加载并解析位图图像文件,以便用于动画帧展示。 ```c // bmp_helper.c 中的相关代码片段 int load_bmp_image(const char *filename, void **image_data, size_t *size) { FILE *fp; unsigned long file_size; fp = fopen(filename, "rb"); if (!fp) { printf("Error opening BMP image %s\n", filename); return -ENOENT; } fseek(fp, 0L, SEEK_END); file_size = ftell(fp); rewind(fp); *image_data = malloc(file_size); fread(*image_data, 1, file_size, fp); fclose(fp); *size = file_size; return 0; } ``` 最后,在`u-boot/drivers/video/drm/rockchip_display.c`中实现了具体的显示控制功能,包括如何将图片数据发送到屏幕控制器上进行渲染。 ```c // rockchip_display.c 中的相关代码片段 void rockchip_show_logo(void *logo_buffer, size_t buffer_size) { struct drm_device *drm_dev; struct drm_framebuffer *fb; struct drm_gem_object *obj; int ret; obj = drm_gem_prime_import(drm_dev, logo_buffer, buffer_size); if (IS_ERR(obj)) { pr_err("failed to import GEM object for logo\n"); return; } fb = &obj->fb; /* 显示Logo */ drm_fbdev_cma_update_display(drm_dev, fb); } ``` #### 2. Linux 内核阶段配置 进入Linux内核启动过程后,可以通过Framebuffer设备来继续播放后续的动画序列。这通常涉及到对DTSI(Device Tree Source Include)文件的编辑工作,以指定正确的显示器参数和分辨率等信息[^4]。 ```diff // rk3566.dtsi 文件的部分改动示例 &display_subsys { status = "okay"; + + simple-framebuffer@0 { + compatible = "simple-framebuffer"; + reg = <0>; + width = <1920>; height = <1080>; + format = "rgb888"; + stride = <(1920 * 4)>; // 假设每像素占用四个字节(RGBA) + }; }; ``` 上述更改使得系统能够在早期引导过程中识别并使用预定义好的简单帧缓冲区作为临时图形输出端口。 #### 3. 应用层处理 对于更复杂的动画效果,则可以在Android系统的应用层面通过自定义Splash Screen服务其他方式完成。此时应考虑性能优化措施,比如提前缓存好所有待播放示的画面资源,并采用异步线程机制减少主线程阻塞时间。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值