潮声隔雨深 · 2022年01月02日

全志R329如何解决Tina双系统uboot校验rootfs失败的问题?

请问全志R329如何解决Tina双系统uboot校验rootfs失败的问题?

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2022年01月04日
本回答来源全志R329如何解决Tina双系统uboot校验rootfs失败的问题?

问题描述

内核双备份系统安全固件启动失败,有如下log:

Hit any key to stop autoboot: 0
[06.393]partinfo: name boot1, start 0xe00, size 0x7800
[06.989]begin to verify rootfs
get part: rootfs info failed
bootm - boot application image from memory
Usage:
bootm [addr [arg …]]

boot application image stored in memory

问题分析

从log中看,提示没有找到名字为rootfs的分区信息。

此问题原因:由于Tina默认当前是但系统,uboot校验rootfs时直接指定的rootfs的分区名“rootfs”。但是客户是双系统,rootfs有两个分区,分区名为rootfs1与rootfs2,而这里直接指定rootfs,会造成找不到对应的分区信息。

解决办法

不直接指定,从evn环境变量中获取当前要启动的rootfs分区。在tina/lichee/brandy-2.0/u-boot-2018/加入如下补丁:

diff --git a/cmd/bootm.c b/cmd/bootm.c
index f4071e026e..0a267b4251 100644
--- a/cmd/bootm.c
+++ b/cmd/bootm.c
@@ -231,6 +231,7 @@ int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                struct sunxi_image_verify_pattern_st verify_pattern = {
                        0x1000, 0x100000, -1
                };
+               char *rootfs_name = env_get("root_partition");
                char *s = env_get("rootfs_per_MB");
                if (strcmp(s, "full") == 0) {
                        full = 1;
@@ -246,7 +247,7 @@ int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

                        full = 0;
                }
-               if (sunxi_verify_partion(&verify_pattern, "rootfs", "rootfs", full) != 0) {
+               if (sunxi_verify_partion(&verify_pattern, rootfs_name, "rootfs", full) != 0) {
                        return -1;
                }
你的回答
关注数
2
收藏数
0
浏览数
3249
极术小姐姐 最狂的风与最静的海
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息