rk3568 , openharmony3.2 , 8G , 无法启动

ops/2024/12/14 17:38:39/

问题: 目前使用 openharmony 3.2 版本的 镜像 ,在8G的核心板上 ,烧写之后,屏幕没有画面。

报错如下:

现象如下: 

1 uboot阶段是 有画面的。

2、命令行可以正常进入系统。

3、 但是 没有进入 鸿蒙的 Lancher 界面,一致卡在 uboot 阶段的logo 上。

软件说明:  烧写的是openharmony3.2 版本的 镜像, 这个镜像 是公司 移植过的,在2G 内存的版本上 是可以正常运行的。也可以进入 lancher .

硬件说明: 3568 8G核心板, + 底板。

解决问题的总体逻辑:  看来是 rga 的错误, 这应该是 一个 关于 系统层的错误。

看看网上的资料,这份资料非常的重要。

总结:

1 、 这个说明 已经 非常具体了。连文档的 具体位置 都只出来了。

2、 原因就是 , RGA的问题,看来 ,对于 RGA的 的使用 内存 必须在 4G范围之内, 那为什么 类似 debian 之类的 linux 系统没有这个问题呢? 估计 要么没有用到RGA ,要么使用的时候 ,申请的内存在 4G以内。

3、 他的处理方式是 直接 将 8G内存 设置为 4G。 我也使用这种方式。

疑问: 那么有没有 一种方式,既可以解决这个问题,又可以使用8G的内存呢?

再来看看 这个资料 :

接下里 就是 我自己的操作了。

首先我 烧写了一下  2G 版本的镜像, 熟悉了一下流程。

然后, 由于 openharmony  源码中没有 uboot 的源码 ,所以 应该不涉及 鉴权的问题。

我改 uboot 的话,就直接 拿 3568  linux 源码中的 uboot 进行编译,编译出镜像 之后,然后 替换要烧写的 这个 uboot 镜像 就行。

文件路径:u-boot/arch/arm/mach-rockchip/param.c

我改的是这个地方:

 struct memblock *param_parse_ddr_mem(int *out_count)
264 {
265         struct udevice *dev;
266         struct memblock *mem;
267         struct ram_info ram;
268         int i, ret, count;
269
270         /*
271          * Get memory region of DDR
272          *
273          * 1. New: atags info;
274          * 2. Leagcy: os register;
275          */
276 #ifdef CONFIG_ROCKCHIP_PRELOADER_ATAGS
277         struct tag *t;
278         u64 base, size;
279         int n;
280
281         t = atags_get_tag(ATAG_DDR_MEM);
282         if (t && t->u.ddr_mem.count) {
283                 /* extend top ram size */
284                 if (t->u.ddr_mem.flags & DDR_MEM_FLG_EXT_TOP)
285                         gd->ram_top_ext_size = t->u.ddr_mem.data[0];
286
287                 /* normal ram size */
288                 count = t->u.ddr_mem.count;
289                 mem = calloc(count + MEM_RESV_COUNT, sizeof(*mem));
290                 if (!mem) {
291                         printf("Calloc ddr memory failed\n");
292                         return 0;
293                 }
294
295                 for (i = 0, n = 0; i < count; i++, n++) {
296                         base = t->u.ddr_mem.bank[i];
297                         size = t->u.ddr_mem.bank[i + count];
298
299
300
301         //topeet wang added
302                         base =0;
303                         size = 0xFFFFFFFF;
304         //topeet wang end
305         //
306         //
307                         /* 0~4GB */
308                         if (base < SZ_4GB) {
309                                 mem[n].base = base;
310                                 mem[n].size = ddr_mem_get_usable_size(base, size);
311                                 if (base + size > SZ_4GB) {
312                                         n++;
313                                         mem[n].base_u64 = SZ_4GB;
314                                         mem[n].size_u64 = base + size - SZ_4GB;
315                                 }
316                         }
317
318         //topeet wang added
318         //topeet wang added
319         //topeet wang added             } else {
320         //topeet wang added                     // 4GB+
321         //topeet wang added                     mem[n].base_u64 = base;
322         //topeet wang added                     mem[n].size_u64 = size;
323         //topeet wang added             }
324
325                         assert(n < count + MEM_RESV_COUNT);
326                 }
327
328                 *out_count = n;
329                 return mem;
330         }
331 #endif
332
333         /* Leagcy */
334         ret = uclass_get_device(UCLASS_RAM, 0, &dev);
335         if (ret) {
336                 debug("DRAM init failed: %d\n", ret);
337                 return NULL;
338         }
339         ret = ram_get_info(dev, &ram);
340         if (ret) {
341                 debug("Cannot get DRAM size: %d\n", ret);
342                 return NULL;
343         }
344
345         debug("SDRAM base=%lx, size=%lx\n",
346               (unsigned long)ram.base, (unsigned long)ram.size);
347
348         count = 1;
349         mem = calloc(1, sizeof(*mem));
350         if (!mem) {
351                 printf("Calloc ddr memory failed\n");
352                 return 0;
353         }
354
355         for (i = 0; i < count; i++) {
356                 mem[i].base = CONFIG_SYS_SDRAM_BASE;
357                 mem[i].size = ddr_mem_get_usable_size(mem[i].base, ram.size);
358         }
359
360         *out_count = count;
361         return mem;
362 }

改完之后 编译uboot + 单独烧写 uboot 。

系统可以启动 +  可以进入 鸿蒙的lancher .

参考资料:

8G内存版本的Dayu200烧录OH4.x后开机异常_rk3568 config.cfg-CSDN博客

dayu200替换DDR硬件内存为8G后OpenHarmony-3.2-Release不能正常显示界面,无法正常启动应用_AlgoIdeas-Laval社区

《U-Boot v2017(next-dev) 开发指南》


http://www.ppmy.cn/ops/141871.html

相关文章

求解球面的一组正交标架

目录 求解球面的一组正交标架 求解球面的一组正交标架 球面 r ( u , v ) ( a cos ⁡ u cos ⁡ v , a cos ⁡ u sin ⁡ v , a sin ⁡ u ) \mathbf{r}(u,v)\left(a\cos u\cos v,a\cos u\sin v,a\sin u\right) r(u,v)(acosucosv,acosusinv,asinu), 求得 r u ( − a sin ⁡ u c…

‌植物神经紊乱患者:科学补充维生素,助力健康恢复

植物神经紊乱&#xff0c;作为一种常见的神经系统疾病&#xff0c;给患者的日常生活带来了诸多困扰。其症状涉及多个系统&#xff0c;如心血管、消化、呼吸等&#xff0c;表现为心悸、心慌、消化不良、失眠多梦等。面对这一挑战&#xff0c;科学合理的营养补充&#xff0c;尤其…

python爬虫--小白篇【爬虫实践】

一、前言 1.1、王者荣耀皮肤爬虫 根据王者荣耀链接&#xff0c;将王者荣耀的全部英雄的全部皮肤图片爬取保存到本地。经过分析得到任务的三个步骤&#xff1a; 根据首页全部英雄列表连接获取全部英雄的名称hero_name以及对应的hero_id&#xff1b;根据单个英雄的hero_name和h…

ctfshow-web 151-170-文件上传

151. 我们首先想到就是上传一句话木马。但是看源代码限制了png。 &#xff08;1&#xff09;改前端代码。 这里是前端限制了上传文件类型&#xff0c;那我们就改一下就好了嘛,改成php。 这里直接修改不行&#xff0c;给大家推荐一篇简短文章&#xff0c;大家就会了&#xff08…

Java面试题精选:设计模式(二)

1、装饰器模式与代理模式的区别 1&#xff09;代理模式(Proxy Design Pattern ) 原始定义是&#xff1a;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许将请求提交给对象前后进行一些处理。 代理模式的适用场景 功能增强 当需要对一个对…

关于C/C++中typedef为一个类型(包括结构体类型)同时定义多个别名、定义指针类型别名的语法

C/C中可以用关键词typedef为一个类型定义别名&#xff0c;而且可以一次定义多个别名哟&#xff0c;别名与别名之间用逗号分隔&#xff0c;并且一般别名和类型的指针类型也可以同时被定义哟。 目录 示例1-为int类型定义三个别名示例2-为int类型同时定义一般别名和指针类型别名示…

离开wordpress

wordpress确实挺好用的 插件丰富 主题众多 收费的插件也很多 国内的做主题的也挺好 但是服务器跑起来各种麻烦伤脑筋 需要花在维护的时间太多了 如果你的网站持续盈利 你就会更担心访问质量访问速度 而乱七八糟的爬虫黑客 让你的服务器不堪重负 突然有一天看到了静态站…

力扣9. 回文数

给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&#xff0c;而…