では、早速始めましょう。基本的にはDigilentのpdfの通りでOKです。
何をするのか
最終的に作成したいものはなにか知っていると理解に役立つと思います。
作成したものは全てSDカードに入れます。最後にはSDカードはこうなっています
- BOOT.bin ・・・FSBLとbitstream(FPGAの設定ファイル)が入っている。これが起動してLinuxを動かし始める
- devicetree.dtb・・・デバイスツリー。どのアドレスに何があるかなどLinuxにデバイスについて教えるためのもの
- myled.ko ・・・・今回作るLEDのLinuxにおけるデバイスドライバ
- uImage・・・Linuxカーネル。今回はこれも0からビルドしてみる
- uramdisk.image.gz・・・HDDはZYBOにないので、ディスクイメージをRAMに展開する。その時の最初のディスクイメージがこれ。
これらを作成します。手順としては
- BOOT.binを作る
Vivadoでプロジェクトと新しいLED用のIPを作成してつなぐ。U-Bootをコンパイルしてそれと一緒にSDKでBOOT.binを作成する - uImageを作る
Linuxをコンパイルする - ramdiskを作る
これはただ公開されているものから作成するだけです - devicetree.dtbを作る
新しいLEDがある事を追加してデバイスツリーを作成 - デバイスドライバを作る
あるアドレスを読み書きするデバイスドライバを作ります
WIndowsとVivadoが登場してくるのは1だけで、あとはUbuntuを使います。
Ubuntuの入れ方が分からない方は
http://zakkiweb.net/a/20/
とかを参考にして下さい。
vagrantがオススメです。vagrantの場合はboxは
http://files.vagrantup.com/precise64.box
を使いました。
プロジェクトを入手
まず。ZYBOのページ
http://digilentinc.com/Products/Detail.cfm?Prod=ZYBO
から「ZYBO Base System Design」をダウンロードします。
適当な場所(出来ればパスが短くなる方が良い C:¥Projectsとかね)
Zipファイルを展開して zybo_base_sstem>source>vivado>hw>zybo_bsdのなかにvivadoのプロジェクトファイルがあるので開きましょう。
すると、プロジェクトのバージョンが古い影響でUpdateを聞かれます。
このままOKを押してUpdateしてしまいましょう。
あとはちょっとしたDialogが出てきますが問題ありません。
開かれるとこんなふうに既にDiagramができているプロジェクトが開かれます。
これはZYBOボードに合わせた設定がされています。既にHDMIのIPがありますし、ボタンもあれば、実はLEDもすでに作成されてつながっています。
「じゃあ作らなくていいじゃん」って思いますが、これは作る勉強なので次回からLEDのIPを作成・追加していきましょう。
ちなみにUpdateの時にもエラーが出ましたが、VerifyBlockDiagramや、Generate Block Diagramを押した時にもCritical Warningが出ます。
[shell]
[BD 41-1348] Reset pin /axi_dispctrl_0/s_axi_aresetn (associated clock /axi_dispctrl_0/s_axi_aclk) is connected to asynchronous reset source /processing_system7_0/FCLK_RESET1_N.
This may prevent design from meeting timing. Please add Processor System Reset module to create a reset that is synchronous to the associated clock source /processing_system7_0/FCLK_CLK0.
[/shell]
全部、こういった内容のものです。これは何かというと「非同期リセットになってる」ってことです。通常リセットはクロックのタイミングで行われるのが良いのですが、そういう風になってないというものです。Processor System Reset というIPを追加して配線すれば良いのですが、大変ですし今回はこれでも動くのでここまま進みます。