Rockchip 防抄板技术
Rockchip 芯片提供防抄板技术,保护客户的固件、私有数据、核心代码。
防抄板技术主要用于防止客户的固件和私有数据被非授权用户非法拷贝并使用,避免被抄板造成商业上的损失。
信息
Rockchip 防抄板技术方案分为三个等级:初级方案,中级方案,高级方案。
其中初级方案可直接参照 Rockchip 官方文档
Rockchip Anti Copy Board 开发指南
在我们的产品上进行防抄板应用开发而无需修改 Bootloader。
中级方案和高级方案则依赖开启 BL32 以运行 optee 来读写 OTP 数据,可根据以下章节开启 BL32 后继续参考 Rockchip Anti Copy Board 开发指南进行防抄板应用开发。
注意
每颗芯片的 OTP 存储仅可写入一次,请谨慎操作。瑞莎不对因用户失误所产生的后果负责。
开启 BL32
获取代码
按照 U-boot 开发编译打包一次 Bootloader。
开启 BL32 并再次编译打包
# bsp 仓库根目录
mv u-boot/rknext/0101-enable-package-bl32.patch.disable u-boot/rknext/0101-enable-package-bl32.patch
echo "CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y" >> u-boot/rknext/kconfig.conf
./bsp u-boot rknext
安装并烧录 Bootloader
按照 U-boot 开发将 deb
包复制至板端并使用 setup.sh
刷写 Bootloader。
常见问题
使用初级方案时读写数据报错?
检查是否已经使用 rsetup
更新系统 和 U-boot。
中级方案的 mid.bin
如何生成?
# 可将 echo 后的参数改为自己需要的数据内容
echo "00112233445566778899AABBCCDDEEFF" > mid.hex && xxd -r -p mid.hex mid.bin
使用中高级方案时读写数据报错?
可能缺少 tee-supplicant
服务
sudo apt install tee-supplicant python3-pycryptodome optee-client-dev libteec1 gcc-arm-linux-gnueabihf
sudo systemctl enable --now tee-supplicant
可能忘记拷贝 optee
可信应用
sudo cp rk_tee_user/v2/out/ta/rk_anti_copy_board/3d4fc699-2065-7bb9-33c7-b6529b43c91a.ta /lib/optee_armtz
Rockchip 官方文档提到的 BoardProofTool
、ProofDll
源码和 rk_tee_user
如何获取?
BoardProofTool
: BoardProofTool_v1.01_20240823_02.zip
ProofDll
源码: ProofDll.zip
rk_tee_user
:
git clone https://gitlab.com/rockchip_linux_sdk_6.1/android/rk/platform/system/rk_tee_user.git -b develop-next
如何在板端编译 rk_tee_user
?
安装依赖:
sudo apt install tee-supplicant python3-pycryptodome optee-client-dev \
libteec1 build-essential crossbuild-essential-armhf
sudo systemctl enable --now tee-supplicant
参照下方 diff, 修改 build.sh
编译脚本:
diff --git a/v2/build.sh b/v2/build.sh
index 35a39f4..65f4168 100755
--- a/v2/build.sh
+++ b/v2/build.sh
@@ -19,10 +19,10 @@ else
if [ ! -d "$TOOLCHAIN_PREBUILTS" ]; then
TOOLCHAIN_PREBUILTS=$WORK_DIR_TOP/../../../prebuilts
fi
- TOOLCHAIN_PATH_ARM32=$TOOLCHAIN_PREBUILTS/gcc/linux-x86/arm/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin
- TOOLCHAIN_PATH_AARCH64=$TOOLCHAIN_PREBUILTS/gcc/linux-x86/aarch64/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin
- CROSS_COMPILE32=arm-none-linux-gnueabihf-
- CROSS_COMPILE64=aarch64-none-linux-gnu-
+ TOOLCHAIN_PATH_ARM32=/usr/bin/
+ TOOLCHAIN_PATH_AARCH64=/usr/bin
+ CROSS_COMPILE32=arm-linux-gnueabihf-
+ CROSS_COMPILE64=aarch64-linux-gnu-
fi
if [ -z "$AARCH64_TOOLCHAIN" ]; then