今月のこれまでの成果として、Zybo + PetaLinux v2017.2で、HDLを書かずにLED制御の準備をするまでの手順を書き残そう。
「LED制御の準備」というのは、ドライバを作る手前まで、という状態に持っていくことを指している。
まだチュートリアルが動かせないシリーズがあるので、DeviceTreeなども解決してから続きを書こう。
ツールは、こう。
- Vivado v2017.2 (Windows10)
- XSDK v2017.2 (Windows10)
- PetaLinux v2017.2 (Xubuntu 16.04 on VirtualBox)
HDFファイル作成
まず、Vivadoでの作業を行う。
- Vivadoを起動
- Projectを作成する
- Boardは"Zybo"を選択
- "Create Block Design"をクリック
- "+"アイコンをクリックして、Zynqを追加
- 上の方にリンク"Run Block Automation"が出てくるので、クリックして、チェックされているのを確認して、OK
- "+"アイコンをクリックして、AXI GPIOを追加
- 上の方にリンク"Run Connection Automation"が出てくるので、クリック
- 一番上のツリーにチェックする
- axi_gpio_0>GPIOの中から"leds_4bits"を選択して、OK
- LinuxからEthernetを使いたい場合は、ZYNQをダブルクリック
- 左のPeripheral I/O Pinsをクリック
- Searchに"Ethernet"と打つ
- Ethernet0>MDIOにチェックが入っているので、右にスクロールさせて、MDIOをクリックしてOK
- Save
- 左側のツリーでSourcesタブを選択し、Design Sourcesの下にある項目(たぶんdesign_1(design_1.bd))を右クリック
- Create HDL Wrapper...を選択
- ダイアログが出てくるので、auto-updateの方になっているのを確認して、OK
- Critical Messagesダイアログが出てくるが、気にせずOK
- "Generate Bitstream"をクリック
- 終わるまで待つ
- 終わったらダイアログが出てくるので、Cancelを選択してOK
- メニューから、"File > Export > Export Hardware..."を選択
- Include bitstreamにチェックして、OK
- メニューから、"File > Launch SDK"を選択
- 立ち上がったら、自動的に関連するファイルを作ってくれるので、終了させる
- Vivadoも終了させる
PetaLinux image作成
- PetaLinuxの設定ファイルを読み込む
$ source settings.sh - プロジェクトを作るフォルダに移動(お好きな場所へ)
- 空のプロジェクトを作る。今回は"gpioled"という名前にする。
$ petalinux-create -t project -n gpioled --template zynq - できたディレクトリ(今回はgpioled)に移動する
$ cd gpioled - さきほど作ったVivadoプロジェクトの中から拡張子がsdkのフォルダ内にある"design_1_wrapper_hw_platform_0"というような名前のフォルダをまるごとgpioledの中にコピーする
- 読込んで設定
$ petalinux-config --get-hw-description=./design_1_wrapper_hw_platform_0 - 特に変更せず終わらせると、そこそこ時間かかる処理が始まる。
- 忘れていたが、LEDのドライバを準備する。今回はleddrvという名前にする。
$ petalinux-create -t modules -n leddrv --enable - "gpioled/project-spec/meta-user/recipes-modules/leddrv"辺りにファイルができているので、うまいこと編集するとよいのだが、まずはテンプレートのままにしておく。
- ビルドする。こちらは時間がかかる。
$ petalinux-build - BOOT.BINを作る
$ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/design_1_wrapper.bit --u-boot --force
これで、BOOT.BINとimage.ubができたので、SDカードにコピーしてZyboを起動。
ログインして、ドライバを確認。
# ls /lib/modules/4.9.0-xilinx-v2017.2/extra/
leddrv.ko
read/writeを用意していないが、insmodくらいならできるだろう。
# insmod /lib/modules/4.9.0-xilinx-v2017.2/extra/leddrv.ko
leddrv: loading out-of-tree module taints kernel.
<1>Hello module world.
<1>Module parameters were (0xdeadbeef) and "default"
open/closeもできそうだが、デバイスファイルがないのでできない気がする。
ひとまず、これで、デバイスファイルとドライバを作ればLED制御できそうな状態になったと思う。
以降の調査は、これからやっていこう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。