1. 編譯cboot
1.1 下載cboot程式碼
Jetson AGX Xavier Series、Xavier NX and TX2 Series所使用的bootloader和其他Nvidia所開發的嵌入式系統不太一樣。這三個系列使用的是cboot,其他則是u-boot 。cboot的程式碼可以至Nvidia官方網站下載。
選擇32.6.1 |
根據所使用系統選擇適合的cboot版本。Xavier AGX和Xavier NX是T194,TX2則是T186。 |
下載後,依照以下步驟解壓縮。以下本文皆以Xavier NX的cboot為例:
$ mkdir cboot$ tar -xjf cboot_src_t194.tbz2 -C cboot
1.2 下載編譯需要的Toolchain
編譯cboot需要cross compile。因此我們需要下載相對應的Toolchain。同樣去1.1內的Nvidia的網站上面即可下載到Toolchain。下載後,使用以下的命令解壓縮:
$ tar -xvpJf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
1.3 編譯
先至1.1解壓縮的目錄:其中<your_64-bit_ARM_toolchain>是你的toolchain解壓縮後的位置。以1.2為例的話 應該設定為:
接下來就可以開始編譯了。
編譯完成後。如果沒有問題,那就會在cboot/out/build-t194底下看到檔案lk.bin。 將lk.bin改名為cboot_t194.bin,並複製到Linux_for_Tegra/bootloader底下取代舊有的cboot_t194.bin。再重燒Xavier NX即可。
2. 控制GPIO
2.1 相關函數
主要參考cboot/bootloader/partner/common/include/drivers底下的tegrabl_gpio.h。
tegrabl_gpio_driver_get | 取得與gpio pin相對應的struct gpio_driver。 |
gpio_config | 設定gpio pin 輸入或是輸出模式。 |
gpio_read | 當gpio pin設定為輸入時,使用此函數讀取gpio pin的狀態。 |
gpio_write | 當gpio pin設定為輸出時,使用此函數改變gpio pin的狀態。 |
2.1 Example
以下以設定GPIO01為GPIO Input為範例:
那GPIO01的pin number是怎樣得知的呢?這個就要去Nvidia官方網站下載Xavier NX的pinmux表得知。
透過查詢Pinmux表。我們可以知道GPIO01是GPIO3_PQ.05 那GPIO01所在的BANK ID為Q,pin index為5。因此為TEGRA_GPIO(Q,5)。
另外,根據不同的BANK ID我們需要在tegrabl_gpio_driver_get中輸入相對應的chip id。可以參考cboot/bootloader/partner/t19x/common/include/soc/t194/tegrabl_gpio_hw.h。例如BANK ID 為AA的GPIO,那他的chip id 就是 TEGRA_GPIO_AON_CHIPID。
留言列表