2015年6月8日月曜日

zynqのドライバ入門 UIOを使ってみたかった・・・が

先輩方のUIO解説記事 (例えば、https://formalism.github.io/blog/posts/2014/05/zynqpllinux-dts/) にしたがって、カーネルをmake menuconfigで確認すると、ZYBOチュートリアルで拾ってきたものでもちゃんとUIOには[*]チェックが入っています。

楽勝~と思って、dtsにそれっぽいデバイスをいろいろ書いて、dtbをSDカードにつっこんでリブートすると、/devの下にuio0とかが・・・無い!

いくらやっても、カーネルをリコンパイルしてもどーやっても出現しません。



しばらく苦戦しているうちに、ふと先輩方の多くが、Digilentのチュートリアルをさらっと流した後にdigilentリポジトリではなく、http://masahir0y.blogspot.jp/2014/01/u-boot-linux-kernel-zynq.html のように公式リポジトリや、その他のディストロを使っていることに気づきました。

そういう目でぐぐっていると
http://forums.xilinx.com/t5/Embedded-Linux/help-with-simple-Zynq-PL-device-access-via-Linux-UIO-based-user/td-p/270836
に、

「xilinxのカーネルは古いので、UIO機能自体は入っているけどdtsを解析してuioデバイスを作る機能が入っていない。だからUIOを使うには自分でデバイスを作るカーネルモードのコードを書かなきゃいけない」

と書かれていました。

うーん、困りました。
そもそもUIOの紹介ドキュメントに「UIOは何一つ新たなものを実現しません。ただ単にわかりやすく、特権コードを書かなくていいだけです」と言ってるくらいなので、どうせカーネルモードのコードを書のなら無理してUIOを使う必要が無さそう。

かと言って、UIOのためだけに使用するカーネルのソースを別のにするというのも何か違っている気がします。(もちろん公式が新しいわけだし、変更点を理解している人なら全然問題ないんでしょうけど)

というわけで、digilentまたはxilinxリポジトリのカーネルを使う限りはUIOではなく普通のドライバ記法を勉強することになりそうです。

0 件のコメント:

コメントを投稿