问题: 目前使用 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) 开发指南》