NVIDIA Jetson Nano 開發套件的開機和運行
YouTube 連結:
文章來源:
https://jetsonhacks.com/2021/03/10/jetson-nano-boot-from-usb/#google_vignette
從 USB 隨身碟開機的優勢
- 長期可靠性:比 micro SD 卡更可靠,因為 SD 卡不是為處理作業系統檔案而設計。
- 速度優勢:USB 的速度通常比 SD 卡快 4 到 10 倍。
USB 隨身碟的類型 固態硬碟 (SSD):速度快,是 HDD 的良好替代品。 硬碟 (HDD):長期可靠性高,提供較多儲存空間,但速度較慢,耗電量大。 隨身碟(又稱拇指碟或 USB 隨身碟)
從 USB 開機有幾個原因。首先,從長遠來看,它比使用 micro SD 卡更可靠。SD 卡實際上並非設計用於處理作業系統檔案,而且一般來說比 USB 隨身碟的可靠性較低。
第二個原因是 USB 比 SD 卡的速度快得多,視應用而定,通常快 4 到 10 倍。這使事情變得更快!
USB 隨身碟有各種不同的類型。您會看到它們被稱為固態硬碟 (SSD)、硬碟 (HDD) 和隨身碟,有時也被稱為拇指碟或 USB 隨身碟。
對於此應用,HDD 是最長期的可靠選擇,SSD 是一個極佳的替代方案,而且速度更快。HDD 的速度通常比 SSD 慢,而且耗電量較大,但以相同的價格提供更多的儲存空間。有些 HDD 可以在外部供電。由於與 SD 卡大致相同的原因,隨身碟不太適合此應用,但仍有人在使用。
人們也喜歡許多 USB 隨身碟提供的額外儲存空間。這使您可以輕鬆儲存大量程式和大量資料,例如視訊檔案和大型資料模型。
以下是一些我們成功使用過的隨身碟:三星 T7 500 GB USB SSD
,三星 T5 500 GB USB SSD
及Seagate 2TB 外接硬碟
。
磁碟格式化和分割
關於 Linux 中的磁碟術語
- 磁碟分割:對扇區進行映射和分組。
- GPT:用於配置磁碟分割表。
- Ext4:Linux 檔案系統格式。
格式化磁碟的步驟
- 定義磁碟分割配置。
- 為特定用途格式化磁碟分割。
以下是我們在 Linux 上討論磁碟時會看到的幾個術語。磁碟分割、GPT 和 Ext4。有時這些術語混在一起,讓人難以理解。
實體裝置由一組扇區組成。這是儲存資料的物理位。軟體會建立稱為磁碟分割的東西,用來對扇區進行映射和分組。這樣一來,裝置的每個區域都可以獨立管理。
磁碟分割描述儲存在磁碟分割表中。實體磁碟可以有一個或多個磁碟分割。
由於磁碟分割被視為獨立的邏輯磁碟,因此具有多個磁碟分割的磁碟看起來好像有多個實體磁碟。
磁碟分割很方便用於儲存檔案系統、交換磁碟等。
您以前聽說過「格式化磁碟」這個詞。當我們談論針對 Linux 格式化磁碟時,這是一個包含兩個步驟的過程。首先,我們格式化磁碟以定義磁碟分割配置,然後我們格式化磁碟分割以供特定用途。
Linux 在實體儲存裝置上使用 GPT 來配置磁碟分割表,該表使用全球唯一識別碼或 GUID。它是 Linux 用於大於 2TB 磁碟的首選磁碟分割系統。這會在已知位置產生一個表格,該表格會告訴系統磁碟分割在磁碟上的實際位置。換句話說,就是一個地圖!
在對磁碟分割進行磁碟分割後,我們就可以準備為 Linux 檔案系統格式化磁碟分割。不同的磁碟分割可以有不同的格式類型。
例如,這正是您在 PC 上設定 Windows 和 Linux 雙重開機的方式。為 Windows 檔案系統設定一個磁碟分割,為 Linux 檔案系統設定另一個磁碟分割。
對於我們的 Jetson,我們要將磁碟分割格式化為 Ext4。Ext4 是針對 Linux 的日誌檔案系統格式。我們會將 Jetson 的根檔案系統放在這個磁碟分割上。根檔案系統只是根目錄檔案系統,我們通常認為這是系統上的所有檔案。
QSPI-NOR?
在以前的 JetPack 版本中,系統從儲存在 SD 卡上特定磁碟分割的資訊開機。對於 JetPack 4.5+,這是會改變的。
在 Jetson 模組上,有快閃記憶體。您通常會看到它被稱為 QSPI-NOR。NOR 是一種快閃記憶體。QSPI 代表四串列協定介面,它是將資料從 Jetson Tegra 晶片傳輸到 NOR 快閃記憶體以及反向傳輸的高速公路。
當 JetPack 執行其設定程序時,它會將資訊從 SD 卡傳輸到 QSPI-NOR 以開機系統。因此,Jetson 可以使用此資訊來開機系統,而不需要有 SD 卡。
還有一些事情需要知道。如果沒有 SD 卡,則 Jetson 將在 USB 隨身碟中尋找根檔案系統。如果正確設定,Jetson 可以從其他裝置開機,例如 NVMe 磁碟。在我們的案例中,我們只關心 USB 隨身碟。
在 /boot 目錄中有一個特殊檔案,它會告訴 Linux 根檔案系統的位置。我們需要修改這個名為 extlinux.conf 的檔案,以指向根的新位置。
您可以按照 NVIDIA 的說明進行操作,以防您想在主機電腦上建立可開機的 USB 隨身碟。在這裡,我們將從 Jetson 本身建立隨身碟。
安裝
您需要使用 JetPack 4.5+ 對 Jetson 進行初始設定,以便將更新的韌體載入 Jetson 模組 QSPI-NOR 快閃記憶體。請依照 JetPack 網站上的「入門」指示說明操作:https://developer.nvidia.com/embedded/jetpack
JetPack 檔案位於此處:https://developer.nvidia.com/embedded/jetpack-archive
在 L4T 32.5+ 的初始設定期間,Jetson Nano 開發套件的韌體會將開機韌體從微型 SD 卡重新佈署到 Jetson 模組整合的 QSPI-NOR 快閃記憶體。這也會改變 SD 卡的配置。這個配置現在類似於 PC 中的 BIOS。
在 Github 上有一個 JetsonHacksNano 帳號的存放庫,名為 bootFromUSB,其中包含一些方便的腳本來協助執行此任務。
複製存放庫,並切換至該存放庫的目錄。
$ git clone https://github.com/jetsonhacksnano/bootFromUSB
$ cd bootFromUSB
步驟 1
準備一個 USB 隨身碟(最好是 USB 3.0+、SSD、HDD)格式化磁碟,並使用 GPT 磁碟分割方案。這會清除隨身碟上的資料,請注意。然後建立一個磁碟分割,並將格式類型設為 Ext4。在影片中,我們使用「磁碟」應用程式。請觀看影片以瞭解詳細操作。在此程序期間,如果您只插入一個 USB 隨身碟,會更簡單。完成後,磁碟應顯示為 /dev/sda1 或類似的名稱。注意:請確保磁碟分割為 Ext4,因為 NTSF 看起來可以正確複製,但稍後會造成問題。通常,最簡單的做法是在此程序期間設定磁碟卷標供稍後使用。
步驟 2
將微型 SD 卡的應用程式區複製到 USB 隨身碟。腳本 copyRootToUSB.sh 會將整個系統微型 SD 卡的內容複製到 USB 隨身碟。當然,USB 隨身碟的儲存空間應該大於微型 SD 卡。注意:請確保在執行腳本之前已掛載 USB 隨身碟。若要使用 copyRootToUSB:
用法:./copyRootToUSB.sh [OPTIONS]
-d | --directory Kernel 母目錄路徑
-v | --volume_label 要查詢的磁碟卷標
-p | --path USB 隨身碟的裝置路徑(例如 /dev/sda1)
-h | --help 使用說明
在影片中,我們:
$ ./copyRootToUSB.sh -p /dev/sda1
步驟 3
修改 USB 隨身碟上的檔案 /boot/extlinux/extlinux.conf。應該新增一個項目來指向新的根檔案系統(通常是 /dev/sda1)。在存放庫中有一個範例設定檔:sample-extlinux.conf。
修改位於 USB 隨身碟上的檔案 /boot/extlinux/extlinux.conf。這是處於受系統保護的區域,因此您需要有權限才能變更檔案,例如「sudo gedit」。複製「PRIMARY」項目並將其重新命名為 sdcard。
在 PRIMARY 項目中,變更根的位置以指向 USB 隨身碟,例如變更「root=/dev/mmcblk0p1」,這是 SD 卡的位址。在此存放庫中提供一個範例設定檔:sample-extlinux.conf。
在 extlinux.conf 中使用 root=/dev/sda1 雖然可行,但最好使用磁碟的 PARTUUID 來識別磁碟位置。由於無法保證 USB 裝置每次都以相同的順序列舉,因此 /dev/sda1 指向不同裝置是有可能的。例如,如果除了 USB 開機隨身碟之外,還將額外的隨身碟插入 Jetson,可能會發生這種情況。
GPT 磁碟分割表中磁碟的 UUID 稱為 PARTUUID。這是一個低階描述。請注意,Linux 檔案系統會提供另一個稱為 UUID 的識別碼。對於此應用,請使用 PARTUUID,因為報導指出 UUID 目前於此用例中會造成問題。
有一個方便使用的檔案:partUUID.sh,它會判斷給定裝置的 PARTUUID。這可協助判斷 USB 隨身碟的 PARTUUID。注意:如果返回的 PARTUUID 長度與範例 extlinux.conf 範例(32a76e0a-9aa7-4744-9954-dfe6f353c6a7)不同,則很有可能是裝置未正確格式化。
$ ./partUUID.sh
雖然預設為 sda1 (/dev/sda1),但您也可以判斷其他磁碟的 PARTUUID。假設有 /dev/,使用 -d 標誌。例如:
$ ./partUUID.sh -d sdb1
在儲存 extlinux.conf 檔案後,您就可以測試一下了。關閉 Jetson,並移除 SD 卡。開機 Jetson,然後 Jetson 將從 USB 隨身碟開機。它會暫停一下來尋找要從哪個磁碟開機。嘗試開機時,請確保已插入 USB 隨身碟,因為它無法熱插拔。
如果您遇到問題,您可以隨時重新從 SD 卡開機。
然後您就設定好一切了!盡情享受吧。
注意事項
一旦您使用 JetPack 4.5+ 對 Jetson 進行快閃,QSPI-NOR 就會改變,可能無法正確開機使用 JetPack 4.4 及更低版本建立的磁碟。若要還原 QSPI-NOR,您必須在主機電腦上從早於 JetPack 4.5 的版本執行 SDK 管理員。SDK 管理員會更新較早版本所需的 QSPI-NOR,並應該能夠與較早版本的卡配合使用。
JetPack 4.5 有個問題,您需要一些方法來解決。這已在 JetPack 4.5.1 中修復。如果您有 JetPack 4.5.1 的話,解決方法會包含在 bootFromUSB 存放庫的版本中,但建議您可以使用 JetPack 4.5.1。