To make the DQN AI agent on Jetson TX1 able to control Nintendo Famicom Mini (take actions), I have to let the Torch7 program access GPIO. Normally, that would then require the Torch7 program to run with root privilege. I certainly don’t want to run my whole Torch7 program as root, so I need a solution to allow a non-root user (‘ubuntu’ on JetsonTX1) to access GPIO.
By the way, there is already a good article “GPIO Interfacing – NVIDIA Jetson TX1” by JetsonHacks.com about how to test and use GPIO pins on Jetson TX1. I don’t find a better solution to access GPIO on TX1 than the /sys/class/gpio interface, so I’d just stick to it. I just need to do this without sudo (or being root).
After some googling, I found the trick is just to use a ‘gpio’ group to manage access to /sys/class/gpio files, and to set up some udev rules to automatically assign proper file permissions. So I wrote the solution as shell scripts and put them into my repository.
To set up Jetson TX1, just run
./setup_gpio.sh once and then reboot the system. Here’s the content of ‘setup_gpio.sh’.
#!/bin/bash # # This script is used to enable the user "ubuntu" to access GPIO through # /sys/class/gpio interface. It only needs to be executed once. Make sure # you have "fix_udev_gpio.sh" and "99-com.rules" in the same directory # when you run this script. sudo groupadd gpio sudo usermod -a -G gpio ubuntu sudo cp fix_udev_gpio.sh /usr/local/bin/ sudo chmod a+x /usr/local/bin/fix_udev_gpio.sh sudo chown -R root.gpio /sys/class/gpio sudo chmod 0220 /sys/class/gpio/export sudo chmod 0220 /sys/class/gpio/unexport sudo cp 99-com.rules /etc/udev/rules.d/
Afterwards, we can use ‘gpio.sh’ to do simple tests.
### set gpio38 as output with value 1 $ ./gpio.sh 38 out 1