0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM64位与ARM32位OP-TEE启动过程的差异

麦辣鸡腿堡 来源:TrustZone 作者:TrustZone 2023-11-07 15:12 次阅读

ARM32的OP-TEE与ARM64的OP-TEE启动过程大致相同。ARM64的OP-TEE的_start函数定义在generic_entry_a64.S文件中,而且该函数不像ARM32位系统一样会进入reset中去执行OP-TEE启动,而是直接在_start函数中就完成整个启动过程,

在进行初始化操作之前会注册一个异常向量表,该异常向量表会在唤醒从核阶段被使用,当主核通知唤醒从核时,从核会查找该异常向量表,然后命中对应的处理函数并执行从核的启动操作。

ARM64的OP-TEE的启动过程与ARM32的OP-TEE的启动过程几乎一样。ARM64位系统的_start函数内容说明如下:

FUNC _start , :
            mov x19, x0                      //保存paged_table的地址到x19中
            mov x20, x2                      //保存device tree的地址到x20中
            adr x0, reset_vect_table       //获取异常向量表的地址
            msr vbar_el1, x0                //将异常向量表的地址写入VBAR寄存器
            isb
            //设置系统控制寄存器,禁止cache等操作
        mrs x0, sctlr_el1
            mov x1, #(SCTLR_I | SCTLR_A | SCTLR_SA)
            orr x0, x0, x1
            msr sctlr_el1, x0
            isb
        //复制OP-TEE镜像中的init部分到内存中
        copy_init:
            ldp x3, x4, [x1], #16
            stp x3, x4, [x0], #16
            cmp x0, x2
            b.lt     copy_init
            msr daifclr, #DAIFBIT_ABT      //使能异常处理
            adr x0, __text_start           //将__text_start的地址保存到x0中
            adrp     x1, __end               //将_end的地址保存到x1中
            add x1, x1, :lo12:__end
            sub x1, x1, x0
            bl  inv_dcache_range           //关闭数据cache
            bl  console_init                //初始化console
            bl  core_init_mmu_map          //初始化MMU的页表
            bl  core_init_mmu_regs         //将MMU的页表信息写入TTBRx寄存器中
            bl  cpu_mmu_enable              //使能MMU
            bl  cpu_mmu_enable_icache      //使能MMU的指令cache
            bl  cpu_mmu_enable_dcache      //使能MMU的数据cache
            mov x0, x19                      //将paged_table的地址保存到x0中
            mov x1, #-1
            mov x2, x20                      //将device tree的地址保存到x2中
        //使用device tree和paged_table作为参数开始OP-TEE的启动
            bl  generic_boot_init_primary
            mov x19, x0
            adr x0, __text_start
            add x1, x1, :lo12:__end
            sub x1, x1, x0
            bl  flush_dcache_range         //刷新数据cache
            bl  thread_clr_boot_thread    //清空系统线程的状态
            mov x1, x19
            //将TEESMC_OPTEED_RETURN_ENTRY_DONE保存到x0
              mov x0, #TEESMC_OPTEED_RETURN_ENTRY_DONE
              smc #0  //调用SMC切换到normal world状态
              b   .   /* SMC不应该有返回操作 */
          END_FUNC _start
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9097

    浏览量

    367648
  • 函数
    +关注

    关注

    3

    文章

    4332

    浏览量

    62638
  • TEE
    TEE
    +关注

    关注

    0

    文章

    29

    浏览量

    10266
收藏 人收藏

    评论

    相关推荐

    ARM32设计

    ARM32设计,兼容16指令集,现在被软银收购ARM1-11 从功能机到智能手机新款命名 :cortex V7-A 手机智能设备-R 实时操作系统-M嵌入式开发stm32 性能从
    发表于 08-24 06:51

    请问HSE op-tee是什么关系?

    我有个问题。S32G同时支持HSE和op-tee。S32G的安全加解密和证书管理是通过HSE完成的吗?op-tee 和 HSE 只是其中之一吗?有没有相关的设计文档?谢谢
    发表于 04-06 06:26

    ARM64ARM32 的Linux程序区别在哪里

    arm64ARM64。我在示例中使用了AArch64寄存器,但我所描述的许多问题也发生在ARMv8-A 32执行状态。
    的头像 发表于 08-09 09:51 2.7w次阅读
    <b class='flag-5'>ARM64</b>与<b class='flag-5'>ARM32</b> 的Linux程序区别在哪里

    基于ARM32的微控制器AT32F403A系列

    基于ARM32的微控制器AT32F403A系列
    发表于 07-31 11:02 13次下载

    Core 3399KJ Linux根文件系统镜像(arm64/arm32

    电子发烧友网站提供《Core 3399KJ Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
    发表于 09-14 10:08 3次下载
    Core 3399KJ Linux根文件系统镜像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)

    Core 3399J Linux根文件系统镜像(arm64/arm32

    电子发烧友网站提供《Core 3399J Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
    发表于 09-14 09:24 0次下载
    Core 3399J Linux根文件系统镜像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)

    Core 3399 JD4 V2文件系统Linux根文件系统镜像(arm64/arm32

    电子发烧友网站提供《Core 3399 JD4 V2文件系统Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
    发表于 09-16 09:44 10次下载
    Core 3399 JD4 V2文件系统Linux根文件系统镜像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)

    ROC RK3399 PC Pro文件系统Linux根文件系统镜像(arm64/arm32

    电子发烧友网站提供《ROC RK3399 PC Pro文件系统Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
    发表于 09-20 10:59 5次下载
    ROC RK3399 PC Pro文件系统Linux根文件系统镜像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)

    AIO 3399ProC Linux根文件系统镜像(arm64/arm32

    电子发烧友网站提供《AIO 3399ProC Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
    发表于 09-21 09:52 11次下载
    AIO 3399ProC Linux根文件系统镜像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)

    OP-TEE中安全驱动的框架

    OP-TEE中的安全驱动是OP-TEE操作安全设备的载体。 TA通过调用某个安全驱动的接口就可实现对特定安全设备的操作。安全驱动在OP-TEE中的软件框架如图22-2所示。 (其实这里,你要搞清楚
    的头像 发表于 10-30 16:04 832次阅读
    <b class='flag-5'>OP-TEE</b>中安全驱动的框架

    OP-TEE的内核初始化过程

    /arch/arm generic_entry_a64.S文件中。 2 OP-TEE的内核初始化过程 ** _star
    的头像 发表于 11-02 17:57 1448次阅读
    <b class='flag-5'>OP-TEE</b>的内核初始化<b class='flag-5'>过程</b>

    OP-TEE的内核初始化函数调用

    generic_boot_init_primary函数内容 generic_boot_init_primary函数是OP-TEE建立系统运行环境的入口函数,该函数会进行建立线程运行空间、初始化
    的头像 发表于 11-02 18:18 763次阅读
    <b class='flag-5'>OP-TEE</b>的内核初始化函数调用

    OP-TEE服务项的启动

    OP-TEE服务项的启动分为: service_init以及service_init_late ,需要被启动的服务项通过使用这两个宏,在编译时,相关服务的内容将会被保存到initcall1
    的头像 发表于 11-07 15:04 737次阅读

    OP-TEE的安全存储的简介

    OP-TEE的安全存储的简介 OP-TEE的安全存储功能是OP-TEE为用户提供的安全存储机制。用户可使用安全存储功能来保存敏感数据、密钥等信息。 使用OP-TEE安全存储功能保存数据
    的头像 发表于 11-21 11:33 1073次阅读
    <b class='flag-5'>OP-TEE</b>的安全存储的简介

    OP-TEE安全存储安全文件的格式

    安全文件、dirf.db文件的数据格式和操作过程 OP-TEE的安全存储功能可满足用户保存敏感数据的需求,需要被保存的数据会被加 密保存到文件系统或RPMB分区中 。 当选择将数据保存到文件系统中
    的头像 发表于 11-21 11:49 826次阅读
    <b class='flag-5'>OP-TEE</b>安全存储安全文件的格式