Eclypse Z7でUbuntu18.04を走らせる

Pocket

ZYNQを使ったシステム開発ではPS上でUbuntuを実行すると何かとはかどります。というわけで、Eclypse Z7上でUbuntu 18.04を走らせるためにu-bootとLinuxをビルドしました。手順は、ikwzmさんの https://github.com/ikwzm/FPGA-SoC-U-Boot-ZYBO-Z7 を参考に(ほぼそのままトレース)しています。

ベースのハードウェアデザインの用意

U-bootのビルド時にボードに合わせて設定したPSの初期化コードが必要なので、まずはハードウェアデザインを用意します。

ボードファイルを https://github.com/Digilent/vivado-boards からダウンロードしてセットしておけばIPIでPSのインスタンスを生成して自動セットアップでOKです。ペリフェラルなどは何もつなぐ必要はありません。念の為にbitファイルを生成しておきます。

これで、

  • ./eclypsez7_base.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_0/ps7_init_gpl.c
  • ./eclypsez7_base.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_0/ps7_init_gpl.h

の2つのファイルを入手できます。

U-bootのビルド

https://gist.github.com/miyo/b36f38354a634d5801b4921423b1b120 にアップロードしたdiffを使ってビルドします

$ wget https://gist.githubusercontent.com/miyo/b36f38354a634d5801b4921423b1b120/raw/fbb97f5d2daf941e5d8a7a9a58bd1091196cdfb2/u-boot.diff
$ git clone git://git.denx.de/u-boot.git
$ cd u-boot
$ git checkout -b v2017.11 refs/tags/v2017.11
$ patch -p1 ../u-boot.diff
$  make ARCH=arm zynq_eclypsez7_defconfig
$  make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all

出来上がった u-boot.img u-boot spl/boot.bin をSDカードのFATパーティションにコピーします。ここで、u-bootu-boot.elf という名前にリネームします。

Linuxのビルド

基本的な手順は https://github.com/fpga-design-contest/ad-refkit/blob/master/docs/sec3/index.md の通りです。dtsはEclypse Z-7用のものが必要です。

$ wget https://gist.githubusercontent.com/miyo/b36f38354a634d5801b4921423b1b120/raw/a93dc11bae4aeebfa00e96592de310b6cdd60a5f/linux-xlnx.diff
$ wget https://raw.githubusercontent.com/fpga-design-contest/ad-refkit/master/assets/patch/dot.config.patch
$ git clone https://github.com/Xilinx/linux-xlnx.git
$ cd linux-xlnx
$ git checkout -b linux-xlnx-v2019.1-eclypzez7 refs/tags/xilinx-v2019.1
$ patch -p1 ../linux-xlnx.diff
$ git add arch/arm/boot/dts/zynq-eclypsez7.dts
$ git add --update
$ git commit -m "for Eclypse-Z7"
$ git tag -a xilinx-v2019.1-eclypsez7-3 -m "release xilinx-v2019.1-eclypsez7-3"
$ echo 3 > .version
$ patch -p0 < ../dot.config.patch
$ make -j32 deb-pkg ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- DTC_FLAGS=--symbols
$ make uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x8000

これでLinuxカーネル uImage が手に入りました。

あとのセットアップ

UbuntuのユーザランドはQEMUを使って準備するのが楽です。具体的な手順は、https://github.com/fpga-design-contest/ad-refkit/blob/master/docs/sec4/index.md と同じ。

FATパーティションに置くu-bootはspl対応版なので、上記の u-boot.img u-boot.elf boot.binが必要なことに注意。

PLを使う

Device tree overlayの仕組みでPLの再構成ができます。(あとでかく)

あとは

あとはなんでもできる、そんな気分になれます。RedPitayaもどきでも作ろうかな。Linux版なAPB-3もどきも楽しそうだな。