Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What is going on with this article?
@ikwzm

FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(ブートイメージの提供)

注意(2021年3月14日追記)

この記事は2017年に投稿し、2018年に更新したもので、古い内容が含まれています。2021年3月14日の時点で FPGA-SoC-Linux のリリースバージョンは v1.3.0 です。詳細は https://github.com/ikwzm/FPGA-SoC-Linux を見てください。

はじめに

次の記事で Linux Kernel 4.10 から新たにサポートされた FPGA Region を紹介しました。

上の記事は紹介だけでしたが、実際に動作する環境もあった方が良いかと思い、以下の URL に ZYBO/ZYBO-Z7/PYNQ-Z1/DE0-Nano-SoC 用のビルド済みの U-Boot、Linux Kernel、Debian9-rootfs、デバイスドライバ(dtbocfgやudmabuf等)のパッケージを用意しました。

Linux や u-boot のビルドが面倒くさいという方はどうぞ。

なお、現時点での Linux の Device Tree Overlay のサポートは暫定的かつ限定的なもので、将来どうなるかは未だ不明な部分があることをご了承ください。ここで紹介している dtbocfg と言ったデバイスドライバは、現時点で Linux が提供していないユーザー側とのインターフェースを私が勝手に追加したものです。

概要

インストール

ダウンロード

github から次のようにダウンロードしてください。
現時点の最新バージョンは v0.8.0 です。チェックアウトしてください。
なお、いくつかのイメージファイルはかなり大きいので、Git LFS(Large File Storage)を使っています。
お使いの環境に git-lfs がインストールされている必要があります。

shell$ git clone --depth=1 --branch v0.8.0 git://github.com/ikwzm/FPGA-SoC-Linux
shell$ cd FPGA-SoC-Linux
shell$ git lfs pull

各ハードウェアへの詳細なインストール方法は doc/install/ の下のドキュメントを参照してください。

Board Type URL
ZYBO https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/zynq-zybo.md
ZYBO-Z7 https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/zynq-zybo-z7.md
PYNQ-Z1 https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/zynq-pynq-z1.md
DE0-Nano-SoC https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/de0-nano-soc.md
DE10-Nano https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/de10-nano.md

ファイルの説明

ZYBO

  • tareget/zynq-zybo/
    • boot/
      • boot.bin : Stage 1 Boot Loader(U-boot-spl)
      • design_1_wrapper.bit : FPGA configuration file (Xilinx Bitstream Format)
      • u-boot.img : Stage 2 Boot Loader(U-boot)
      • uEnv.txt : U-Boot environment variables for linux boot
      • zImage-4.14.34-armv7-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.14.34-zynq-zybo.dtb : Linux Device Tree Blob
      • devicetree-4.14.34-zynq-zybo.dts : Linux Device Tree Source
    • examples/ : Example Programs
  • debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)
  • linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Image Package (use Git LFS)
  • linux-headers-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Headers Package (use Git LFS)
  • dtbocfg-ctrl_0.0.5-1_all.deb : dtbocfg Control Pakcage (use Git LFS)
  • dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb : dtbocfg Kernel Module (use Git LFS)
  • fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : fclkcfg Kernel Module (use Git LFS)
  • udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb : udmabuf Kernel Module (use Git LFS)
  • zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : zptty Kernel Module (use Git LFS)

ZYBO-Z7

  • tareget/zynq-zybo-z7/
    • boot/
      • boot.bin : Stage 1 Boot Loader(U-boot-spl)
      • u-boot.img : Stage 2 Boot Loader(U-boot)
      • uEnv.txt : U-Boot environment variables for linux boot
      • zImage-4.14.34-armv7-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.14.34-zynq-zybo-z7.dtb : Linux Device Tree Blob
      • devicetree-4.14.34-zynq-zybo-z7.dts : Linux Device Tree Source
  • debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)
  • linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Image Package (use Git LFS)
  • linux-headers-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Headers Package (use Git LFS)
  • dtbocfg-ctrl_0.0.5-1_all.deb : dtbocfg Control Pakcage (use Git LFS)
  • dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb : dtbocfg Kernel Module (use Git LFS)
  • fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : fclkcfg Kernel Module (use Git LFS)
  • udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb : udmabuf Kernel Module (use Git LFS)
  • zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : zptty Kernel Module (use Git LFS)

PYNQ-Z1

  • tareget/zynq-pynqz1/
    • boot/
      • boot.bin : Stage 1 Boot Loader(U-boot-spl)
      • u-boot.img : Stage 2 Boot Loader(U-boot)
      • uEnv.txt : U-Boot environment variables for linux boot
      • zImage-4.14.34-armv7-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.14.34-zynq-pynqz1.dtb : Linux Device Tree Blob
      • devicetree-4.14.34-zynq-pynqz1.dts : Linux Device Tree Source
    • examples/ : Example Programs
  • debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)
  • linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Image Package (use Git LFS)
  • linux-headers-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Headers Package (use Git LFS)
  • dtbocfg-ctrl_0.0.5-1_all.deb : dtbocfg Control Pakcage (use Git LFS)
  • dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb : dtbocfg Kernel Module (use Git LFS)
  • fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : fclkcfg Kernel Module (use Git LFS)
  • udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb : udmabuf Kernel Module (use Git LFS)
  • zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : zptty Kernel Module (use Git LFS)

DE0-Nano-SoC

  • target/de0-nano-soc/
    • boot/
      • DE0_NANO_SOC.rbf : FPGA configuration file (Raw Binary Format)
      • uEnv.txt : U-Boot environment variables for linux boot
      • zImage-4.14.34-armv7-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.14.34-socfpga.dtb : Linux Device Tree Blob
      • devicetree-4.14.34-socfpga.dts : Linux Device Tree Source
    • u-boot/
      • u-boot-spl.sfp : Stage 1 Boot Loader(U-boot-spl)
      • u-boot.img : Stage 2 Boot Loader(U-boot)
    • examples/ : Example Programs
  • debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)
  • linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Image Package (use Git LFS)
  • linux-headers-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Headers Package (use Git LFS)
  • dtbocfg-ctrl_0.0.5-1_all.deb : dtbocfg Control Pakcage (use Git LFS)
  • dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb : dtbocfg Kernel Module (use Git LFS)
  • fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : fclkcfg Kernel Module (use Git LFS)
  • udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb : udmabuf Kernel Module (use Git LFS)
  • zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : zptty Kernel Module (use Git LFS)

DE10-Nano

  • target/de10-nano/
    • boot/
      • uEnv.txt : U-Boot environment variables for linux boot
      • zImage-4.14.34-armv7-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.14.34-socfpga.dtb : Linux Device Tree Blob
      • devicetree-4.14.34-socfpga.dts : Linux Device Tree Source
    • u-boot/
      • u-boot-spl.sfp : Stage 1 Boot Loader(U-boot-spl)
      • u-boot.img : Stage 2 Boot Loader(U-boot)
  • debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)
  • linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Image Package (use Git LFS)
  • linux-headers-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb : Linux Headers Package (use Git LFS)
  • dtbocfg-ctrl_0.0.5-1_all.deb : dtbocfg Control Pakcage (use Git LFS)
  • dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb : dtbocfg Kernel Module (use Git LFS)
  • fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : fclkcfg Kernel Module (use Git LFS)
  • udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb : udmabuf Kernel Module (use Git LFS)
  • zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb : zptty Kernel Module (use Git LFS)

SD-Card のフォーマット

  1. SD-Card のパーティション1を FAT File System でファイルシステムを作ります。
  2. SD-Card のパーティション2を ext3 File System でファイルシステムを作ります。
  3. DE0-Nano-Soc/DE10-Nano の場合は、SD-Card のパーティション3を 特殊パーティション(パーティションタイプ=0xa2)にします。ファイルシステムは作りません。

Linux での SD-Card のフォーマット方法は次の URL を参照してください。

Board Type URL
Zynq-7000(ZYBO/ZYBO-Z7/PYNQ-Z1) https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/format-disk-zynq.md
Cyclen5(DE0-Nano-SoC/DE10-Nano) https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/format-disk-de0-nano-soc.md

SD-Card への書き込み

  1. SD-Card のパーティション1(下の例では/dev/sdc1)に target/$platform/boot/ 下のファイルをコピーします。$platformには zynq-zybozynq-zybo-z7zynq-pynqz1de0-nano-socde10-nano の何れかを指定します。
  2. SD-Card のパーティション2(下の例では/dev/sdc2)に debian9-rootfs-vanilla.tgz の中身を展開します。
  3. 展開したルートファイルシステムの home/fpga にデバイスドライバの Debian パッケージをあらかじめコピーしておくと良いでしょう。後から network 経由でコピーしてもかまいません。
  4. DE0-Nano-Soc の場合は、SD-Card のパーティション3(下の例では/dev/sdc3)に target/de0-nano-soc/u-boot/ 下のファイルイメージを dd を使って書き込みます。
shell# mount /dev/sdc1 /mnt/usb1
shell# mount /dev/sdc2 /mnt/usb2
shell# cp target/$platform/boot/*                                         /mnt/usb1
shell# tar xfz debian9-rootfs-vanilla.tgz -C                              /mnt/usb2
shell# mkdir                                                              /mnt/usb2/home/fpga/debian
shell# cp linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb   /mnt/usb2/home/fpga/debian
shell# cp linux-headers-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb /mnt/usb2/home/fpga/debian
shell# cp dtbocfg-ctrl_0.0.5-1_all.deb                                    /mnt/usb2/home/fpga/debian
shell# cp dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb                    /mnt/usb2/home/fpga/debian
shell# cp fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb                    /mnt/usb2/home/fpga/debian
shell# cp udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb                    /mnt/usb2/home/fpga/debian
shell# cp zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb                      /mnt/usb2/home/fpga/debian
shell# umount mnt/usb1
shell# umount mnt/usb2

デバイスドライバパッケージのインストール

リブートして fpga または root でログイン

fpga のパスワードは "fpga" です。

debian-fpga login: fpga
Password:
fpga@debian-fpga:~$

root のパスワードは "admin" です。

debian-fpga login: root
Password:
root@debian-fpga:~#

Linux Kernel Image パッケージのインストール

dpkg を使って linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf をインストールします。

なお、v0.8.0 にある debian9-rootfs-vanilla.tgz を RootFS として使う場合は、すでにこのパッケージはインストールされているので、ここで改めてインストールする必要はありません。

fpga@debian-fpga:~$ cd /home/fpga/debian
fpga@debian-fpga:~/debian$ sudo dpkg -i linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb
Selecting previously unselected package linux-image-4.14.34-armv7-fpga.
(Reading database ... 94098 files and directories currently installed.)
Preparing to unpack linux-image-4.14.34-armv7-fpga_4.14.34-armv7-fpga-1_armhf.deb ...
Unpacking linux-image-4.14.34-armv7-fpga (4.14.34-armv7-fpga-1) ...
Setting up linux-image-4.14.34-armv7-fpga (4.14.34-armv7-fpga-1) ...

デバイスドライバ パッケージのインストール

dtbocfg kernel module package
fpga@debian-fpga:~$ cd /home/fpga/debian
fpga@debian-fpga:~/debian$ sudo dpkg -i dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb
Selecting previously unselected package dtbocfg-4.14.34-armv7-fpga.
(Reading database ... 94204 files and directories currently installed.)
Preparing to unpack dtbocfg-4.14.34-armv7-fpga_0.0.5-1_armhf.deb ...
Unpacking dtbocfg-4.14.34-armv7-fpga (0.0.5-1) ...
Setting up dtbocfg-4.14.34-armv7-fpga (0.0.5-1) ...
fclkcfg kernel module package
fpga@debian-fpga:~$ cd /home/fpga/debian
fpga@debian-fpga:~/debian$ sudo dpkg -i fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb
Selecting previously unselected package fclkcfg-4.14.34-armv7-fpga.
(Reading database ... 94210 files and directories currently installed.)
Preparing to unpack fclkcfg-4.14.34-armv7-fpga_1.0.0-1_armhf.deb ...
Unpacking fclkcfg-4.14.34-armv7-fpga (1.0.0-1) ...
Setting up fclkcfg-4.14.34-armv7-fpga (1.0.0-1) ...
udmabuf kernel module package
fpga@debian-fpga:~$ cd /home/fpga/debian
fpga@debian-fpga:~/debian$ sudo dpkg -i udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb
Selecting previously unselected package udmabuf-4.14.34-armv7-fpga.
(Reading database ... 94215 files and directories currently installed.)
Preparing to unpack udmabuf-4.14.34-armv7-fpga_1.1.0-1_armhf.deb ...
Unpacking udmabuf-4.14.34-armv7-fpga (1.1.0-1) ...
Setting up udmabuf-4.14.34-armv7-fpga (1.1.0-1) ...
zptty kernel module package
fpga@debian-fpga:~$ cd /home/fpga/debian
fpga@debian-fpga:~/debian$ sudo dpkg -i zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb
Selecting previously unselected package zptty-4.14.34-armv7-fpga.
(Reading database ... 94220 files and directories currently installed.)
Preparing to unpack zptty-4.14.34-armv7-fpga_1.0.0-1_armhf.deb ...
Unpacking zptty-4.14.34-armv7-fpga (1.0.0-1) ...
Setting up zptty-4.14.34-armv7-fpga (1.0.0-1) ...

デバイスドライバ起動サービスパッケージのインストール

dpkg を使って dtbocfg-ctrl_0.0.5-1_all.deb をインストールします。

fpga@debian-fpga:~$ cd /home/fpga/debian
fpga@debian-fpga:~/debian$ sudo dpkg -i dtbocfg-ctrl_0.0.5-1_all.deb
(Reading database ... 94225 files and directories currently installed.)
Preparing to unpack dtbocfg-ctrl_0.0.5-1_all.deb ...
Removed /etc/systemd/system/multi-user.target.wants/device-tree-overlay.service.
[ 2585.357805] systemd[1]: apt-daily-upgrade.timer: Adding 33min 33.391369s random time.
[ 2585.369573] systemd[1]: apt-daily.timer: Adding 3h 6min 23.779244s random time.
Unpacking dtbocfg-ctrl (0.0.5-1) over (0.0.5-1) ...
Setting up dtbocfg-ctrl (0.0.5-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/device-tree-overlay.service → /etc/systemd/system/device-tree-overlay.service.
[ 2586.021204] systemd[1]: apt-daily-upgrade.timer: Adding 25min 37.588039s random time.
[ 2586.032858] systemd[1]: apt-daily.timer: Adding 1h 39min 25.182099s random time.
[ 2586.126863] dtbocfg: loading out-of-tree module taints kernel.
[ 2586.133337] dtbocfg_module_init
[ 2586.140904] dtbocfg_module_init: OK

パッケージのインストールに成功すると dtbocfg デバイスドライバが有効になり、以降は systemctl で起動制御が出来るようになります。

fpga@debian-fpga:~$ sudo lsmod
Module                  Size  Used by
dtbocfg                16384  0
fpga@debian-fpga:~/debian$ sudo systemctl status device-tree-overlay.service
● device-tree-overlay.service - Device Tree Overlay Service.
   Loaded: loaded (/etc/systemd/system/device-tree-overlay.service; enabled; ven
   Active: active (exited) since Fri 2018-04-13 15:29:12 JST; 2min 7s ago
  Process: 2863 ExecStart=/sbin/modprobe dtbocfg (code=exited, status=0/SUCCESS)
 Main PID: 2863 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/device-tree-overlay.service
Apr 13 15:29:12 debian-fpga systemd[1]: Starting Device Tree Overlay Service..
Apr 13 15:29:12 debian-fpga systemd[1]: Started Device Tree Overlay Service..

参考

24
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ikwzm
元へっぽこ電子回路エンジニア。現在隠居中。どちらかというとVHDL派。最近はFPGA+SoC でいろいろやってます。github でもいろいろと公開してます。 https://github.com/ikwzm

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
24
Help us understand the problem. What is going on with this article?