Windows 10 から Linux を利用するための仕組みとして、WSL(Windows Subsystem for Linux)が利用できるようになっています。
この記事では、WSL を利用して Arria® 10 SoC FPGA 開発ボードおよび Cyclone® V SoC FPGA 開発ボード向けの Preloader / U-boot をビルドした際の手順を紹介します。
この「【その 2】 ビルド編」では、WSL 上で Preloader / U-boot をビルドする手順について解説します。
注記:
WSL を利用するための環境設定については、「【その 1】 環境セットアップ編」をご覧ください。
1. Git ツリーのクローンを作成し Preloader/U-boot をビルドする
参考:
この章で説明している内容は、RocketBoards.org ポータルサイトの以下のページを参考にしています。
Compiling Linux
リンク先ページの以下のタブをご参照ください。
3. Host Setup for Angstrom
5. Building Kernel and U-Boot Separately From Git Trees
1-1. ホスト・セットアップ
以下の手順により、ホスト PC のセットアップを行います。
● 次のコマンドにより、必須パッケージをインストールします。
$ sudo apt-get install repo sed wget cvs subversion git coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff libtool xterm lib32z1
注記:
RocketBoards.org の “Compiling Linux - 3. Host Setup for Angstrom” のページで説明しているコマンドラインではエラーが出るため、上記のコマンドでは、
・ phablet-tools を repo
・ git-core を git
に変更しています。
【図 1】 必須パッケージのインストール
● ホストマシンが 64 ビットバージョン OS を実行している場合、次のコマンドにより、追加パッケージをインストールする必要があります。
$ sudo apt-get install lib32ncurses5 lib32z1 lib32stdc++6
注記:
RocketBoards.org の “Compiling Linux - 3. Host Setup for Angstrom” のページで説明しているコマンドラインではエラーが出るため、上記のコマンドでは、 ia32-libs を lib32ncurses5 と lib32z1 に変更しています。
【図 2】 ホストマシンが 64 ビット OS の場合は追加パッケージをインストールする
● 次のコマンドにより、 /bin/sh が dash ではなく bash を指すように変更する必要があります。
$ sudo dpkg-reconfigure dash
※ ここで、<いいえ> を選択します
$ sudo ln -sf bash /bin/sh
【図 3】 /bin/sh が dash ではなく bash を指すように変更する
1-2. ビルド・ツールチェーンをダウンロードして設定する
次のコマンドにより、 U-boot をビルドするために使用するツールチェーン(コンパイラー)のダウンロードと設定を行います。
$ wget https://releases.linaro.org/archive/15.06/components/toolchain/binaries/4.8/arm-linux-gnueabihf/gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabihf.tar.xz
$ tar -Jxvf gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabihf.tar.xz
$ export PATH=~/gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabihf/bin/:$PATH
$ export CROSS_COMPILE=~/gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
注記:
RocketBoards.org の “Compiling Linux - 5. Building Kernel and U-Boot Separately From Git Trees” のページで説明しているコマンドラインでは make 時にエラーが発生したため、
上記のコマンドではツールチェーンを gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux から gcc-linaro-4.8-2015.06-x86_64_arm-linux-gnueabihf に変更しています。
【図 4】 ツールチェーン(コンパイラー)のダウンロードと設定
1-3. Arria® 10 SoC ブートローダー(U-boot)をビルドする例
● 社内ネットワークなどでプロキシがある場合は、git clone の実行前に次のコマンドでプロキシの設定が必要です。
$ git config --global http.proxy http://your.proxy.address:proxy.port
注記:
上記のプロキシ設定において、 your.proxy.address はプロキシアドレス、
proxy.port はプロキシポート番号 を意味します。
● U-boot git ツリーをクローンします。
$ git clone http://github.com/altera-opensource/u-boot-socfpga
$ cd u-boot-socfpga
$ git checkout socfpga_v2014.10_arria10_bringup
注記:
上記のコマンド例では、Arria® 10 SoC に対応している socfpga_v2014.10_arria10_bringup ブランチを使用しています。
【図 5】 U-boot git ツリーをクローン
● dtc(device-tree-compiler)がインストールされているかを確認します。インストールされていないと、make 時に dtc が無いエラーが出てしまいますので、ここで device-tree-compiler をインストールしておきます。
$ which dtc
$ dtc --version
$ sudo apt install device-tree-compiler
【図 6】 dtc(device-tree-compiler)の確認とインストール
● Arria® 10 SoC の U-Boot をビルドします。
$ make mrproper
$ make socfpga_arria10_defconfig
$ make
【図 7】 Arria® 10 SoC の U-Boot をビルド
1-4. Cyclone® V SoC ブートローダー(Preloader/U-boot)をビルドする例
● 社内ネットワークなどでプロキシがある場合は、git clone の実行前に次のコマンドでプロキシの設定が必要です。
$ git config --global http.proxy http://your.proxy.address:proxy.port
注記:
上記のプロキシ設定において、 your.proxy.address はプロキシアドレス、
proxy.port はプロキシポート番号 を意味します。
● U-boot git ツリーをクローンします。
$ git clone http://github.com/altera-opensource/u-boot-socfpga $ cd u-boot-socfpga $ git checkout socfpga_v2013.01.01
注記:
上記のコマンド例では、Cyclone® V SoC / Arria® V SoC に対応している socfpga_v2013.01.01 ブランチを使用しています。
【図 8】 U-boot git ツリーをクローン
● Cyclone® V SoC の Preloader と U-Boot をビルドします。
$ make mrproper
$ make socfpga_cyclone5_config
$ make
注記:
上記2行目のコマンドにおいて、Arria® V SoC 向けにコンパイルする場合は、
make socfpga_arria5_config に置き換えてください。
【図 9】 Cyclone® V SoC の Preloader と U-Boot をビルド
注記:
この手順で生成される Preloader / U-Boot は、Cyclone® V SoC Development Kit / Arria® V SoC Development Kit でのみ使用可能です。同様の手順で、その他のボード向けの Preloader / U-Boot を生成するためには、ソースツリーにボード依存の設定を与える方向で改造が必要となります。
他のバージョンのソースツリーがベースとなりますが、Rocketboards.org にカスタムボードへの対応方法も紹介されています。
Mainline u-Boot for SoCFPGA | Rocketboards.org
2. 生成した Preloader / U-boot に mkpimage ヘッダーを付加する
2-1. Arria® 10 SoC U-Boot に mkpimage ヘッダーを付加する
● 生成された Arria® 10 SoC の u-boot.bin(U-boot バイナリーファイル)は、そのままでは使用できません。
● Windows にあらかじめインストールしてある、SoC FPGA エンベデッド開発スイート(SoC EDS)を使用して、 mkpimage ヘッダーを付加する必要があります。
(1)
WSL の端末から、Windows のディレクトリー(この例では、C:\Arria10_boot)を作成し、生成した u-boot.bin をコピーします。
$ mkdir /mnt/c/Arria10_boot
$ cd u-boot-socfpga
$ cp u-boot.bin /mnt/c/Arria10_boot
【図 10】 Windows のディレクトリーを作成し生成した u-boot.bin をコピー
(2)
Windows エクスプローラーを使用して、下記 SoC EDS のディレクトリーにある devicetree.dtb ファイルを、作成した Windows のディレクトリー(この例では、C:\Arria10_boot)に コピーしておきます。
C:\intelFPGA\<バージョン>\embedded\examples\hardware\a10_soc_devkit_ghrd\software\bootloader
【図 11】 devicetree.dtb ファイルを Windows のディレクトリーにコピー
注記:
上の例は Arria® 10 SoC Development Kit をターゲットとした内容で記載しています。オリジナルのデザイン向けには、BSP-Editor で生成される devicetree.dts を元に、SoC EDS Command Shell 上で以下のコマンドを実行して変換した devicetree.dtb を使用してください。
$ dtc -I dts -O dtb -o devicetree.dtb devicetree.dts
(3)
SoC EDS Command Shell を起動します
【図 12】 SoC EDS Command Shell を起動
(4)
SoC EDS Command Shell から以下のコマンドを実行し、u-boot.bin に devicetree.dtb ファイルを連結して、u-boot_w_dtb.bin ファイルを作成します。
$ cd "C:\Arria10_boot"
$ cat u-boot.bin devicetree.dtb > u-boot_w_dtb.bin
(5)
以下のコマンドを実行し u-boot_w_dtb.bin ファイルに mkpimage ヘッダーを付加して、 uboot_w_dtb-mkpimage.bin ファイルを生成します。
$ mkpimage --header-version 1 -o uboot_w_dtb-mkpimage.bin u-boot_w_dtb.bin u-boot_w_dtb.bin u-boot_w_dtb.bin u-boot_w_dtb.bin
【図 13】 mkpimage ヘッダーを付加して uboot_w_dtb-mkpimage.bin ファイルを生成
● uboot_w_dtb-mkpimage.bin ファイルを SD カードに書き込みます。
$ alt-boot-disk-util.exe -B uboot_w_dtb-mkpimage.bin -a write -d <SD Card ドライブレター>
【図 14】 uboot_w_dtb-mkpimage.bin ファイルを SD カードに書き込む
参考:
SD カードへの書き込み方法詳細は以下の記事をご参照ください。
SoC FPGA ブート用 SD カードイメージの作り方
2-2. Cyclone® V SoC Preloader に mkpimage ヘッダーを付加する
● 生成された Cyclone® V SoC の spl/u-boot-spl.bin(Preloader バイナリーファイル)は、そのままでは使用できません。
● Windows にあらかじめインストールしてある、SoC FPGA エンベデッド開発スイート(SoC EDS)を使用して、mkpimage ヘッダーを付加する必要があります。
(1)
WSL の端末から、Windows のディレクトリー(この例では、C:\CycloneV_boot)を作成し、生成した u-boot.img と spl/u-boot-spl.bin をコピーします。
$ mkdir /mnt/c/CycloneV_boot
$ cd u-boot-socfpga
$ cp u-boot.img /mnt/c/CycloneV_boot
$ cp spl/u-boot-spl.bin /mnt/c/CycloneV_boot
【図 15】Windows のディレクトリーを作成し生成した u-boot.img と spl/u-boot-spl.bin をコピー
(2)
SoC EDS Command Shell を起動します。
【図 16】 SoC EDS Command Shell を起動
(3)
SoC EDS Command Shell から以下のコマンドを実行し u-boot-spl.bin ファイルに mkpimage ヘッダーを付加して、preloader-mkpimage.bin ファイルを生成します。
$ cd "C:\CycloneV_boot"
$ mkpimage --header-version 0 -o preloader-mkpimage.bin u-boot-spl.bin u-boot-spl.bin u-boot-spl.bin u-boot-spl.bin
● preloader-mkpimage.bin ファイルと u-boot.img ファイルを SD カードに書き込みます。
$ alt-boot-disk-util.exe -p preloader-mkpimage.bin -b u-boot.img -a write -d <SD Card ドライブレター>
【図 17】 mkpimage ヘッダーの付加と SD カードへの書き込み
参考:
SD カードへの書き込み方法詳細は以下の記事をご参照ください。
SoC FPGA ブート用 SD カードイメージの作り方
まとめ
今まで Windows で Linux を使用する場合は、VirtualBox などの仮想マシン環境をインストールし、
各種設定を行う必要がありましたが、WSL によりとても簡単に Linux を使うことができました。
尚、この記事に記載の手順で Preloader と U-Boot のビルドには成功していますが、ツールバージョン v19.2 現在、Arria® 10 SoC FPGA 向けに U-Boot をビルドする公式な手順としては、Linux OS 環境下での作業が要件となっています。
この記事に記載の手順は非公式となりますので、WSL の利用についてはユーザー様の自己責任でご判断ください。