はじめに
Cyclone-Vのカスタムボードを動かす必要に迫られたが、Cyclone-Vでの環境構築が明るくない上に、 ボードがうまく動かなかったため勢いに任せて既製品のボードを買ってしまった。
カスタムボードが動かなかったのは結局のところハードウェア不良が原因だったらしく、 ソフトウェアの環境構築手順には問題はなかったらしい。
ただ、Cyclone-V自体が息の長い製品らしく、古い情報を参考にしても無駄が多かったので、 最近のyoctoprojectでの環境構築手順をまとめる。
昔の手順
古い情報を参考にすると次のような手順を踏む必要があるとなっている。
yoctoで環境構築を下としても次のような手順が必要だったらしい。
- preloaderの作成
- u-bootの作成
- kernelの作成
- rootfs(core-imgae-minimal)の作成
preloaderはyoctoでは作成できないためSoC EDS
を使用する必要があった。
最近は、u-bootのSPLを使用することでpreloaderを使用せずに起動することができるので、SoC EDSなどのインストールも含めて手順を省略できる。
warrior(yocto 2.7)環境の構築
meta-alteraはwarriorブランチが作成されていないが、LAYERSERIES_COMPAT_meta-altera
がwarriorに設定されているため、
masterブランチががwarrior相当となっている。
$ mkdir -p de0-nano-soc/layers $ cd de0-nano-soc/layers $ git clone git://git.yoctoproject.org/poky -b warrior $ git clone https://github.com/kraj/meta-altera.git $ git clone git://git.linaro.org/openembedded/meta-linaro.git -b warrior
環境変数の読み込み
bitbake
が実行できるように環境変数の設定を行う。
$ cd ../ $ source ./layers/poky/oe-init-build-env
コマンド実行後はbuildディレクトリに自動的に移動される。
ビルド対象へのレイヤの追加
bitbakeの実行対象にレイヤを追加する。
$ bitbake-layers add-layer ../layers/meta-altera $ bitbake-layers add-layer ../layers/meta-linaro/meta-linaro-toolchain
local.confの修正
次の行をlocal.conf
に追加する。
MACHINE = "cyclone5" UBOOT_CONFIG = "de0-nano-soc"
カーネルのコンパイルエラー
dtsのファイル名が変更されたようで、カーネルのビルド中に次のようなエラーが発生する。
| Using /home/mickey/work/yocto/de0-nano-soc/build/tmp/work-shared/cyclone5/kernel-source as source for kernel | make[3]: *** No rule to make target 'arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dtb'. Stop. | /home/mickey/work/yocto/de0-nano-soc/build/tmp/work-shared/cyclone5/kernel-source/Makefile:1224: recipe for target 'socfpga_cyclone5_de0_sockit.dtb' failed | make[2]: *** [socfpga_cyclone5_de0_sockit.dtb] Error 2 | Makefile:169: recipe for target 'sub-make' failed | make[1]: *** [sub-make] Error 2 | ERROR: oe_runmake failed | Makefile:15: recipe for target '__sub-make' failed | make: *** [__sub-make] Error 2 | WARNING: exit code 1 from a shell command. | ERROR: Function failed: do_compile (log file is located at /home/mickey/work/yocto/de0-nano-soc/build/tmp/work/cyclone5-poky-linux-gnueabi/linux-altera/5.1+gitAUTOINC+a64da520ac-r0/temp/log.do_compile.5813)
これを回避するためにlocal.conf
に次の行を追加する。
KERNEL_DEVICETREE = "\ socfpga_cyclone5_socdk.dtb \ socfpga_cyclone5_sockit.dtb \ socfpga_cyclone5_socrates.dtb \ socfpga_cyclone5_de0_nano_soc.dtb \ socfpga_cyclone5_mcvevk.dtb \ socfpga_cyclone5_sodia.dtb \ socfpga_cyclone5_trcom.dtb \ socfpga_cyclone5_vining_fpga.dtb \ "
u-bootのデバイスツリーの設定
extlinux.confのFDTはUBOOT_EXTLINUX_FDT_default
によって設定されるらしい。
local.conf
に次の行を追加する。
UBOOT_EXTLINUX_FDT_default = "../socfpga_cyclone5_de0_nano_soc.dtb"
ビルド
bitbakeを実行しイメージを作成する。
$ bitbake core-image-base
tmp/deploy/images/cyclone5
にwicイメージが生成される。
ddコマンドなどでSDカードにwicイメージを書き込むことでブート用のSDイメージができる。
起動
UARTのUSBケーブルを接続しSDカードを挿入したあと、電源を投入する。
次のメッセージが表示された後ログが止まるので、KEY4(ボタン)を押す。
U-Boot SPL 2019.01 (Jul 16 2019 - 06:23:35 +0000) Trying to boot from MMC1 U-Boot 2019.01 (Jul 16 2019 - 06:23:35 +0000) CPU: Altera SoCFPGA Platform FPGA: Altera Cyclone V, SE/A4 or SX/C4, version 0x0 BOOT: SD/MMC Internal Transceiver (3.0V) DRAM: 1 GiB
するとu-bootからカーネルがキックされ、ログイン画面まで進む。
Poky (Yocto Project Reference Distro) 2.7.1 cyclone5 /dev/ttyS0 cyclone5 login:
まとめ
最近のyoctoではwicイメージをSDにddするだけでブートできる。
de0-nano-soc向けのDTSのファイル名が変更されているのでこれの対応をしておかないとカーネルのビルドに失敗するので注意が必要。
起動時にKEY4を押さないとブートが止まってしまうのがちょっと気になる。