Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

Nvidia Jetson TX2 boot menu

官方文件R32.3指出,開機的順序是由U-Boot決定,順序從SD card-> eMMc -> USB device -> NFS device

U-Boot會按照此順序去裝置內的 /boot/extlinux 尋找 extlinux.conf,並按照裡面的設定決定要從哪裡開機並啟動kernel,說明文件內容如下:

https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fuboot_guide.html%23wwpID0E0DF0HA

直接查看 extlinux.conf 的樣貌:一個純文字檔,開機選單就在這裡修改。

但這是到最後才需要做的。

整理一下步驟:

  1. 準備一張SD card並檢查partition是否符合規定
  2. copy TX2 rootfs
  3. 修改extlinux.conf
  4. 接上debug console查看log並操作選單

首先SD card的分割狀態,Ext4格式且有個分割區叫做 mmcblk2p1 ,不然怎麼設定都會無法成功。

接下來確定/dev/mmcblk2p1掛載好之後,將 eMMc 內的資料全部copy到SD card裡面。

sudo cp -ax / '/media/user/yourSDcard' && sync

copy完後,再到SD card內的 /boot/extlinux/extlinux.conf 進行修改

修改方法:

  1. 一個LABEL就是一個開機選項,後面接名稱(自行設定)。
  2. DEFAULT 後面接LABEL,就是當你在TIMEOUT設定時間內未選擇的預設開機碟。
  3. LINUX 後面是Kernel image的路徑,這代表你可以把客製的kernel放在這裡,bootloader跑完後將會執行,就不需要再另外flash kernel。
  4. APPEND (add kernel options) 後面要增加 root=/dev/mmcblk2p1 rw rootwait
  5. rootwait: 等待mmcblk2p1就緒後才掛載rootfs
  6. rw: 給予讀寫權限,quiet: 不會顯示太多詳細的log(查到的 未驗證)
  7. ${cbootargs} 載入cboot環境變數

例如我設定了三個開機區域,extlinux.conf 的內容就會變成這樣:

注意一下LABEL SDcard的部份多了一個FDT選項,也就是指定 DTB 檔的路徑,所以之後要替換DTB檔,就直接複製到自己設定的路徑即可。 (LINUX LABEL是kernel image 路徑)

https://ttyusb0978.medium.com/media/a68151c7335d0ab1543ae7ca31b82ae5

為了觀察U-boot的console 必需接上 TTL to usb cable,接法如下圖

TX2 J21 Pin 10 (UART 1 RXD) → green cable (TXD)

TX2 J21 Pin 8 (UART 1 TXD) → write cable (RXD)

TX2 J21 Pin 9 (GND) → black cable (GND)

Baud rate為 115200 ,我使用putty來觀察:

開機後在console可以看到有開機選單出現並等待你選擇:

大致上就是這樣,之後要做什麼變化再自己修改。喔還有一招是使用flash.sh來強制修改開機碟,怎麼做目前還不知道有機會在研究一下。