导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    全志SecureBoot无法正常启用

    其它全志芯片讨论区
    4
    9
    3277
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      mengxp LV 5 最后由 编辑

      我使用R328平台刷写安全固件遇到了一些问题,大家能帮忙看看吗?

      1.我用pack -s生成了 secure_v0.img 结尾的安全固件,然后用 PhoenixSuit 烧录成功了。
      2.我配置dragonkey全局配置安全key,列表中的sn和mac删掉了,只添加rotpk配置,然后用dragonsn烧录了rotpk。

      然后我想验证板子是否已经工作在secureboot模式
      1.我查看了板子引导日志,发现是SBOOT is starting,证明是SBOOT在引导
      2.下面的UBOOT 日志有 secure enable bit: 1 字样,证明 efuse 中开启了secure enable bit。
      3.我想验证rotpk是否已经烧录成功,但是不知道怎么做,我看uboot2014的key_burn中有个 efuse_read 命令可以读,但是uboot2018上并没有,我把这个命令代码复制到uboot2018的key_burn.c上然后重新编译uboot,pack -s,烧录,打断uboot引导,执行 efuse_read rotpk 命令,发现已经读出了我烧录的rotpk。
      4.那么根据全志wifi中的描述,一旦secure enable bit=1,且rotpk烧录了有效值,芯片就应该使用 S-BROM 引导而不是 N-BROM 引导。但是我用 sunxi-fel read 0x0 0x10000 brom.bin 保存的brom发现仍然是 N-BROM,里面有 eGON字样,没有 TOC 字样。
      5.另外我用 sunxi-fel 仍然可以下载未签名的代码到cpu上执行。这里测试我使用的是未签名的 fes1.fex

      上述验证步骤12345中的相关数据我已经打包上传到这里了
      secureboot问题.zip

      那么我的问题是
      1.芯片此时为什么没有使用S-BROM引导,是还需要做哪个步骤吗?
      2.如果已经是S-BROM引导,是我dump BROM的那个方法错误吗?
      3.如果已经是S-BROM引导,sunxi-fel 仍然能执行未授权代码,是正常的吗?

      向大家请教,谢谢了!

      M W A 3 条回复 最后回复 回复 引用 分享 0
      • M
        mengxp LV 5 @mengxp 最后由 编辑

        @xiaowenge 向小文哥求助!!

        1 条回复 最后回复 回复 引用 分享 0
        • W
          weifooo LV 2 @mengxp 最后由 编辑

          @mengxp 支持Trustzone的芯片,CPU有安全和非安全两种运行模式。非安全模式,CPU只能访问普通资源(比如DDR,外设资源); 安全模式下,CPU可访问受保护的资源(比如受保护的RAM/ROM等)。当芯片处于强制烧录状态时,CPU是处于非安全模式的,通过FEL也只能读到非安全BROM, 读不到安全的S-BROM是正常现象。

          M 2 条回复 最后回复 回复 引用 分享 0
          • M
            mengxp LV 5 最后由 编辑

            我用uboot读了下brom发现确实是SBROM,那我想可能知道了上述问题答案…

            1.芯片此时确实是 S-BROM 引导的,打断uboot引导,md.b 0x0 0x10000 可以读到 S-BROM 代码(包含 TOC0.GLH)
            2.此时进入 FEL 模式,是运行在 non-secure mode,sunxi-fel 读到的是 N-BROM 映射。
            3.FEL 运行在non-secure mode,应该是无法触碰 secure peripheral,所以即使在secureboot模式下进入 fel 也是安全的。

            上述第三点我不太确认,想请求确认下

            1 条回复 最后回复 回复 引用 分享 0
            • M
              mengxp LV 5 @weifooo 最后由 编辑

              @weifooo 哦哦 感谢大神的回复,我明白了!

              1 条回复 最后回复 回复 引用 分享 0
              • M
                mengxp LV 5 @weifooo 最后由 编辑

                @weifooo

                哦我还有个问题就是 F1C200s 支持secureboot/trustzone吗?

                我看sdk的createkey脚本里有
                PLATFORM_LIST="r18 c200s r30 r311 r328s2 r328s3 mr112"
                看起来createkey支持 200s 平台的,但是执行时找不到dragon toc config失败了。。。

                是不是这个芯片IC设计上支持trustzone,但实际后续开发sdk的时候取消了这个支持?

                C 1 条回复 最后回复 回复 引用 分享 0
                • C
                  chinaluke LV 2 @mengxp 最后由 编辑

                  @mengxp F1C200s是不支持Trustzone的。

                  1 条回复 最后回复 回复 引用 分享 0
                  • A
                    a1314258 LV 3 @mengxp 最后由 编辑

                    @mengxp 在 全志SecureBoot无法正常启用 中说:

                    efuse_read

                    请教一下,我是这样在key_burn.c加的

                    #include <common.h>
                    #include <command.h>
                    #include <sys_config.h>
                    #include <securestorage.h>
                    #include <private_uboot.h>
                    #include <smc.h>
                    #include <efuse_map.h>
                    #include <sunxi_board.h>
                    
                    int do_efuse_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                    {
                    	char *efuse_name;
                    	char buffer[32];
                    	int  ret;
                    
                    	if(argc != 2)
                    	{
                    		printf("the efuse item name is empty\n");
                    
                    		return -1;
                    	}
                    	efuse_name = argv[1];
                    	printf("try to read %s\n", efuse_name);
                    	memset(buffer, 0, 32);
                    	//change
                    	//printf("buffer addr=0x%x\n", (u32)buffer);
                    	printf("buffer addr=0x\n");
                    	ret = arm_svc_efuse_read(efuse_name, buffer);
                    	if(ret)
                    	{
                    		printf("read efuse key [%s] failed\n", efuse_name);
                    	}
                    	else
                    	{
                    		printf("read efuse key [%s] successed\n", efuse_name);
                    		sunxi_dump(buffer, 32);
                    	}
                    
                    	return 0;
                    }
                    
                    U_BOOT_CMD(
                    	efuse_read, 3, 0, do_efuse_read,
                    	"read efuse key",
                    	"usage: efuse_read efusename"
                    );
                    

                    muboot 编译失败了。

                    ./../tools/toolchain/riscv64-linux-x86_64-20200528/bin/riscv64-unknown-linux-gnu-ld.bfd: board/sunxi/built-in.o: in function `do_efuse_read':
                    /home/user/tina-d1-h/lichee/brandy-2.0/u-boot-2018/board/sunxi/key_burn.c:96: undefined reference to `arm_svc_efuse_read'
                    Makefile:1480: recipe for target 'u-boot' failed
                    make: *** [u-boot] Error 1
                    muboot stop for build error in brandy, Please check!
                    
                    
                    A 1 条回复 最后回复 回复 引用 分享 0
                    • A
                      a1314258 LV 3 @a1314258 最后由 编辑

                      @a1314258
                      同样的方法使用在r329的key_burn.c
                      编译成功了,无语

                      1 条回复 最后回复 回复 引用 分享 0
                      • 1 / 1
                      • First post
                        Last post

                      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                      行为准则 | 用户协议 | 隐私权政策