前回の続き
e-tipsmemo.hatenablog.com
SDK
VivadoでBitstreamがでたら。
File->Export Hardwareでhdfファイルを出力する。(Include bitstreamにチェックをいれる。)
File->Launch SDK
SDKの準備
Xilinx Wiki - Build Device Tree Blob
や
google:xilinx sdk device tree generator
あたりを参考にし、device treeを自動生成するツールを入れていおく。
Device Treeとその編集
File->New->Board Support Package
にて、device_treeを選択してFinish
Overview->device_treeのbootargsに
console=ttyPS0,115200 root=/dev/ram rw earlyprintk rootwait devtmpfs.mount=1 earlycon earlycon earlycon
を入力。
(デフォルトのドライバの設定などもできるらしい?)
「OK」で必要なDeviceTreeが分割された状態で生成される。
Interruptの関係のプロパティは自動で入れてくれないので、自分て追記する。
zynq-7000.dtsi
をみると、割り込みのコントローラーである
cortex-a9-gic
が、intc: interrupt-controller@f8f01000
となっている。
pl.dtsiの自分の追加した割り込み信号を発生するロジックのモジュール内に以下の文言を入れる。
interrupt-parent = <&intc>; interrupts = <0 29 4>;
devicetreeについては
Device Tree Usage - eLinux.org
など
interruptのプロパティの数字については
Solved: IRQF2P Interupt not being seen in driver when movi... - Community Forums
より、
For interrupts = < 0 29 4 >, 0 is defining it as a SPI ( general purpose ) interrupt, 29 is the LSB of IRQ_F2P ( TRM says 61, subtract 32 ), and 4 is level-high triggered.
(割り込み番号は29から順番?
次に割り込みのデバイスを入れたら30になると..)
dtc -I dts -O dtb -o devicetree.dtb system-top.dts
FSBL, uImage, uramdisk.image.gz
digilentのGithubのリポジトリをcloneして
Linuxをビルド。
uImageを作成。
u-boot.elfを同様にして作成する。
一方SDKでは
File->New->Application Project
nameをfsblにしてnext。
Zynq FSBLを選択してFinish
FSBLがビルドされてfsbl.elfができていたら
プロジェクトを右クリックしてCreate Boot Image
Addで最後のパーティションにu-boot.elfを追加する。
Create Boot ImageでBoot.bin
が作られる。
uramdisk.image.gzはzedboardかどこかの別のプロジェクトに入っていたものを持ってきた。
(ramdiskを編集したいときはイメージをマウントする必要があるので
Bash On windowsだけではできなかった。。。)
- boot.bin
- devicetree.dtb
- uramdisk.image.gz
- uImage
これらが最低限必要なもの。
次はデバイスドライバ