內容目錄

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安裝方式,暫時避坑:

  1. Multipass:雖然Windows Home 能成功安裝 Hyper-V,但Multipass在 Home版本仍然不能使用 Hyper-V模式,只能用 Virtualbox模式,性能不彰。
  2. Hyprer-V、VirtualBox、VMWare:不能釋放所有CPU給Linux系統,IO和網路效果相對WSL2也不佳。
  3. 安裝原生Ubuntu 20.04:ASUS N7601 的 Ubuntu 穩定度有問題,聲卡有問題,會黑屏,無法繼續。據説UEFI關閉ACPI可解決,22.10 好些….但嚐試幾天後我不想繼續耗下去了。或許等未來的 Ubuntu 版本吧.

1.2 WSL2的嵌入式開發環境實踐:

  1. Windows 需要打開虛擬化和WSL功能才能安裝WSL。
  2. 在開發大項目(如AGL)時,WSL需要擴充虛擬硬碟空間(超過250G)和RAM空間(我設定到 24G),才能比較順利的開發。
    AGL要求的開發環境,ubuntu需要停留在 20.04LTS,22.04會有問題。
  3. (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中安裝本地的輸入法。。。

  1. WSLg的圖形工具可以融合,但多國語言的顯示需要設定,中文輸入會需要安裝。
    我目前可以用fcitx服務輸入,用ibus服務目前未成功。
  2. 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。

  1. VSCode: VSCode 支持遠端開發,可以在宿主機和子系統上安裝插件協同完成開發工作。

  2. AGL:一定要在 Linux,建議 Ubuntu 20.04。
    > WSL2 可工作,但編譯時 RAM 需求要注意。開 24GB 似乎可工作了。需要時設定 WSL 的 SWAP。

  3. Zephyr/Arduino:可在 Windows下開發。官方不建議用 WSL,因爲 USB連不上。但目前采用 usbipd 工作良好。

    > 用WSL+ usbipd 來開發,可以直接連,可以連接 DFU。

  4. 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分區。

最後修改日期: 2023 年 3 月 31 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。