8. Zynq デバイスドライバとデバイスツリーを作る

デバイスドライバは、今回作ったPL部を読み書きするためのものです。Linuxではダイレクトにメモリアクセスするのも出来ますが、チュートリアルに従いデバイスドライバを書きます。

Makefile

まず作業するディレクトリですが、digilentディレクトリに作ります

あとはここにMakefileという名前のファイルを作って

を書き込みます。

注意点

  • makeの左側はスペースでなくタブです。必ずタブでないといけないのでコピペする時は注意して下さい
  • チュートリアルではM=$(PWD)となっていますが、$(PWD)だと空欄になってしまったので上記のように修正しました。

ちなみにLinux-Digilent-Devは前にコンパイルしたLinuxカーネルです。-Cはディレクトリの変更でMは作業ディレクトリを指します。つまりカーネルを使ってMにあるソースをコンパイルするわけです。
これでデバイスドライバを作成する準備が出来ました。このMakefileはmyled.cからmyled.oを作りmyled.koを作るためのMakefileです。これからmyled.c(つまりデバイスドライバ)を書きます。

 

デバイスドライバ

デバイスドライバはhttp://marsee101.blog19.fc2.com/blog-entry-2923.htmlを参考にインクルード文を1つ追加しています。

これをmyled.cとしてdriversディレクトリに保存します。そしたらコンパイル

これでmyled.koが出来ると思います。これがデバイスドライバになります。
作成されたものを確認してみましょう。

Screen Shot 2015-01-11 at 14.21.24

デバイスツリー

これで最後の作業になります。
LinuxにmyLedのことを教えないといけません。USBはここのアドレスとかのハードウェアに関するものを記述したものがデバイスツリーでそれをコンパイルして一緒に入れる必要があります。ZYBO用のテンプレートはDigilent_Linux_Tutrial/Linux-Digilent-Dev/arch/arm/boot/dts/zynq-zybo.dts
にありますので、これをdriversディレクトリにコピーしましょう。
コピーしたら中身を編集します。http://bravo-fpga.blogspot.jp/2014/10/zybo-7.htmlを参考にします。

まず、チュートリアルで支持されている変更をしますが、上記サイトを元にchosenを

このように書き換えます。また、一番下にmyledを追加します。

これでOKです。これをdtcでコンパイルしてdtbというファイルを作ります。

これでdriversディレクトリにdevicetree.dtbが作成されます。

Screen Shot 2015-01-11 at 14.33.30

ここまででSDカードに書き込んでLinuxを立ち上げる準備が出来ました。
次回はZynqのLinuxからecho 0x0F > /proc/myled でLEDをつけてみる

コメントを残す