蚀心酸菜鱼

This is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.

0%

Jetson Nano从USB移动硬盘启动

需求

Jetson Nano默认从Micro SD卡启动,但是无论是顺序读写还是随机访问其性能都不如大多数的SSD。手头也有一块三星T5 1TB 闲置,于是决定重装系统的同时研究如何才能使用USB移动硬盘作为根目录。

踩过的坑

  1. 找对版本
    Jetson Linux支持Nano的最新版本是32.7.3,官网上更新的35.1基于Ubuntu 20.04 + 内核版本5.10但是并不支持Nano。事关bootloader所以还是需要严格按照支持版本来的,安装后可以自行升级内核。

  2. 不建议在Jetson Nano上进行操作
    老老实实的按照文档在Ubuntu上刷最不容易出问题,我一开始头铁结果不小心清了QSPI之后变砖了只能跳线进Recovery Mode。

  3. root file system
    参考后文,我首次刷完后可以正常启动但重启后无法正常引导。刷了几次系统之后实在懒得折腾了,影响范围也仅限启动,因此就不进一步研究了。

步骤

  1. 救砖
    电脑安装qemu-user-static

    1
    sudo apt-get install qemu-user-static

    下载驱动和文件系统:Driver Package & Sample Root Filesystem,解压缩:

    1
    2
    3
    4
    5
    $ tar xf ${L4T_RELEASE_PACKAGE}
    $ cd Linux_for_Tegra/rootfs/
    $ sudo tar xpf ../../${SAMPLE_FS_PACKAGE}
    $ cd ..
    $ sudo ./apply_binaries.sh

    准备好Micro USB线连上电脑,MicroSD卡插入,跳线接FRC pins确保进恢复模式,跳线接J48用DC电源,最后插上DC电源开机
    如果不确定的话可以用lsusb确认Jetson硬件的型号,确认好后即可开刷:

    1
    sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1

    刷完后QSPI-NOR也会一并恢复,再插上电就能看到Nvidia的图标了,并且可以从SD卡启动。

  2. USB启动
    详见Flashing to a USB Drive,前9步即可。

  3. micro SD卡迁移
    上述文档中:

    To set up a flash drive manually for using as root file system
    可能并不适用于Jetson Nano,按这步刷完后依然需要SD卡才能启动,且启动时遇到过各种问题。个人建议是跳过这步,依旧把/boot放置于micro SD卡中。此时可采用较小容量的micro SD卡。以下假设micro SD为/dev/<sdx>,经实验2GB的micro SD卡可行。
    确保micro SD卡的文件已经备份后,创建GPT分区:

    1
    $ sudo parted /dev/<sdx> mklabel gpt

    类似文档,创建APP分区。此时为方便对齐可采用百分比:

    1
    sudo parted -a optimal /dev/<sdx> mkpart APP 0% 100%

    格式化为ext4文件系统并挂载:

    1
    2
    sudo mkfs.ext4 /dev/<sdx>1
    sudo mount /dev/<sdx>1 /mnt

    最后用rsync复制原micro SD卡到新的小容量micro SD卡即可,记得替换挂载点:

    1
    sudo rsync -a /mnt/bigSDCard/boot/ /mnt/smallSDCard/boot/

    重启就完成了!效果如图:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    loop0 7:0 0 16M 1 loop
    loop1 7:1 0 43M 1 loop /snap/snapd/17885
    loop2 7:2 0 59.1M 1 loop /snap/core20/1782
    loop3 7:3 0 30M 1 loop /snap/node/6871
    sda 8:0 0 931.5G 0 disk
    └─sda1 8:1 0 931.5G 0 part /
    sdb 8:16 0 465.8G 0 disk
    └─sdb1 8:17 0 465.8G 0 part /mnt/hdd
    mtdblock0 31:0 0 4M 0 disk
    mmcblk0 179:0 0 1.9G 0 disk
    └─mmcblk0p1 179:1 0 1.9G 0 part
    zram0 252:0 0 495.5M 0 disk [SWAP]
    zram1 252:1 0 495.5M 0 disk [SWAP]
    zram2 252:2 0 495.5M 0 disk [SWAP]
    zram3 252:3 0 495.5M 0 disk [SWAP]

    mmcblk0即小容量micro SD卡。

参考链接

NVIDIA Jetson Linux 32.7.3 文档