Blog:
WindowsでLinuxとU-BootをコンパイルにWSLを利用

Tuesday, August 10, 2021

LinuxやU-Boot関連のソースコードをコンパイルする作業は、通常、コンパイル用ツールやファイルシステムの制約によりUbuntu、Fedora、Linux Mint、Arch LinuxといったLinuxディストリビューションで行う必要があります。このため、デュアルシステムまたはバーチャルマシンをコンピューターにインストールして、Linuxディストリビューションを利用するのが一般的な方法です。ただし、Linuxシステムを使用する別の方法として、Windowsが公表しているWSL(Windows Subsystem For Linux)を利用する方法もあります。この記事では、Windows 10のPCでWSLを使い、Toradex Apalis iMX8QMコンピューターモジュール用のLinux、U-Bootおよびデバイスツリーオーバーレイをコンパイルする方法を紹介します。

WSLには2つのバージョンがありますが、ここではWSL 2を使用します。WSLのインストールを始める前に、Windows Terminalをインストールすることをお勧めします。これはMicrosoftによる新しいターミナルツールで、WSLとの互換性があります。また、sshやscpなど一部のLinuxコマンドツールが直接統合されています。

WSL のインストール方法の詳細については、マイクロソフトの「WSL のインストール」ガイドを参照してください。インストール後は、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をインストールする方法は2つあります。1つ目は、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.com/u-boot-toradex.git
git clone -b toradex_5.4-2.1.x-imx git://git.toradex.com/linux-toradex.git
git clone -b toradex_5.4-2.1.x-imx git://git.toradex.com/device-tree-overlays.git


詳しいコンパイル手順と説明については、ToradexのDeveloper Centerウェブページの手順を参照してください。

U-bootのコンパイルの例は次のとおりです。

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

Linuxとデバイスツリーのコンパイルの例は次のとおりです。

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

デバイスツリーオーバーレイのコンパイルは次のとおりです。

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
Windows Subsystem for Linux Distributions:
Ubuntu-20.04 (Default)
PS C:\Users\Ben> wsl --terminate Ubuntu-20.04

まとめ

Linuxディストリビューションの実行にWSLを利用すれば、Linux開発者はデュアルシステムでの切り替えや巨大な仮想マシンシステムのインストールを行う必要がなくなります。WSLはCPUで直接実行されるため、仮想化テクノロジーのオーバーヘッドを排除できます。ただし、現時点ではこの技術には制約があります。例えば、WSLではグラフィカルインターフェースを利用できません。このため、EclipseなどのグラフィカルインターフェースIDEのサポートが必要な一部のC/C++アプリケーション開発には不向きです。もちろん、WSLでX11をインストールして、リモートデスクトップを介してグラフィカルインターフェースを開く方法もありますが、これはWSLのパフォーマンスに影響を与えます。このため、WSLを利用するこの手法は、make、cmakeのコンパイル、さらにYoctoのコンパイルなど、グラフィカルインターフェースを必要としないコンパイル作業に適しています。

Author: Shanfeng Hu, FAE, Toradex
Share this on:

Leave a comment

Your email ID will be kept confidential. Required fields are marked *



* Your comment will be reviewed and then added. Thank you.

Have a Question?