ZYBO-Z7を用いたLチカ(Ubuntu16.04+/sys/class/gpio編)
前回眠くて途中になっていた /sys/class/gpio
からのLチカをさせる。
前回 /sys/class/gpio
を覗くと、PSとPLで作成したGPIOが見えていることを確認した。
$ cd /sys/class/gpio $ ls -la total 0 drwxrwxr-x 2 root gpio 0 Jan 10 13:35 . drwxr-xr-x 45 root root 0 Jan 10 13:33 .. -rw-rw---- 1 root gpio 4096 Jan 10 13:33 export lrwxrwxrwx 1 root gpio 0 Jan 10 13:31 gpiochip1020 -> ../../devices/soc0/amba_pl/41200000.gpio/gpio/gpiochip1020 lrwxrwxrwx 1 root gpio 0 Jan 10 13:31 gpiochip902 -> ../../devices/soc0/amba/e000a000.gpio/gpio/gpiochip902 -rw-rw---- 1 root gpio 4096 Jan 10 13:35 unexport
今回は、作成したPLのGPIO(LD0~LD3)を点灯させたいのでgpiochip1020
を確認する。
$ cd gpiochip1020 $ ls base device/ label ngpio power/ subsystem/ uevent
色々とファイルがあるが、下記をチェックする。
$ cat label /amba_pl/gpio@41200000 $ ngpio 4
PLに作成したGPIOモジュールのアドレスが書かれている。また、有効ビット数も4ビットとLEDの数と同じである。
まずは、LD0に対応するGPIOを有効にする必要がある。
echo (GPIO番号) > /sys/class/gpio/export
で対応するGPIOを有効にする。
これにより、/sys/class/gpio
に gpio(GPIO番号)
というディレクトリができる。
$ cd /sys/class/gpio $ echo 1020 > export $ ls export gpiochip902 gpio1020 gpiochip1020 unexport
gpio1020
の中身を確認する。
$ ls /sys/class/gpio/gpio1021/ active_low direction subsystem/ value device/ power/ uevent
現在のLD0の状態を確認する。
$ cat direction in $ cat active_low 0 $ cat value 0
現在、GPIOは入力で、LD0はOFFとなっている。
LEDなので出力へ変更し、値をONに書き換える。なお、root
でないと
-bash: gpio1021/direction: Permission denied
と怒られる。
$ sudo su # echo out > direction # cat direction out # echo 1 > value
LD0が点灯する。
OFFにする場合には value
へ0を書き込む。
他のLEDを点灯させる場合には、1021~1023をexportに書き込み有効にする。
ということで、ここまでデバイスツリーとかカーネルビルドとか、 何をどうすればいいのかコマンドやファイル編集が良くわからなくても petalinux-buildに必要なビルドを任せることでFPGAでLチカをすることができました。