介绍
本文将指导您逐步为您的 NVIDIA Jetson nano 板创建一个最适合您的项目的简约的基于 Ubuntu 的映像。
为什么要从头开始构建映像而不是使用官方映像?
首先,为了好玩。从头开始构建东西总是很有趣,因为你总是在这个过程中学到一些东西。其次,官方镜像很大(超过 5GB 😱),里面装满了很多不必要的预装包(ubuntu-desktop、浏览器……),占用了大量的磁盘空间和内存。因此,让我们创建一个干净简约的图像。
下载脚本
在开始之前,让我们首先克隆我放置所有需要的脚本的存储库。
$ git clone https://github.com/pythops/jetson-nano-image
$ cd jetson-nano-image
创建一个 rootfs
我们将使用该脚本create-rootfs.sh创建一个基本的 rootfs。首先,我们定义要构建它的位置。这是通过定义环境变量来完成的$JETSON_ROOTFS_DIR
。如果不退出,路径将被创建。
$ export JETSON_ROOTFS_DIR=/path/to/rootfs
然后我们通过运行以下命令来构建 rootfs
$ sudo -E ./create-rootfs.sh
ROOTFS_DIR: ~/jetson-rootfs
Installing the dependencies... [OK]
Creating rootfs directory... [OK]
Downloading the base image... [OK]
Run debootstrap first stage... [OK]
Run debootstrap second stage... [OK]
Success!
sudo 的 -E 选项保留环境变量
定制
现在我们有了一个基本的 rootfs,我们将使用我最喜欢的工具之一对其进行自定义:Ansible. 对于这一步,您需要在工作站中安装 Ansible。如果不是这种情况,只需运行此命令即可
$ pip install --user ansible
这个 Ansible 角色将做 3 件事: * 安装一些基本工具(ssh、systemd、sudo …) * 设置基本配置(语言环境、网络 …) * 添加新用户:pythops
您可以按如下方式运行剧本
$ cd ansible
$ sudo -E $(which ansible-playbook) jetson.yaml
随意调整此角色以满足您的需求。
创建图像
现在我们自定义了 rootfs,我们将使用脚本create-image.sh来创建我们的最终图像。在我们构建映像之前,您需要定义板的类型。目前支持的开发板有Jetson Nano和Jetson Nano 2GB。
要定义板的类型,您需要设置一个名为$JETSON_NANO_BOARD
如下的环境变量:
对于 Jetson nano 板
export JETSON_NANO_BOARD=jetson-nano
对于 Jetson Nano 板 2GB
export JETSON_NANO_BOARD=jetson-nano-2gb
对于 Jetson nano board 4GB only,您可以指定要使用的板型号B01 或A02型号。如果你现在买一块新板,你很可能会得到这个B01模型。
要指定您的模型,您需要定义一个新的环境变量$JETSON_NANO_REVISION,如下所示:
对于B01模型(默认):
$ export JETSON_NANO_REVISION=300
对于A02型号:
$ export JETSON_NANO_REVISION=200
我们还需要使用环境变量定义一个构建目录$JETSON_BUILD_DIR。如果此路径不存在,则将创建该路径。
$ export JETSON_BUILD_DIR=/path/to/build_dir
然后我们构建镜像如下
$ sudo -E ./create-image.sh
如果一切顺利,您将在最后收到此消息
Image created successfully
Image location: /path/to/jetson.img
闪存在 SD 卡上
最后,我们将使用脚本将图像闪存到 SD 卡上flash-image.sh。
插入您的 SD 卡并运行此命令
$ sudo ./flash-image.sh /path/to/jetson.img /dev/sdb
.
.
.
Success !
Your sdcard is ready !
sdcard 路径 /dev/mmcblk0 在您的系统中可能不同。
该脚本将自动调整根分区的大小以占用 sdcard 中的所有可用空间。
恭喜 🎉 现在您可以使用新镜像启动您的开发板了!