美文网首页
OP-TEE5-RPMB FS1

OP-TEE5-RPMB FS1

作者: 阿棍儿_Leon | 来源:发表于2019-04-05 18:25 被阅读0次

RPMB FS流程

首先说软件的层次结构。
代码主要在optee_os/core/tee/tee_rpmb_fs.c里面,主要有两类函数,分别为rpmb_fs_xxxtee_rpmb_xxx,分别对应了软件的两个层次。
下面从参数类型体会一下。

static TEE_Result rpmb_fs_read(struct tee_file_handle *tfh, size_t pos,
                   void *buf, size_t *len)
{...}
static TEE_Result tee_rpmb_read(uint16_t dev_id, uint32_t addr, uint8_t *data,
                uint32_t len, const uint8_t *fek,
                const TEE_UUID *uuid)
{...}

rpmb_fs_read的参数中,tfh相当于fread的FILE指针,看起来就和fread很像。在tee_rpmb_read的参数中,addr是RPMB分区的字节地址。很明显前者是较上层的,是用来处理文件的,而后者是底层的,是直接操作RPMB分区中字节的,这些字节参数就是由前者从文件信息转化来的。前者就是给SVC层用的,SVC拿到下面的rpmb_fs_ops就可以使用RPMB FS了。

const struct tee_file_operations rpmb_fs_ops = {
    .open = rpmb_fs_open,
    .create = rpmb_fs_create,
    .close = rpmb_fs_close,
    .read = rpmb_fs_read,
    .write = rpmb_fs_write,
    .truncate = rpmb_fs_truncate,
    .rename = rpmb_fs_rename,
    .remove = rpmb_fs_remove,
    .opendir = rpmb_fs_opendir,
    .closedir = rpmb_fs_closedir,
    .readdir = rpmb_fs_readdir,
};

初始化

对于RPMB,这个文件之外并没有专门的触发初始化的动作,初始化是随着第一次使用RPMB FS完成的。
仔细观察可以发现rpmb_fs_xxx里面都会经过rpmb_fs_setup函数,tee_rpmb_xxx里面都会经过tee_rpmb_init函数。它们就是两个层次的初始化,前者主要是在第一次烧入镜像或者平时,生成或读取RPMB FS文件系统的元数据等相对抽象的信息,后者主要是生成Secure Key(tee_rpmb_key_gen)。

相关文章

  • OP-TEE5-RPMB FS1

    RPMB FS流程 首先说软件的层次结构。代码主要在optee_os/core/tee/tee_rpmb_fs.c...

  • OP-TEE5-RPMB FS2

    RPMB FS流程 具体见注释。 rpmb_fs_open @optee_os/core/tee/tee_rpmb...

  • OP-TEE5-RPMB FS0

    RPMB FS 讲到RPMB FS,就要说一下RPMB访问的规则了。这个规则在OP-TEE的源码中有部分体现。 为...

网友评论

      本文标题:OP-TEE5-RPMB FS1

      本文链接:https://www.haomeiwen.com/subject/luzgbqtx.html