新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

kv260 でなんだか知らんが Debian Linux が動いたよ

まずはちょっと前にも書いたけど platform をつくる。ここでいう platform は、Vivado でつくったARM CPU + ハードの環境から xsa を作る事ね(不正確なにおいがする)。 昔は Vivado で ARM CPU + ハードを作ったら、SDK 立ち上げて、それでもって FSBL とかアプリとか作ってた。いまは xsa をつくって、Vitis (SDK の代わり) からその xsa を読み込んでソフトウェアのアプリを作るよ。 よくわかってないけど、xsa には昔の SDSoC とか言っていた機能"も"上の仕組みとは別に作る事が出来るみたい。昔の SDSoC で同じ呼称の platform といっていた中途半端な IP のつくりかけ vivado みたなのを用意してたけど、同じようなことができるみたい。っていうかどちらかというと SDAccel なのかな。OpenCL を使う方法と Vitis HLS を直に使う方法の2つがあるみたいね。いまはそこまで(私は)到達してないよ(っていうかもっと正確に誰か書いてくれ)

正確な情報はここにある

これみればいいきがするぞ。 xilinx-wiki.atlassian.net

以下、人柱的報告

Platform をつくる

ということで github.com を clone。 そして、Vivado 2020.2.2 の環境設定をして

 make platform PFM=kv260_ispMipiRx_vcu_DP JOBS=3

JOBS は適当にしないとメモリを食いすぎて途中で死にます。そして、最後にどういうわけか X Windows に依存したプログラムが走るらしく、Desktop 環境から make しないとうまくいかない。最初、ssh で入ってやったら最後に Xvfb が無いと言って怒られます。も~

で、xsa ができます。

./platforms/xilinx_kv260_ispMipiRx_vcu_DP_202022_1/hw/kv260_ispMipiRx_vcu_DP.xsa

どういうわけか bit は出来なかったので(後回し、、、) xsa だけです。

fsbl と pmu の firmware をつくる

これは本家の作り方ではなくて、、、

GitHub - ikwzm/ZynqMP-U-Boot-Ultra96-V2: Boot Loader(U-Boot, FSBL, PMUFW,ATF) for Ultra96-V2

を参考に script を利用させてもらった。tcl がほぼそのまま使える。

#set hwspec_file       "design_1_wrapper.hwdef"
set hwspec_file       "kv260_ispMipiRx_vcu_DP.xsa"

こんなかんじで hwdef じゃなくて xsa を読ませることができる。(一応、ドキュメント読んで出来ることを確認してます。はい。)

trusted firmware

これはなんとなくつくれた。

arm-trusted-firmware-2020.2.2_k26

u-boot

これも u-boot-xlnx-2020.2.2_k26 の tag を clone して作成。本家のドキュメントによると 2020.1 以降は xilinx_zynqmp_virt_defconfig を使うらしい。 u-boot.elf できた。何のパッチも当てていない。

boot.bin

これは bootgen でつくる。bif は ZynqMP-U-Boot-Ultra96-V2 の boot.bif を拝借。bit ファイルがないのでそこだけ削る。

Linux の Image と FS

Image と FS は

GitHub - ikwzm/ZynqMP-FPGA-Linux: FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager U-Boot&Linux Kernel&Debian10 Images (for Xilinx:Zynq Ultrascale+ MPSoC)

から拝借。コピー。

ramdisk と boot.scr と system.dtb

これは KV260 の SD カードからコピー。っていうか u-boot ごとコピーしてよかった気がするよ。どうせ bit stream ないんだし。一応、dtb は dts にして大丈夫そうなのを確認したよ。

Linux の Image は Image と rename して、、、

たちあげ

どうも、一旦 ramdisk を立ち上げると、その後、パーティションがありそうなところをみつけて起動してくれるみたいよ。

ZynqMP> fatload mmc 1:1 0x00200000 image-5.4.0-xlnx-v2020.2-zynqmp-fpga
16964096 bytes read in 1917 ms (8.4 MiB/s)
ZynqMP> fatload mmc 1:1 0x00100000 system.dtb
42077 bytes read in 20 ms (2 MiB/s)
ZynqMP> fatload mmc 1:1 0x04000000 ramdisk.cpio.gz.u-boot
25150797 bytes read in 2841 ms (8.4 MiB/s)
ZynqMP>  booti 0x00200000 0x04000000 0x00100000

で、boot.scr をそのままつかったらもう上みたいなことを自動でやってくれるのね。 ということでキメラな Linux がたちあがりました。DHCPping が動くことまで確認。

やっていることは理論的はあっている気がするので、このままいくよ。

USB うごかんかった。

[    9.802600] systemd[1]: Detected architecture arm64.

Welcome to Debian GNU/Linux 10 (buster)!

[    9.823544] systemd[1]: Set hostname to <debian-fpga>.
[   10.013948] systemd[1]: File /lib/systemd/system/systemd-journald.service:12 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.
[   10.030998] systemd[1]: Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)
[   10.174430] systemd[1]: /lib/systemd/system/smbd.service:9: PIDFile= references path below legacy directory /var/run/, updating /var/run/samba/smbd.pid → /run/samba/smbd.pid; please update the unit file accordingly.