在 Windows 中使用 WSL 編譯 Linux 和 U-Boot

toradexsh發表於2020-09-30

By Toradex 胡珊逢

1). 簡介

通常當編譯 Linux、U-Boot 相關原始碼時,由於編譯工具或者檔案系統限制,這些任務需要在 Linux 發行版中完成,如常見的 Ubuntu、Fedora、Linux Mint、Arch Linux 等。在電腦安裝雙系統,或者虛擬機器,是使用 Linux 發行版的主要方式。Windows 推出的 WSL (Windows Subsystem for Linux)則提供了另外一種方式來使用 Linux 系統。本文接下來將介紹如何在 Windows 10 電腦上使用 WSL 來編譯使用NXP iMX8 ARM平臺的 Linux、U-Boot 和 Device tree overlays。

 

本文所演示的ARM平臺來自於Toradex 基於NXP iMX8QM ARM處理器的Apalis iMX8QM ARM嵌入式平臺。

 

 

2). 編譯流程

WSL 有兩個版本,這裡我們將使用 WSL 2。在開始安裝 WSL之前,推薦先安裝 Windows Terminal。這是微軟新推出的終端工具,可以很好的相容 WSL。並且還直接整合了一些 Linux 的命令工具,如  ssh、scp。

WSL 具體的安裝方法請參考微軟官方的適用於 Linux 的 Windows 子系統安裝指南 (Windows 10)。安裝完畢後我們將使用 Ubuntu-20.04 為例進行編譯演示。

開啟 Windows Terminal 點選標籤頁旁邊的 + ,可以看到剛才安裝的 Ubuntu-20.04 WSL 已經自動出現在其中。點選後即可啟動 Ubuntu 。目前的 WSL 還不支援圖形,所以接下來的操作會在 Windows Terminal 以命令列的形式完成。

                                              image001.png

進入Ubuntu-20.04 WSL後,命令操作的形式和通常的 Ubuntu 沒有區別。首先安裝一些編譯所需的軟體。

sudo apt update
sudo apt install make bison flex
sudo apt install build-essential
sudo apt install libncurses-dev
sudo apt install libssl-dev

交叉編譯工具 gcc 的安裝可以通過兩種形式。在 Ubuntu-20.04 WSL 中通過 wget 等命令直接下載。另外還可以在Windows  電腦上通過瀏覽器下載,然後使用 Windows 的檔案瀏覽器直接訪問  Ubuntu-20.04 WSL 的檔案系統,將編譯工具複製進去。交叉編譯工具的選擇可以參考這裡

在檔案瀏覽器中輸入 \\wsl$\,其會顯示電腦上可以用的 WSL 例項檔案系統。例如將適用於 Apalis iMX8QM Linux BSP 5.0 的  gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz 複製到 Ubuntu-20.04/home/ben 目錄下。

image002.png  

重新回到 Windows Terminal 命令列終端,解壓該工具,並設定環境變數。

tar vxf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
export ARCH=arm64
export DTC_FLAGS="-@"
export PATH=/home/ben/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/:$PATH
export CROSS_COMPILE=aarch64-none-linux-gnu-

使用 git 工具下載 Linux、U-Boot 原始碼。

git config --global user.name "XXX"
git config --global user.email your_email
git clone -b toradex_imx_v2020.04_5.4.24_2.1.0 git://git.toradex.cn/u-boot-toradex.git
git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/linux-toradex.git
git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/device-tree-overlays.git


詳細的編譯步驟和說明可以參考我們開發者中心的相關網頁說明

例如編譯 U-boot

make apalis-imx8_defconfig
make -j3 2>&1 | tee build.log

例如編譯 Linux 和 device tree

make defconfig
make -j3 Image 2>&1 | tee build.log
make DTC_FLAGS="-@" freescale/fsl-imx8qm-apalis-ixora-v1.1.dtb


 編譯 Device tree overlays

cpp -nostdinc -I ../../linux-toradex/arch/arm64/boot/dts/freescale -I ../../linux-toradex/include -undef -x assembler-with-cpp
apalis-imx8_atmel-mxt_overlay.dts apalis-imx8_atmel-mxt_overlay.dts.preprocessed
dtc -@ -Hepapr -I dts -O dtb -i ../../linux-toradex/arch/arm64/boot/dts/freescale -o apalis-imx8_atmel-mxt_overlay.dtbo
apalis-imx8_atmel-mxt_overlay.dts.preprocessed


 當這些都編譯好以後,生成的檔案都可以通過檔案瀏覽器將其複製出來。

image003.png

image004.png

image005.png

在完成編譯工作後,Windows Terminal 命令列終端輸入 exit 命令即可退出 WSL,但其仍在後臺執行。通過以下命令來檢視仍在執行的 WSL 例項,並將其關閉。

PS C:\Users\Ben> wsl --list --running
適用於 Linux  Windows 子系統分發版:
Ubuntu-20.04 (預設)
PS C:\Users\Ben> wsl --terminate Ubuntu-20.04

 

 

3). 總結

藉助 WSL執行 Linux 發行版,為 Linux 開發人員提供一種簡便的方式,免去雙系統的切換,或者安裝龐大的虛擬機器系統。WSL 是直接執行在 CPU 上,避免了虛擬化技術的開銷。目前該技術也有限制,如WSL 還無法使用圖形介面,從而使得一些需要藉助圖形化介面 IDE 如 Eclipse 完成的 C/C++ 應用開發還不是很適合。當然網路上也有關於如何在WSL 安裝 X11 並通過遠端桌面的方式來開啟圖形介面的說明,但這會影響到 WSL 的效能。WSL 的方式比較適合不需要藉助圖形介面的編譯任務,如make、cmake 編譯,甚至是  Yocto 編譯等。

相關文章