まずはちょっと前にも書いたけど 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 は
から拝借。コピー。
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 がたちあがりました。DHCP で ping が動くことまで確認。
やっていることは理論的はあっている気がするので、このままいくよ。
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.