aster_ismの工作室

FPGAとかマイコンとか

ZYBO-Z7を用いたLチカ(Ubuntu16.04+/sys/class/gpio編)

前回眠くて途中になっていた /sys/class/gpio からのLチカをさせる。

aster-ism.hatenablog.com

前回 /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/gpiogpio(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チカをすることができました。