首页 > 其他分享 >RK3568 android12 动态替换开机logo

RK3568 android12 动态替换开机logo

时间:2023-12-18 16:33:07浏览次数:40  
标签:12 RK3568 18 bmp android12 logo root block

前言:

最近客户有个需要,通过adb push来动态替换开机logo。通过网上查阅相关资料,现整理如下。

参考:

RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo
解决方法:

通过自定义一个分区来存储开机logo,这样在恢复出厂时不会丢失开机logo。然后通过修改u-boot/drivers/video/drm/rockchip_display.c 文件,在开机时候先从自定义分区读取logo文件。如果读取失败,就使用默认的开机logo。

自定义分区的方法可以参考:RK3568 Anroid12新增自定义分区

补丁:

Index: u-boot/drivers/video/drm/rockchip_display.c
===================================================================
--- u-boot/drivers/video/drm/rockchip_display.c    (revision 2459)
+++ u-boot/drivers/video/drm/rockchip_display.c    (revision 2460)
@@ -1309,6 +1309,7 @@
 
 static int load_bmp_logo(struct logo_info *logo, const char *bmp_name)
 {
+#define BUFFER_SIZE 128
 #ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE
     struct rockchip_logo_cache *logo_cache;
     struct bmp_header *header;
@@ -1317,6 +1318,7 @@
     int ret = 0;
     int reserved = 0;
     int dst_size;
+    char cmd[BUFFER_SIZE] = {"0"};
 
     if (!logo || !bmp_name)
         return -EINVAL;
@@ -1333,12 +1335,25 @@
     if (!header)
         return -ENOMEM;
 
-    len = rockchip_read_resource_file(header, bmp_name, 0, RK_BLK_SIZE);
-    if (len != RK_BLK_SIZE) {
-        ret = -EINVAL;
-        goto free_header;
-    }
+    // len = rockchip_read_resource_file(header, bmp_name, 0, RK_BLK_SIZE);
+    // if (len != RK_BLK_SIZE) {
+        // ret = -EINVAL;
+        // goto free_header;
+    // }
 
+    //---add start
+    sprintf(cmd, "ext4load mmc 0:e 0x%p %s %x", header,bmp_name, RK_BLK_SIZE);
+    printf("load_bmp_logo attempt to load from MMC %s...\n", bmp_name);
+    if(run_command(cmd, 0)){
+        len = rockchip_read_resource_file(header, bmp_name, 0, RK_BLK_SIZE);
+        if (len != RK_BLK_SIZE) {
+            printf("load_bmp_logo Load from resource file %s fail\n", bmp_name);
+            ret = -EINVAL;
+            goto free_header;
+        }
+    } 
+    //---add end
+
     logo->bpp = get_unaligned_le16(&header->bit_count);
     logo->width = get_unaligned_le32(&header->width);
     logo->height = get_unaligned_le32(&header->height);
@@ -1360,13 +1375,27 @@
         dst = pdst;
     }
 
-    len = rockchip_read_resource_file(pdst, bmp_name, 0, size);
-    if (len != size) {
-        printf("failed to load bmp %s\n", bmp_name);
-        ret = -ENOENT;
-        goto free_header;
-    }
+    // len = rockchip_read_resource_file(pdst, bmp_name, 0, size);
+    // if (len != size) {
+        // printf("failed to load bmp %s\n", bmp_name);
+        // ret = -ENOENT;
+        // goto free_header;
+    // }
 
+    //---add start
+    memset(cmd, 0, BUFFER_SIZE);
+    sprintf(cmd, "ext4load mmc 0:e 0x%p %s %x", pdst, bmp_name, size);
+    if(run_command(cmd, 0)){
+        len = rockchip_read_resource_file(pdst, bmp_name, 0, size);
+        if (len != size) {
+            printf("load_bmp_logo Load bmp %s fail\n", bmp_name);
+            printf("failed to load bmp %s\n", bmp_name);
+            ret = -ENOENT;
+            goto free_header;
+        }
+    }
+    //---add end
+
     if (!can_direct_logo(logo->bpp)) {
         /*
          * TODO: force use 16bpp if bpp less than 16;

注意要点:

sprintf(cmd, "ext4load mmc 0:e 0x%p %s %x", header,bmp_name, RK_BLK_SIZE);

mmc 0:e 是你的自定义分区。查看方法:

1|rk3568_s:/ # ls -l /dev/block/by-name/
total 0
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 backup -> /dev/block/mmcblk2p9
lrwxrwxrwx 1 root root 21 2023-12-18 07:29 baseparameter -> /dev/block/mmcblk2p12
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 boot -> /dev/block/mmcblk2p7
lrwxrwxrwx 1 root root 21 2023-12-18 07:29 cache -> /dev/block/mmcblk2p10
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 dtbo -> /dev/block/mmcblk2p5
lrwxrwxrwx 1 root root 21 2023-12-18 07:29 fos -> /dev/block/mmcblk2p14
lrwxrwxrwx 1 root root 21 2023-12-18 07:29 metadata -> /dev/block/mmcblk2p11
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 misc -> /dev/block/mmcblk2p4
lrwxrwxrwx 1 root root 18 2023-12-18 07:29 mmcblk2 -> /dev/block/mmcblk2
lrwxrwxrwx 1 root root 23 2023-12-18 07:29 mmcblk2boot0 -> /dev/block/mmcblk2boot0
lrwxrwxrwx 1 root root 23 2023-12-18 07:29 mmcblk2boot1 -> /dev/block/mmcblk2boot1
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 recovery -> /dev/block/mmcblk2p8
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 security -> /dev/block/mmcblk2p1
lrwxrwxrwx 1 root root 21 2023-12-18 07:29 super -> /dev/block/mmcblk2p13
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 trust -> /dev/block/mmcblk2p3
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 uboot -> /dev/block/mmcblk2p2
lrwxrwxrwx 1 root root 21 2023-12-18 07:29 userdata -> /dev/block/mmcblk2p15
lrwxrwxrwx 1 root root 20 2023-12-18 07:29 vbmeta -> /dev/block/mmcblk2p6

可以看到自定义分区fos是mmcblk2p14,对应的是mmc 0:e  ,其中e代表的是第十四个分区。

然后adb remount之后,push 开机logo到fos分区下。重启就可以看到开机logo已经替换了。

疑点:

自定义分区的时候,我参考RK3568 Android/Linux 系统动态更换 U-Boot/Kernel Logo这篇博客的时候,博客里面的某句话:例如,mmc 0:c中的0代表第0个存储设备,而c是一个十六进制数,代表12,所以它对应于第12个分区。

而大佬的mmcblk0p10 分区是cache,我的cache分区是mmcblk2p10。我一开始以为我的分区是 mmc 2:a,结果还是mmc 0:a。那是不是 mmcblk0p10和mmcblk2p10 中的0和2并不是对应 mmc的存储设备?

串口查看分区:

接好串口,开机的时候按下cart + c进入uboot 命令行模式。通过指令可以查看分区信息。

 

Net:   eth1: ethernet@fe010000, eth0: ethernet@fe2a0000
Hit key to stop autoboot('CTRL+C'):  0 
=> <INTERRUPT>
=> <INTERRUPT>
=> <INTERRUPT>
=> <INTERRUPT>
=> ext4ls mmc 0:a
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
<DIR>       4096 recovery
<DIR>       4096 backup_stage
<DIR>       4096 backup
=> ext4ls mmc 0:e
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
          394040 logo.bmp
          394040 logo_kernel.bmp
=> 

 

可以看到mmc 0:e 下面有开机logo。对应的分区是fos。而mmc 0:a 对应的分区是cache。

 

 

 

 

标签:12,RK3568,18,bmp,android12,logo,root,block
From: https://www.cnblogs.com/dodo-asw/p/17911568.html

相关文章

  • 第八章:SpringBoot-Java工程及关系和修改启动logo(了解)
    一、springbootJava工程(了解)二、关闭&修改启动logo(了解)......
  • rk3568移植搭建Ubuntu20.04.5根文件系统
    一.下载ubuntu-base https://cdimage.ubuntu.com/ubuntu-base/releases/20.04.5/release/ 下载固件:buntu-base-20.04.5-base-arm64.tar.gz 根文件系统创建目录ubuntu_rootfs,并解压到该目录:mkdirubuntu_rootfstar-zxvfubuntu-base-20.04.5-base-arm64.tar.gz-Cubuntu_root......
  • RK3568行业定制主板信号抗扰传导实验整改方案验证
    为了整改验证RK3568行业定制主板CAN口的抗干扰能力,在可靠性测试实验室内对定制主板进行了信号抗扰传导实验,其测试环境如下图所示。1. 实验目的图1.1测试实验环境 为了滤波,起到一个抗干扰的作用,需要对RK3568定制主板CAN口进行调整,如下图所示需要在L11位置的C82、C84增加两个......
  • 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解
    前言  本篇继续分析底板原理图mipi电路原理图、mipi摄像头输入硬件接口详解。<br>RK3568芯片摄像头接口  查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只能接收mipi信号,RK3568的摄像头接口引脚如下:    只支持mipi的数字信号摄像头。  本来计划......
  • 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解
    前言  本篇继续分析底板原理图mipi电路原理图、mipi摄像头输入硬件接口详解。 RK3568芯片摄像头接口  查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只能接收mipi信号,RK3568的摄像头接口引脚如下:    只支持mipi的数字信号摄像头。  本......
  • RK3568 AMP测试验证说明
    本文基于HD-RK3568-IOT评估板进行验证。1. RK3568 AMP SDK获取在虚拟机内创建rk356x-amp-sdk目录,后续在该目录下执行命令,在rockchip git库下载AMP SDK。 2. AMP功能验证目前在RK3568上分别验证了1linux+3hal、1linux+3rtt、3linux+1hal、3linux+1rtt一共4种模式;4种模......
  • 硬件开发笔记(十五):RK3568底板电路VGA显示接口原理图分析
    前言  前面输出了HDMI,LVDS,MIPI-DSI,这里还有一个常用的显示接口就是VGA了,这个用的不多了,一般板子都是hdmi了。  本篇分析底板VGA电路。<br>VGA接口  VGA(VideoGraphicsArray)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输......
  • Android12版本闹钟服务崩溃问题
    原文地址:Android12版本闹钟服务崩溃问题-Stars-One的杂货小窝公司项目app线上出现的崩溃记录问题,崩溃日志如下所示:Causedbyjava.lang.SecurityException:Callercom.health.trackeranzneedstoholdandroid.permission.SCHEDULE_EXACT_ALARMorandroid.permission......
  • RK3568+Codesys+Xenomai实时软PLC运动控制解决方案
    CODESYS软件架构     CODESYS软件分三层架构,可用下图来表示:1、开发层     CODESYSDevelopmentSystem(具有完善的在线编程和离线编程功能)、编译器及其配件组件、可视化界面编程组件等,同时供用户可选的运动控制模块可使其功能更加完整和强大。IEC61131-3编辑器。CODESY......
  • 行业安卓主板-基于RK3568/3288/3588的电子班牌/人脸识别门禁/室内对讲门禁方案解决方
    电子班牌智能电子班牌可在主页实时显示班级全面的基本信息,包括天气、班名、课程表、值日表等,并发布学校通知、班级通知。学生可刷卡自动登陆系统进行课堂反馈,教师和家长可及时了解教学反馈,打通学校、教师、学生之间的互动通道。人脸识别门禁智能人脸识别门禁已成为当下最热门的人工......