首页 >> 大全

RK3568 Android12 动态修改开机Logo

2023-11-13 大全 29 作者:考证青年

开机logo是打包在img中,导致在烧录之后想要更换开机logo,只能重新编译并烧录固件,这样会比较麻烦。

有一个思路,在已经运行的机器上,在某分区放在一张logo文件,在启动过程中,优先加载分区logo,在分区logo不存在的情况下,再加载默认logo

首先解决两个问题:

1.logo放在哪里?

2.是如何加载logo的?

_安卓修改开机logo_android修改开机动画

问题一: logo放在哪里

,等分区是不能放的,一是因为是只读分区,即使是了,也无法放新文件。

还得考虑一个,放置的logo,机器在恢复出厂设置后,不应该丢失,因此data分区也是不能放的。

因此决定新建分区来保存这些定制化的内容。具体新建分区的方法可以在CSDN上搜索参考,这里不再赘述。 注:在在挂载参数中加上

问题二logo是如何加载的

安卓修改开机logo__android修改开机动画

a.走读代码发现:logo加载在/u-boot//video/drm/.c中的方法。

b.找到logo处理方法只能算解决百分之五十的问题,但现在又有一个新问题:如何定位查找放在自建分区的logo文件。这时需借助下的命令依次查找,进入模式,执行命令::m,如下图(注意n表示设备号,m表示分区号-十六进制)

c.找到logo文件,就可以开始修改代码了,如下:(如果uboot和需要加载不同的图片,可通过判断当前加载的是什么阶段的logo而加载分区内对应阶段的图片)

使用命令将图片加载到对应的内存地址中。

diff --git a/drivers/video/drm/rockchip_display.c b/drivers/video/drm/rockchip_display.c
old mode 100644
new mode 100755
index 51a95f8197..8f4aad0b8d
--- a/drivers/video/drm/rockchip_display.c
+++ b/drivers/video/drm/rockchip_display.c
@@ -35,6 +35,7 @@#include #include #include 
+#include #define DRIVER_VERSION    "v1.0.1"@@ -1261,6 +1262,7 @@ static int load_kernel_bmp_logo(struct logo_info *logo, const char *bmp_name)static int load_bmp_logo(struct logo_info *logo, const char *bmp_name){
+#define BUFFER_SIZE 128#ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGEstruct rockchip_logo_cache *logo_cache;struct bmp_header *header;
@@ -1269,6 +1271,7 @@ static int load_bmp_logo(struct logo_info *logo, const char *bmp_name)int ret = 0;int reserved = 0;int dst_size;
+    char cmd[BUFFER_SIZE] = {"0"};if (!logo || !bmp_name)return -EINVAL;
@@ -1285,10 +1288,15 @@ static int load_bmp_logo(struct logo_info *logo, const char *bmp_name)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;
+    //load logo from customizer partition firstly,
+    //if not found, read from resource
+    sprintf(cmd, "ext4load mmc 0:c 0x%p logo.bmp %x", header, RK_BLK_SIZE);
+    if(run_command(cmd, 0)){
+        len = rockchip_read_resource_file(header, bmp_name, 0, RK_BLK_SIZE);
+        if (len != RK_BLK_SIZE) {
+            ret = -EINVAL;
+            goto free_header;
+        }}logo->bpp = get_unaligned_le16(&header->bit_count);
@@ -1312,13 +1320,18 @@ static int load_bmp_logo(struct logo_info *logo, const char *bmp_name)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;
+    memset(cmd, 0, BUFFER_SIZE);
+    sprintf(cmd, "ext4load mmc 0:c 0x%p logo.bmp %x", pdst, size);
+    if(run_command(cmd, 0)){
+        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;
+        }}+if (!can_direct_logo(logo->bpp)) {/** TODO: force use 16bpp if bpp less than 16;

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了