2017/08/04

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (14)

Zybo用にビルドしたPetaLinux v2017.2で、Digilent社のチュートリアルを動かしたいというシリーズ。

・・・なのだが、手始めにInterface誌2016年4月号に載っていたLEDサンプルを動かしている。
そういえば5月号はどんな内容なのだろう、と読んでみたら、私がLinux上で0~9に光らせるようにした処理をFPGA上でやる内容だった。

そこに行く前に、まず今のドライバがどういう作りになっているのかを確認し、Digilentのチュートリアルを動かして、とにかくこのシリーズを終わらせてしまおう。
とはいえ、まだまだかかりそうだな。。。


ドライバのソースファイルはこちら(Gist)。
original: http://www.cqpub.co.jp/interface/download/2016/4/IF1604Z.zip

ZIPとなってるが、元ファイルがZIP提供だったのでそういうタイトルを付けているだけで、リンク先はGistだから安心して欲しい。

ドライバの基本的な部分は、たぶんどこも同じだろうから省略しよう。
FPGAっぽいところ、今回で言えばGPIOアクセスに関係するところだけ見ていく。


そうなると、見るのはまずopen()から。
何かやっていそうなのは、ioremap()とkmalloc()くらいか。

bitは、minorの下位5bit分。
名前からして、デバイスファイルのMAJOR, MINORのminorだろう。
それが、bit = [16, 23] = [0x10, 0x17]の範囲はエラーなんだと。
確かに、mknodしたときは24にしていた。

minorのb4をmodeに割り当てていて、0だったらREAD、1だったらWRITEにしている。
24=0x18だから、WRITEだ。

cookieに使うgpio_table[bit >> 3]は、0x18(0) --> 0x0c(1) --> 0x06(2) --> 0x03(3)、となる。
gpio_table[3]は、

MAP_BASE_ADDR + LED_PIO_BASE + LED_PIO_DATA_OFFSET
  = 0x41200000 + 0x10000 + 0x0

だ。

アドレスが出てきたので、Zynqのリファレンスマニュアルを見ていこう。

image

左側のPLは「CPUおよびACP」、右側のPLは「その他のバスマスター」。

ここからたどっていけばわかるだろうと思ったのだが・・・さっぱりわからん!
GPIOのピンとアドレスがマッピングされているだけではないのか?

Zynqだからなのか、Cortex-Aだからか、いきなりリファレンスマニュアルを読むのは早すぎたようだ。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。