本文主要是介绍在USB外置硬盘上安装Jetson Nano根文件系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景知识
NVIDIA Jetson Nano开发者套件自今年三月份发布以来正变得越来越火,它的AI和机器学习特性吸引了一众开发者,在业界掀起了一股不小的热潮。笔者把它当作一个便携式桌面电脑来使用,取代之前的树莓派3B。
略微有些遗憾的是,Jetson Nano出厂不带任何的存储媒介。板上也无SATA接口,官方提供的软件映像也是基于Micro-SD卡的。从可靠性,容量以及速度方面考量,大容量硬盘仍旧是我的首选。由于Jetson Nano带4个USB 3.0端口,这就为我们添置外接硬盘提供了可能。

网上已经有了很多介绍将rootfs安装到外置硬盘的文章,都是源自这里原始教程。这个方法的缺点是需要准备一张32GB或者以上容量的Micro-SD卡。将rootfs复制到外置硬盘之前,首先需要在Micro-SD卡的根文件系统上编译生成一个新的内核映像。这个新的内核映像带USB3.0支持(关于USB 3.0的讨论见此处)。
仅仅为了重新编译内核而占用一张32GB的Micro-SD卡?听起来似乎有点太小题大作。今天我们要讨论的是,如何直接将rootfs分区复制到外置硬盘上,跳过这个额外的从Micro-SD复制到外置硬盘的过程。
分割Image
首先让我们来看一看官方L4T r32.1发布的SD Image构造:
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Generic- Multi-Card (scsi)
Disk /dev/sdb: 15.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags2 1049kB 1180kB 131kB TBC3 2097kB 2556kB 459kB RP14 3146kB 3736kB 590kB EBT5 4194kB 4260kB 65.5kB WB06 5243kB 5439kB 197kB BPF7 6291kB 6881kB 590kB TOS8 7340kB 7406kB 65.5kB EKS9 8389kB 9044kB 655kB LNX
10 9437kB 9896kB 459kB DTB
11 10.5MB 10.6MB 131kB RP4
12 11.5MB 11.6MB 81.9kB BMP1 12.6MB 15.9GB 15.9GB ext4 APP(parted)
上表前面2至12,这11个分区是bootloader使用的。后面的1分区是rootfs,文件系统类型为ext4。我们的想法是把前面2-12分区留在Micro-SD卡上,而将ext4分区复制到外置硬盘。Jetson Nano上电启动时,先从Micro-SD卡上启动bootloader,然后再从外置硬盘安装根文件分区。启动完成以后,Micro-SD卡不再需要,可以从内核卸载它。
设想的Micro-SD卡image:
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags2 1049kB 1180kB 131kB TBC3 2097kB 2556kB 459kB RP14 3146kB 3736kB 590kB EBT5 4194kB 4260kB 65.5kB WB06 5243kB 5439kB 197kB BPF7 6291kB 6881kB 590kB TOS8 7340kB 7406kB 65.5kB EKS9 8389kB 9044kB 655kB LNX
10 9437kB 9896kB 459kB DTB
11 10.5MB 10.6MB 131kB RP4
12 11.5MB 11.6MB 81.9kB BMP1 12.6MB 100MB 87.4MB ext4 APP(parted)
可以看到Micro-SD卡上的image大小只有120MB左右,可以安装到128MB的卡上。
注意:此时的Micro-SD卡上的image仍旧有一个ext4分区,只是它已经大大缩水,只有87MB。保留这个分区是因为bootloader在加载linux内核时,需要从这个分区读取两个文件:/boot/Image和/boot/extlinux/extlinux.conf。前者是linux内核映像(带USB3.0支持),后者是配置文件,告诉内核从何处加载rootfs。有关如何产生这两个文件,请参照此链接
设想的rootfs image:
Model: Linux File-Stor Gadget (scsi)
Disk /dev/sdb: 25.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags1 12.6MB 12.9GB 12.9GB ext4 APP(parted)
安装
准备事项
- 一块NVIDIA Jetson Nano开发板
- 一块HDMI/DP显示屏
- 一个USB外置硬盘(容量>=16GB)
- 一张Micro-SD卡(容量>=128MB)
- USB键盘和鼠标
- 分割好的L4T r32.1 rootfs image part1 提取码:52s7 image part2 提取码:e5sf 和 bootloader image 提取码:fd3g
- 一台主机(Windows或者Linux或者Mac)
安装步骤
1. 将Micro-SD卡插入读卡器,并连到主机
2. 启动etcher,烧写bootloader image
3. 烧写完成以后,断开读卡器并取出Micro-SD卡
4. 插入外置USB硬盘
5. 再次启动etcher,烧写rootfs
压缩过的rootfs image有5GB之大,由于百度网盘对单个文件大小的限制,rootfs image文件被分成两个部分。下载下来以后请使用winrar软件将其合为一个文件,再将文件后缀修改为.zip。
6. 烧写完成以后断开USB外置硬盘
7. 将Micro-SD卡插入Jetson Nano
8. 将USB外置硬盘插入Jetson Nano
9. 将Jetson Nano连至HDMI/DP显示屏
10. 连接USB键盘和鼠标
11. Jetson Nano上电
12. 按照显示屏的提示,完成Ubuntu第一次启动配置
扩展根文件分区
L4T第一次启动,根文件分区缺省只有12GB。为了充分利用硬盘空间,我们需要扩展根文件分区。
1. 查看磁盘信息
本例中,根文件分区位于/dev/sda1
2. 采用sgdisk命令,查看根文件分区信息
记录下根文件分区的起始扇区,后面步骤要用到。
3. 同样sgdisk命令,通过“删除+重新创建”操作来扩展根文件分区
我们可以看到扩展以后,根文件分区占据了整个硬盘空间
注意!重新创建的根文件分区必须和之前的起始扇区相同,否则会丢失根文件分区的所有内容!
4. 通知内核,根文件分区已改动
5. 通知内核,文件系统已改动
完工!
这篇关于在USB外置硬盘上安装Jetson Nano根文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!