1 前言
1.1 WSL2 之前遇到的坑
目前仍然有許多嵌入式開發環境不適用於Arm Host,在考慮更換電腦時,保守的選擇換回 Windows/x86系統。所選的主機自帶的OS是 Windows11 Home,當需要Linux的開發環境時,選擇有WS、VirtualBox(或 VMWare)、HyperV、Multipass、或直接Boot成原生Linux 。在做過各種嘗試,踩過多個坑後,還是先選擇WSL。近日微軟 WSLg 的釋出,以及有 usbip工具可將 USB裝置pass給WSL使用,實驗上發現目前可以為嵌入式系統的Linux Host提供解決方案。
以下是實驗失敗或不好用的Linux安裝方式,暫時避坑:
- Multipass:雖然Windows Home 能成功安裝 Hyper-V,但Multipass在 Home版本仍然不能使用 Hyper-V模式,只能用 Virtualbox模式,性能不彰。
- Hyprer-V、VirtualBox、VMWare:不能釋放所有CPU給Linux系統,IO和網路效果相對WSL2也不佳。
- 安裝原生Ubuntu 20.04:ASUS N7601 的 Ubuntu 穩定度有問題,聲卡有問題,會黑屏,無法繼續。據説UEFI關閉ACPI可解決,22.10 好些….但嚐試幾天後我不想繼續耗下去了。或許等未來的 Ubuntu 版本吧.
1.2 WSL2的嵌入式開發環境實踐:
- Windows 需要打開虛擬化和WSL功能才能安裝WSL。
- 在開發大項目(如AGL)時,WSL需要擴充虛擬硬碟空間(超過250G)和RAM空間(我設定到 24G),才能比較順利的開發。
AGL要求的開發環境,ubuntu需要停留在 20.04LTS,22.04會有問題。 - (Embedded)要安裝 usbip,以將USB share給WSL,這樣WSL就可直接使用 UART、JLink、Stlink控制嵌入式開發板。
share的過程需要用管理員模式的 Powershell,我是把Windows Terminal 的Powershell設定為預設以管理員打開,這樣就能容易的管理 WSL,并能輕鬆的打開多個 Linux Shell。
1.3 WSL2 圖形化介面與應用
WSL 可以直接呼叫宿主機的應用程式協助工作(或需要指定目錄)。
此外,新的WSLg可以讓我們用 Linux的GUI開發工具進行開發。WSLg 其實是透過 RDP 導向 GUI。當WSL中有輸入法需求,則需要在WSL中安裝本地的輸入法。。。
- WSLg的圖形工具可以融合,但多國語言的顯示需要設定,中文輸入會需要安裝。
我目前可以用fcitx服務輸入,用ibus服務目前未成功。 - Linux下的Chrome、gedit、VSCode等工具安裝。
需要的話可以直接使用Linux的GUI工具,不必透過Windows工具。
1.4 WSL2 與各種嵌入式系統開發環境SDK的相容性:
嵌入式開發需要連接開發板, 目前大都是透過USB連接 Serial Port、Debugger、Programmer、Mass Storage Class Device。WSL Kernel 支持使用 usbipd 將 USB 轉接到 WSL 子系統中,部分功能(如 Mass Storage Class)需要重新編譯Kernel。
- VSCode: VSCode 支持遠端開發,可以在宿主機和子系統上安裝插件協同完成開發工作。
-
AGL:一定要在 Linux,建議 Ubuntu 20.04。
> WSL2 可工作,但編譯時 RAM 需求要注意。開 24GB 似乎可工作了。需要時設定 WSL 的 SWAP。 -
Zephyr/Arduino:可在 Windows下開發。官方不建議用 WSL,因爲 USB連不上。但目前采用 usbipd 工作良好。
> 用WSL+ usbipd 來開發,可以直接連,可以連接 DFU。
-
microPython:可在Windows下開發。WSL 下:
> 用WSL2+ usbipd 來開發,可以連接 DFU。
> 連接 pyboard 需要讓 WSL2 支持 USB MSC,才能用檔案系統快速的更新板上資料。MSC功能需要重新編譯 WSL 核心。
1.5 WSL2 與 Windows 宿主的檔案系統
-
宿主的檔案系統 mount 在
/mnt/下。如/mnt/c是 Windows的 C 磁碟,不過存取性能較差。 -
WSL2 檔案系統在 Windows下會被看成 網路磁碟機,如
\\wsl.loalhost\Ubuntu-20.04是 Ubuntu-20.04 子系統的檔案系統根目錄。需要的話可以連接成網路磁碟機讓Windows存取内容。
1.6 WSL2 性能損耗與對策
參考 https://www.zhihu.com/question/447007394 數據 :
在十万个文件规模的 git repo 下执行
git status,能卡几分钟(使用主機文件系統),virtiofs 和 WSL 1 都只要 3 秒左右;作为参考,guest 原生文件系统约 0.3 秒
WSL2 的CPU性能損耗與主流的虛擬化技術相似,約爲 2%,很不錯了。但IO性能差距會較大,實測對主機的文件系統存取會非常慢(類似網路磁碟機),在對 virtio 虛擬磁碟機存取速度較好,性能約爲原生文件系統的 1/10。
所以在大型開發項目上,不要把項目文件直接放到主機文件系統中。對IO性能要求高時,可以考慮給虛擬機實體的SSD分區。
留言