20

Accessing TX1 GPIO as a Non-root User (ubuntu)

 3 years ago
source link: https://jkjung-avt.github.io/gpio-non-root/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Accessing TX1 GPIO as a Non-root User (ubuntu)

Feb 15, 2017

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.

https://github.com/jkjung-avt/dqn-tx1-for-nintendo/tree/master/gpio/non_root

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK