(2021年1月1日時点の情報であることにご注意ください)
本ページで紹介する内容:
DE10-nano ボード(Intel FPGA Cyclone 5 SoC)を使用して、下記を実現したい時の手順
- Desktop環境 (Xfce) を有効にした Linux を Build したい
- ボード上の HDMI出力ポートから、モニターに出力したい
- とにかく無料でやりたい。個人使用なので、Copyright, GPL については気にしない。
手順概要:
- FPGAデザインを、terasic社 Web-site からダウンロード
- Intel社 Web-site からQuartus ツール(Version 20.1)をダウンロード & インストール
- https://github.com/altera-opensource/linux-socfpga (tag: socfpga-4.14.130-ltsi) から、"driver/video/fbdev/altvipfb.c" をダウンロード(tagに注意!)
- 以下の Rocketboards.org の手順に従い、Build を進めるが、いくつかのステップを変更 & いくつかのファイルを変更しながら作業を進める
https://rocketboards.org/foswiki/Documentation/CycloneVSoCGSRD#Rebuilding_the_GSRD_Binaries
用意するもの:
- Terasic社 DE10-nano ボード(付属のUSBケーブルと電源ケーブル)
- Ubuntu 18.04 ホスト・パソコン
- SD card (16GB)
- HDMIモニター、HDMIケーブル
FPGAデザインを、terasic社 Web-site からダウンロード
- DE-10 nano のページ中の "Resource" のページから、ボードの Revision A/B/C に対応した CDROM イメージをダウンロード
http://de10-nano.terasic.com/
- Rev. C の場合のダウンロードファイル名:
”DE10-Nano_v.1.3.8_HWrevC_SystemCD.zip” - 解凍して、以下のフォルダーを、作業 Directory (今回は、$HOME)にコピーする
「Demonstrations/SoC_FPGA/DE10_NANO_SoC_FB」
Intel社 Web-site からQuartus ツール(Version 20.1)の「Linux版」をダウンロード & インストール
- Quartus Prime ライト・エディッション Version 20.1 をダウンロード
https://fpgasoftware.intel.com/20.1/?edition=lite - 個別ダウンロードをお勧めします。
- ダウンロードした "*.run" ファイルを実行して、Home Directory ($HOME)にインストール(chmod +x *.run; ./*.run)
- Embedded Development Suite Standard Edition 20.1 をダウンロード
https://fpgasoftware.intel.com/soceds/20.1/?edition=standard&platform=linux&download_manager=direct - ダウンロードした "*.run" ファイルを実行して、Home Directory ($HOME)にインストール(chmod +x *.run; ./*.run)
- Ubuntu 18.04 ホスト・マシンの ~/.bashrc に以下の環境変数を設定しておく
- export QUARTUS_ROOTDIR=~/intelFPGA_lite/20.1/quartus
- export SOCEDS_DEST_ROOT=~/intelFPGA/20.1/embedded
- export QSYS_ROOTDIR=${QUARTUS_ROOTDIR}/sopc_builder/bin
- export PATH=${PATH}:\
${QUARTUS_ROOTDIR}/bin:\
${QUARTUS_ROOTDIR}/sopc_builder/bin
https://github.com/altera-opensource/linux-socfpga (tag: socfpga-4.14.130-ltsi) から、"driver/video/fbdev/altvipfb.c" をダウンロード(tagに注意!)
- 生憎、linux-socfpga 5.* Version から "driver/video/fbdev/altvipfb.c" が削除されている。
- しかし、Terasic社提供のハードウエア・デザインをそのまま使用する場合には、前述のドライバー(altvipfb.c)を使うのが手っ取り早い。
- 一方、linux-socfpga 5.* 内で「altvipfb.c」を動作させるには、一部修正が必要(後述)
Build !
準備作業終了。ここから、Build 関連作業を進めていく。
基本的には、Rocketboards.org に記載されている公式の方法(下記URL)に沿って作業を進める。もちろん、以下のページは DE10-Nano向けの記載ではないので、一部手順は異なる。
Build Tool Chain のインストールと環境設定
- この作業は、Rocketboards.org の記載そのまま。ここでは、$HOME (~/)にインストールしている。
U-Bootの Build
- 先ほど terasic社のページからダウンロードした「DE10_NANO_SoC_FB」を使用する。以下は、DE10_NANO_SoC_FBを $HOMEにコピーした場合の例。
- 以下に手順を記載するが、Rocketboards.org の手順との違いは、デザイン名(Directory)と、u-boot-socfpga の tag 名(2021年1月1日時点)
Linux Kernel の Build
- Rockerboards.org の手順に従って、ファイルをダウンロードする。
- tag は、「socfpga-5.4.74-lts」に設定している (2021年1月1日時点)
- Device Tree ファイルを追加する。
- 追加した Device Tree ファイル「socfpga_cyclone_de0_nano_soc_FB.dts」の最後に以下を追加する。
- 「socfpga_cyclone_de0_nano_soc_FB.dtb」を Makefile に追加する。line 952 付近に追加した例を記載する。
dtb-$(CONFIG_ARCH_SOCFPGA) += \ socfpga_arria5_socdk.dtb \ socfpga_arria10_socdk_nand.dtb \ socfpga_arria10_socdk_qspi.dtb \ socfpga_arria10_socdk_sdmmc.dtb \ socfpga_cyclone5_chameleon96.dtb \ socfpga_cyclone5_mcvevk.dtb \ socfpga_cyclone5_socdk.dtb \ socfpga_cyclone5_de0_nano_soc.dtb \ socfpga_cyclone5_de0_nano_soc_FB.dtb \ socfpga_cyclone5_sockit.dtb \
- 次に、先ほどダウンロードした「altvipfb.c」を以下の Directoryにコピーする。
- ~/linux-socfpga/drivers/video/fbdev/.
- 「altvipfb.c」を編集
- line 220 の "dma_alloc_coherent()" の第一引数を NULL から &pdev->dev に変更
- line 177 に以下を追加
- 「altvipfb.c」が Build されるように、Makefileを編集
- ~/linux-socfpga/drivers/video/fbdev/Makefile
- line 14 付近に下記を追加
- 「altvipfb.c」が有効になるように、「~/linux-socfpga/drivers/video/fbdev/Kconfig」「~/linux-socfpga/arch/arm/configs/socfpga_defconfig」ファイルも変更
- ~/linux-socfpga/drivers/video/fbdev/Kconfig (line 222付近) に以下を追加
- ~/linux-socfpga/arch/arm/configs/socfpga_defconfig (line 121付近)に以下を追加
- 次に、Kernel , Device Tree の Build を行う
- 以下のファイルが生成されていることを確認する
- ~/linux-socfpga/arch/arm/boot/zImage
- ~/linux-socfpga/arch/arm/boot/dts/socfpga_cyclone5_de0_nano_soc_FB.dtb
- ~/linux-socfpga/modules_install
Root File System の Build
ここまでで、U-Boot, Linux Kernel, Driver/Module, Device Tree は作成できた。
次に、Root File System を作成する。
SD card への書き込み
あとは、SD card image ファイルを作成して、SD card に書き込む。
- 基本操作は、Rocketboards.org と同じだが、一部、生成されたファイル名が異なるので、その部分の操作が異なる。
- 異なる部分を赤字で示す。
生成された sdcard.img を、SDcard に書き込む。sdcard を umount 後に、ddコマンドで書き込む例。ここでは、SDcardが、/dev/sdc に割り当てられている例。
- sudo umount /dev/sdc*
- sudo dd bs=4M conv=sync if=sdcard.img of=/dev/sdc
root でログイン後に、「startxfce4」と打ち込むと、XFCE desktop が起動する。
おまけ:
上記の操作だと、最小限のソフトウエアしかインストールされていない。Python等もインストールしておきたい場合には、Yocto の Recipe ファイルを作成して、Root File System を生成する。
1. recipe 追加
下記 Recipe ファイルを追加して、bitbake コマンドを以下のように実行する。生成される 「core-image-xfce-some2-cyclone5.tar.gz」には、Python などの各種ソフトが入っている。
File1:
~/yocto/meta-openembedded/meta-xfce/recipes-core/images/core-image-xfce-some2.bb
File 2:
~/yocto/poky/meta/recipes-core/packagegroups/packagegroup-core-buildessential2.bb
bitbake コマンド
(「Root File System の Build」(前述)の最後のコマンド)生成されるファイル
SD card イメージ生成時には、「core-image-minimal-xfce-cyclone5.tar.gz」の代わりに、今回作成した「core-image-xfce-some2-cyclone5.tar.gz」ファイルに対して、tar コマンドを実行する。これで、DE10-nano上の Linux で、Python が使えるようになる。
(recipeの設定が原因などで、うまくいかない時等、一度、環境を Clean にしたくなる時がある。その時は、「bitbake -c clean core-image-xfce-some2 」と打ち込むと Clean になる)
2. sshd 有効化設定
sshd も起動しておいて、他端末から ssh で入れるようにしておく。
他端末から ssh でログインする時は、「ssh root@DE10-nanoのip-address」と打ち込む(例:ssh root@192.168.1.29)。 IP address は、Serial 端末か、HDMIモニターに表示しているターミナルから、ifconfig コマンドを打ち込めば確認できる。
* /etc/ssh/sshd_config (line 13) 編集(Port 22 有効化)
* sshd 起動コマンド
* 起動時に sshd 起動するように設定する(コマンド)
* IP address 確認方法 (DE10-nano上での操作)
Ethernet ケーブルを DE10-nano に接続後、起動。
root でログイン後に、ifconfig と打ち込む。赤字部分が IP address。
参照URLs:
- DE10nano向けLinux Kernel Build
https://qiita.com/eofz/items/3413cbdf804154bc150e - Rocketboards.org
https://rocketboards.org/foswiki/Documentation/CycloneVSoCGSRD#Rebuilding_the_GSRD_Binaries - Terasic DE10-nano
http://de10-nano.terasic.com/ - Intel Download Center
https://fpgasoftware.intel.com/20.1/?edition=lite - linux-socfpga
https://github.com/altera-opensource/linux-socfpga/