In a previous post https://www.udoo.org/forum/threads/using-braswell-gpio-i2c-and-uart-pins.32423/ I discussed the use of the libgpiod library, which provides a CLI as well as Python and C++ bindings to replace the depreciated sysfs system. It creates 4 devices which you can see using ls /dev/gpio* as /dev/gpiochip0-4. If you examine the permissions they are root only and you have to run any programs using super user privileges. e.g. sudo gpiodetect etc. This is for good reason! There are actually over 200 gpio lines managed by the chips which control the other chips, output and input ports and switches etc. Changing some of them inadvertently can really muck things up. For this reason I strongly suggest the following practice when programming. Assign aliases or names using define in your C headers e.g. #define D24_chip = 0 D24_line = 47 or names in your Python files to refer to the chip and line for a pin. e.g. D24 = (3,47) (python tuple). Use your aliases not numbers in your calls to the library. All but 3 of the External GPIO pins are managed by gpiochip3. To run without having superuser privileges, you need to do the following: Create a gpiod group, add user to it and add a file to the /etc/udev/rules.d/ to assign the gpiochips to the gpiod group and give rw privileges. The following works on linux Mint 20 sudo groupadd gpiod sudo usermod -G gpiod <user> then create a file in the /etc/udev/rules.d named 60-gpiod.rules containing the following: # udev rules for gpio port access through libgpiod SUBSYSTEM=="gpio", KERNEL=="gpiochip[0-4]", GROUP="gpiod", MODE="0660" From command line the following should work: sudo echo '# udev rules for gpio port access through libgpiod SUBSYSTEM=="gpio", KERNEL=="gpiochip[0-4]", GROUP="gpiod", MODE="0660"' > /etc/udev/rules.d/60-gpiod.rules Then reboot.