在 Windows 中使用 WSL 編譯 Linux 和 U-Boot
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 以命令列的形式完成。
進入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 目錄下。
重新回到 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
當這些都編譯好以後,生成的檔案都可以通過檔案瀏覽器將其複製出來。
在完成編譯工作後,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 編譯等。
相關文章
- 在 Windows 中執行 Linux:WSL 2 使用入門WindowsLinux
- 【WSL2】在 Windows 10 中安裝 WSL2 的 Linux 子系統WindowsLinux
- 在WSL下為OpenWRT交叉編譯出CMake編譯
- linux與windows交叉編譯LinuxWindows編譯
- 在 Windows 中編譯 Github 中的 GO 專案Windows編譯GithubGo
- 在Windows下編譯WebRTCWindows編譯Web
- 【WSL】Windows Subsystem for Linux安裝WindowsLinux
- WSL2:在Windows系統中開發Linux程式的又一神器WindowsLinux
- 使用WSL2在Windows 11上安裝HadoopWindowsHadoop
- 在WSL2的Ubuntu中安裝和使用Docker/PodmanUbuntuDocker
- Linux中gcc編譯工具LinuxGC編譯
- Windows terminal中WSL Linux 終端的極簡美化指南WindowsLinux
- 在win10安裝和使用wslWin10
- 在linux下編譯hibernate筆記Linux編譯筆記
- [Windows] Windows 10 開啟 WSL 擁抱Linux系統WindowsLinux
- 在Linux上使用vscode編譯除錯C/C++程式碼LinuxVSCode編譯除錯C++
- 如何在Windows下使用make編譯MakefileWindows編譯
- 【WSL2】在Windows透過自定義域名訪問wsl2中的服務Windows
- windows下使用mingw和msvc靜態編譯Qt5.15.xxWindows編譯QT
- 在Linux中,如何配置和使用Xen?Linux
- Windows和Linux上均可編譯的簡單HTTP伺服器程式碼WindowsLinux編譯HTTP伺服器
- 使用lmbench測試linux效能-編譯Linux編譯
- Cygwin,在windows中使用linux命令WindowsLinux
- Windows+VSCode編譯在Linux-x86_64環境上執行的程式WindowsVSCode編譯Linux
- 交叉編譯場景分析(arm-linux)(四)--編譯readline和ncurses編譯Linux
- Linux下nginx編譯安裝教程和編譯引數詳解LinuxNginx編譯
- Windows10 VS2017 C++編譯Linux程式WindowsC++編譯Linux
- Windows下編譯OpenOCDWindows編譯
- windows vs 編譯postgresqlWindows編譯SQL
- Windows下編譯TriangleWindows編譯
- A40i &T3 全原始碼編譯-ARM Linux核心在PC Linux的編譯方法原始碼編譯Linux
- 使用 Nginx 編譯 Sass 和 ScssNginx編譯CSS
- 使用ilasm 和 ildasm編譯和反編譯工具對DLL檔案修改ASMLDA編譯
- 使用Live Reload在IntelliJ Idea和Chrome實時編譯部署和除錯IntelliJIdeaChrome編譯除錯
- Leptonica在VS2010中的編譯二,編譯 Leptonica1.68編譯
- 在 21 世紀該怎樣編譯 Linux 核心編譯Linux
- Windows平臺使用CMake+MinGW64編譯OpenCVWindows編譯OpenCV
- Windows Subsystem for Linux 允許在Windows 11中執行Linux系統WindowsLinux