写点什么

Jetson Xavier nx 全盘加密

作者:一五
  • 2024-03-27
    广东
  • 本文字数:1905 字

    阅读完需:约 6 分钟

Jetson Xavier nx 全盘加密

Jetson xavier nx 是一款性价比不错的边缘计算模块。处于安全考虑,需要对全盘进行加密。官方文档描述的比较晦涩,实操性不强。花了两天时间终于搞定了全盘加密,在这里分享操作步骤,免得走弯路。


一 前期准备

  1. 主机系统需要 ubuntu 20.4 系统,我是用 VMware 建立了一个虚拟机安装的 ubuntu。

  2. 这个模块本身带有 16G 的 eMMC 存储,这个空间只够安装基本的系统,JetPack 都装不下。我安装了一个 256G 的 NVMe SSD 作为主存储使用。安装前,要查询一下磁盘的参数,记录下来备用。

sudo fdisk -l /dev/nvme0n1Disk /dev/nvme0n1: 238.49 GiB, 256060514304 bytes, 500118192 sectorsDisk model: aigo NVMe SSD DP35 256GBUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytes二
复制代码


二 下载开发套件系统

Xavier nx 支持的最新 Jetson Linux 版本为 35.5,去官网下载开发套件,并配置烧录环境。

https://developer.nvidia.com/embedded/jetson-linux-r3550

wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v5.0/release/jetson_linux_r35.5.0_aarch64.tbz2wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v5.0/release/tegra_linux_sample-root-filesystem_r35.5.0_aarch64.tbz2export L4T_RELEASE_PACKAGE="Jetson_Linux_R35.5.0_aarch64.tbz2"export SAMPLE_FS_PACKAGE="Tegra_Linux_Sample-Root-Filesystem_R35.5.0_aarch64.tbz2"export BOARD="jetson-xavier-nx-devkit-emmc"tar xf ${L4T_RELEASE_PACKAGE}sudo tar xpf ${SAMPLE_FS_PACKAGE} -C Linux_for_Tegra/rootfs/cd Linux_for_Tegra/sudo ./apply_binaries.shsudo ./tools/l4t_flash_prerequisites.sh
复制代码


三 配置磁盘参数

编辑配置文件(./tools/kernel_flash/flash_l4t_nvme_rootfs_enc.xml),设置硬盘参数。

第一个需要设置的参数是硬盘的扇区数,使用我们前面查到的参数。

?xml version="1.0"?>
<!-- Nvidia Tegra Partition Layout Version 1.0.0 -->
<partition_layout version="01.00.0000"> <device type="external" instance="0" sector_size="512" num_sectors="500118192">
复制代码


第二个需要设置的参数是加密磁盘的大小,这里使用的 256G 磁盘,实际加密分区的大小为 237G。

237 x 1024 x 1024 x 1024 = 254476812288 ,得到的这个数字就是我们要添加到配置文件中的数据。找到 APP_ENC 分区的设置,将前面的数据填入 <size> 条目中。

<partition name="APP_ENC" id="2" type="data" encrypted="true" reencrypt="false">            <allocation_policy> sequential </allocation_policy>            <filesystem_type> basic </filesystem_type>            <size> 254476812288 </size>            <file_system_attribute> 0 </file_system_attribute>            <allocation_attribute> 8 </allocation_attribute>            <percent_reserved> 0 </percent_reserved>            <align_boundary> 4096 </align_boundary>            <unique_guid> APP_ENC_UUID </unique_guid>            <filename> system_root_encrypted.img_ext </filename>            <description> **Required.** Contains the encrypted root partition("/"). </description>        </partition>
复制代码

注:加密分区大小是需要根据磁盘大小,及其他分区大小计算得出。我采用的是比较笨,也比较可靠的办法。第一次烧录的时候,未指定分区大小,系统自动分配 16G 空间,然后我根据磁盘未分配空间,得出可分配 237G 空间给加密分区。


四 烧录系统

准备工作做好后,烧录就比较简单了,只是等待时间比较长。

echo "00000000000000000000000000000000" > disk_enc.key   #换成自己的16进制keysudo ROOTFS_ENC=1 ./flash.sh -i ./disk_enc.key $BOARD mmcblk0p1sudo ROOTFS_ENC=1 ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1  -c ./tools/kernel_flash/flash_l4t_nvme_rootfs_enc.xml -S 237GiB --external-only $BOARD external
复制代码

说明:

第一条命令将加密密钥写入文件,供烧录程序调用,我使用的密钥是使用随机字符串程序生成的。

第二条命令先将加密系统写入内部 eMMC 存储。

第三条命令再将加密系统写入外部存储。

因为 Xavier nx 的启动机制,必须同时烧录内外存储为加密存储。在烧录后,会出现无法启动的现象。我推断是因为磁盘分区的改变,内外存储的配置不匹配照成的。这时候再按照相同配置烧录一遍就可以了。

发布于: 刚刚阅读数: 4
用户头像

一五

关注

IT 老兵,一直在学习 2018-11-08 加入

还未添加个人简介

评论

发布
暂无评论
Jetson Xavier nx 全盘加密_边缘计算_一五_InfoQ写作社区