使用 PetaLinux 访问 GPIO 控制器非常简单,但您需要了解一些技巧。
定位 GPIO 控制器
在我使用的示例 FPGA 中,可编程逻辑中有两个 GPIO 控制器。它们位于地址 0x4120_0000 和 0x4121_0000。如果您查看pl.dtsi
PetaLinux 项目中的文件,在目录中subsystems/linux/configs/device-tree
,您将看到 GPIO 设备的条目。无需修改整个设备树。
如果您构建 PetaLinux 并启动它,您可以查看该/sys/class/gpio
目录。
root@pz-7015-2016-2:~# ls /sys/class/gpio/ 导出 gpiochip901 gpiochip902 gpiochip906 unexport
您可以看到gpiochip
每个 GPIO 控制器都有一个目录。和目录对应于我在设计中添加的 PL 控制器gpiochip901
。gpiochip902
该gpiochip906
目录用于 PS 中的 GPIO 控制器。
但是,您怎么知道哪个是哪个?每个目录都包含一个标签文件,告诉您控制器的设备树标签。你可以继续看内容:
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip901/label /amba_pl/gpio@41210000 root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip902/label /amba_pl/gpio@41200000 root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip906/label zynq_gpio
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip901/ngpio 1 root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip902/ngpio 4 root@pz-7015-2016-2:~# cat /sys/class/gpio/gpiochip906/ngpio 118
在我看来,编号从 901 开始。由于该控制器只有一个 GPIO 位,下一个控制器是 902。那个控制器有四个位,所以 ZYNQ PS 控制器从 906 开始,它有 118 位。
启用 GPIO 位
要访问 GPIO 位,您需要启用正确的 GPIO 引脚。您可以通过写入目录export
中的文件来实现/sys/class/gpio
。这是启用我的第二个控制器的 LSB 的示例:
root@pz-7015-2016-2:~# echo -n 902 > /sys/class/gpio/export
现在,如果您查看该/sys/class/gpio
目录,您将看到一个新创建的目录,它允许您控制各个 GPIO 引脚。
root@pz-7015-2016-2:~# ls /sys/class/gpio 导出 gpio902 gpiochip901 gpiochip902 gpiochip906 unexport
如果您查看该目录,您会看到许多控件:
root@pz-7015-2016-2:~# ls /sys/class/gpio/gpio902 active_low device direction edge power subsystem uevent value
访问 GPIO 位
您可以通过查看direction
文件来确定 GPIO 方向。由于我的 GPIO 引脚是输出,因此它给出了值out。
root@pz-7015-2016-2:~# cat /sys/class/gpio/gpio902/direction out
您可以通过写入值文件将值更改为 1。
root@pz-7015-2016-2:~# echo 1 > /sys/class/gpio/gpio902/value
结论
所以你有它。在 PetaLinux 上访问 GPIO 的“官方”方式。