UFS 11 - UFS RPMB分区功能验证

验证UFS的RPMB分区的功能可以借助于ufs-utils去验证,ufs-utils也可以去验证UFS其他lun的功能。

UFS 1-UFS架构简介1
UFS 2 -UFS架构简介2
UFS 3 - UFS RPMB
UFS 4 - UFS Boot
UFS 5 - UFS UIC Layer: MIPI M-PHY
UFS 6 - UAP – SCSI Commands(1)
UFS 7 - UAP – SCSI Commands(2)
UFS 8 - UAP – SCSI Commands(3)
UFS 9 - UAP – SCSI Commands(4)
UFS 10 - UAP – SCSI Commands(5)

1 ufs-utils下载和编译

1.1 ufs-utils开源代码下载

ufs-utils的github库链接:https://github.com/westerndigitalcorporation/ufs-utils

可以通过git clone [email protected]:westerndigitalcorporation/ufs-utils.git下载该代码

1.2 编译

需要在linux环境下去编译该开源工具

Set CROSS_COMPILE variable(e.g.):

export CROSS_COMPILE=/XXX/aarch64-linux-gnu-

如果本地没有安装编译工具,则需要安装aarch64-linux-gnu-gcc
在ubuntu上使用sudo apt-get install aarch64-linux-gnu-gcc安装一下即可,交叉编译工具可以指定为:export CROSS_COMPILE=/usr/bin/aarch64-linux-gnu-

Build:

"make"

Clean:

"make clean"

2 ufs-utils工具使用

2.1 ufs-utils --help

  • 显示帮助信息:ufs-utils help|–help|-h
  • 显示版本信息:ufs-utils -v
  • 显示特定命令的详细帮助信息:ufs-utils <desc | attr | fl | err_hist | uic | ffu | vendor | rpmb | hmr | spec_version | list_bsg> --help|-h
    注意:请注意,<desc | attr | fl | err_hist | uic | ffu | vendor | rpmb | hmr | spec_version | list_bsg> 是可替换的命令,您可以在其中选择一个来查看其详细帮助信息。
# ./ufs-utils --help

 Usage:

        ufs-utils help|--help|-h
                Show the help.

        ufs-utils -v
                Show the version.

        ufs-utils <desc | attr | fl | err_hist | uic | ffu | vendor | rpmb | hmr | spec_version | list_bsg> --help|-h
                Show detailed help for a command
#

2.2 ufs-utils rpmb --help

# ./ufs-utils rpmb --help

 RPMB command usage:

        ufs-utils rpmb [-t] <rpmb cmd idn> [-p] <path to device>??-k <path to device> -l <lun> -d <output/input file.

        -t       RPMB cmd type idn
                        0:      Key provision
                        1:      Read Write counter
                        2:      Read RPMB data
                        3:      Write RPMB data
                        4:      Secure Write Protect Configuration Block Write
                        5:      Secure Write Protect Configuration Block Read

        -s       RPMB start address (default value is 0)

        -n       number of RPMB read/write blocks (default value is 1)

        -p       device path (RPMB LUN)

        -k       path to RPMB key, the key path must pass to the tool in case of writing to RPMB,
                 in case of reading from RPMB ,the key may pass, in case we want to validate the MAC
                 in case we want to validate the hash value

        -l       lun number(byte) using as parameter for Secure Write Config Read

        -w       path to data file

        -m       RPMB region.

        -g       sg struct ver - 0: SG_IO_VER4 (default), 1: SG_IO_VER3

        Example - Read 16MB of data from RPMB LUN started from address 0 to output file
                  ufs-utils rpmb -t 2 -p /dev/0:0:0:49476 -s 0 -n 65536 -w output_file

        Example - Write RPMB key
                  ufs-utils rpmb -t 0 -p /dev/0:0:0:49476 -k key_file

        Example - Write RPMB key to region 2
                  ufs-utils rpmb -t 0 -m 2 -p /dev/0:0:0:49476 -k key_file

        Example - Write Secure Write Config block
                  The input file is Secure Write Config block filled according to the spec
                  ufs-utils rpmb -t 4 -p /dev/0:0:0:49476  -w input_file

        Example - Read Secure Write Config block
                  After the command successfully finished , the output file will contains
                  Secure Write Config block of lun 1
                  ufs-utils rpmb -t 5 -p /dev/0:0:0:49476  -l 1 -d output_file
#

对应命令的解释如下所示:

ufs-utils rpmb [-t] <rpmb cmd idn> [-p] <path to device>??-k <path to device> -l <lun> -d <output/input file.

        -t       RPMB cmd type idn
                        0:      密钥配置 (Key provision)
                        1:      读写计数器 (Read Write counter)
                        2:      读取 RPMB 数据 (Read RPMB data)
                        3:      写入 RPMB 数据 (Write RPMB data)
                        4:      安全写保护配置块写入 (Secure Write Protect Configuration Block Write)
                        5:      安全写保护配置块读取 (Secure Write Protect Configuration Block Read)

        -s       RPMB 起始地址 (默认值为 0)

        -n       RPMB 读/写的块数 (默认值为 1)

        -p       设备路径 (RPMB LUN)

        -k       RPMB 密钥文件路径,在写入 RPMB 时必须传递密钥路径,在从 RPMB 读取时可以选择性传递密钥路径,以验证 MAC 或哈希值。

        -l       用作 Secure Write Config 读取参数的 LUN 号 (以字节为单位)

        -w       数据文件路径

        -m       RPMB 区域。

        -g       sg 结构版本 - 0: SG_IO_VER4 (默认值), 1: SG_IO_VER3

        示例 - 从 RPMB LUN 以起始地址 0 读取 16MB 数据到输出文件:
                  ufs-utils rpmb -t 2 -p /dev/0:0:0:49476 -s 0 -n 65536 -w output_file

        示例 - 写入 RPMB 密钥:
                  ufs-utils rpmb -t 0 -p /dev/0:0:0:49476 -k key_file

        示例 - 将 RPMB 密钥写入区域 2:
                  ufs-utils rpmb -t 0 -m 2 -p /dev/0:0:0:49476 -k key_file

        示例 - 写入 Secure Write Config 块:
                  输入文件是根据规范填充的 Secure Write Config 块
                  ufs-utils rpmb -t 4 -p /dev/0:0:0:49476 -w input_file

        示例 - 读取 Secure Write Config 块:
                  命令成功完成后,输出文件将包含 LUN 1 的 Secure Write Config 块
                  ufs-utils rpmb -t 5 -p /dev/0:0:0:49476 -l 1 -d output_file

2.3 UFS RPMB lun验证

  • key可以通过openssh去生成,也可以自己随意写一个特地的32位字符
  • input是包含要写入RPMB数据的文件
  • output是存放从RPMB读出数据的文件。
  • 比对Input和output文件内容在linux上可以使用meld去比对。
# ./ufs-utils rpmb -t 0 -m 0 -p /dev/bsg/0:0:0:49476 -k key
RPMB key is programmed
# ./ufs-utils rpmb -t 2 -p /dev/bsg/0:0:0:49476 -s 0 -n 16 -w output -m 0 -k key
Finish to read RPMB data
# ./ufs-utils rpmb -t 3 -p /dev/bsg/0:0:0:49476 -s 0 -n 16 -w input -m 0 -k key
Finish to write RPMB data
# ./ufs-utils rpmb -t 2 -p /dev/bsg/0:0:0:49476 -s 0 -n 16 -w output -m 0 -k key
Finish to read RPMB data
# ./ufs-utils --help

猜你喜欢

转载自blog.csdn.net/u014100559/article/details/131329309
今日推荐