了解如何使用shell實用程序“direnv”在West工作區(qū)中工作時自動激活Zephyr構(gòu)建環(huán)境
我最近為Nordic Thingy:91 X設(shè)置了一個nRF Connect SDK (NCS)命令行開發(fā)環(huán)境,其中包括下載和安裝工具鏈和SDK代碼。
當我設(shè)置好一切后,我發(fā)現(xiàn)了如何使用shell實用工具來通過CLI在West工作區(qū)中工作時自動激活Zephyr構(gòu)建環(huán)境。一旦配置了direnv,當將目錄更改為工作空間時,將在shell中自動激活構(gòu)建環(huán)境。類似地,當離開工作區(qū)目錄時,構(gòu)建環(huán)境將自動停用。
如果您像我一樣,并且您的大腦是篩子,那么這將使您不必記住并手動鍵入命令來激活python虛擬環(huán)境,并獲取所需的腳本,以確保正確設(shè)置Zephyr環(huán)境變量。
在這個項目中,我將描述如何為Nordic的nRF Connect SDK (NCS)以及“vanilla”上游Zephyr RTOS West工作區(qū)設(shè)置這個shell自動化。
在我們深入項目之前,請注意:不幸的是,direnv只能在類unix操作系統(tǒng)(macOS, Linux等)上工作,并且需要支持shell (bash, zsh, tcsh, fish, elvish, powershell, murex, nushell)。對不起,Windows的朋友們!
nRF Connect SDK (NCS)示例
在最新版本的nRF Connect SDK中,Nordic建議使用他們的nRF Util CLI工具來管理Nordic提供的工具鏈包的安裝。
nRF Util (nrfutil)被描述為“北歐產(chǎn)品的統(tǒng)一命令行實用工具”,通過一組可安裝和可升級的子命令提供了廣泛的功能。具體來說,toolchain-manager命令可用于搜索、安裝和卸載工具鏈。
除了管理工具鏈之外,toolchain-manager命令還提供env和launch子命令來激活shell中的特定工具鏈環(huán)境。
例如,您可以使用nrfutil toolchain-manager env命令來顯示配置工具鏈環(huán)境所需的環(huán)境變量:
在安裝nRF Connect SDK文檔中,Nordic建議使用以下命令在子shell中激活工具鏈:
不幸的是,當啟動這個子shell時,任何shell配置文件(例如。bashrc)都會被跳過:
生成的shell由shell環(huán)境變量決定。嘗試在不運行任何配置文件(例如。bashrc)的情況下生成shell,因為這些文件可能(潛在地)弄亂環(huán)境。
結(jié)果,如下圖所示,在啟動新的子shell時,我的自定義shell提示符和其他shell配置被忽略:
作為替代方案,nrfutil toolchain-manager env——As -script命令可以輸出一個腳本,該腳本設(shè)置與launch——shell子命令相同的環(huán)境:
通過在該命令的輸出上運行eval,我們可以有效地激活當前shell中的工具鏈構(gòu)建環(huán)境(無需啟動新的子shell):
不幸的是,我永遠也記不住這個命令……
用direnv自動化它
如果工具鏈在我們進入West工作區(qū)時自動激活,在我們離開工作區(qū)時自動停用,那就太好了。
對我們來說幸運的是,direnv是一個通用的shell實用程序,旨在支持這種類型的行為。
在每個提示符之前,direnv檢查當前目錄和父目錄中是否存在.envrc文件(也可以選擇存在.env文件)。如果該文件存在(并且經(jīng)過授權(quán)),則將其加載到bash子shell中,然后由direnv捕獲所有導出的變量,然后使其可用于當前shell。
首先,我們需要安裝direnv shell實用程序。
接下來,在West工作區(qū)的根目錄下,我們需要添加一個.envrc文件,包含以下行:
現(xiàn)在,當我們進入工作區(qū)目錄時,direnv將自動運行上面的命令,并將生成的構(gòu)建環(huán)境變量導出到當前shell中。您應該看到如下消息:
我們可以檢查以驗證環(huán)境變量是否設(shè)置正確。例如:
萬歲,成功了!
出于安全考慮,除非明確允許,否則direnv不會自動從.envrc腳本加載更改。因此,您可能會在第一次進入工作區(qū)時看到如下錯誤:
你只需要運行一次direnv allow來允許它運行。
上游Zephyr示例
我們還可以使用direnv來自動激活“vanilla”Zephyr RTOS工作區(qū)的構(gòu)建環(huán)境。
如果你通過命令行使用West工作區(qū),你可能習慣輸入這樣的東西來激活構(gòu)建環(huán)境:
和上面的NCS示例一樣,我們可以在West工作空間的根目錄下添加一個.envrc文件,如下所示:
現(xiàn)在,只要您進入Zephyr -workspace/目錄,python虛擬環(huán)境和Zephyr環(huán)境腳本就會自動激活!
本文編譯自hackster.io