user@Minnowboard:~$ ls /sys/kernel/gpio
ls: cannot access /sys/kernel/gpio: No such file or directory
GPIO, Kernel Drivers Enablement
One way to enable GPIOs is to follow
Compile your kernel, once compiled we enable all needed drivers via menuconfig:
user@Minnowboard:~$ cd linux
user@Minnowboard:~$ make menuconfig
Processor type and features --->
[*] Intel Low Power Subsystem Support
Symbol: X86_INTEL_LPSS [=y]
Prompt: Intel Low Power Subsystem Support
Device Drivers --->
Pin controllers --->
[*] Intel Baytrail GPIO pin control
Symbol: PINCTRL_BAYTRAIL [=y]
Prompt: Intel Baytrail GPIO pin control
Device Drivers --->
-*- GPIO Support --->
Symbol: GPIOLIB [=y]
Prompt: GPIO Support
[*] Debug GPIO calls
Symbol: DEBUG_GPIO [=y]
Prompt: Debug GPIO calls
[*] /sys/class/gpio/... (sysfs interface)
Symbol: GPIO_SYSFS [=y]
Prompt: /sys/class/gpio/... (sysfs interface)
Once configured, we save the changes, compile and reboot
GPIO, Kernel Modules Tests
Ready! We test that our GPIOs are enabled in dmesg, sysfs y debugfs
user@Minnowboard:~$ dmesg | grep gpio
[ 0.222366] gpiochip_find_base: found new base at 410
[ 0.222466] gpiochip_add: registered GPIOs 410 to 511 on device: INT33FC:00
[ 0.223202] gpiochip_find_base: found new base at 382
[ 0.223285] gpiochip_add: registered GPIOs 382 to 409 on device: INT33FC:01
[ 0.223683] gpiochip_find_base: found new base at 338
[ 0.223777] gpiochip_add: registered GPIOs 338 to 381 on device: INT33FC:02
[ 7.823125] acpi 80860F16:00: GPIO: looking up 80860F16:00 cd-gpios
[ 7.823138] acpi 80860F16:00: GPIO: looking up 80860F16:00 cd-gpio
[ 7.823415] sdhci-acpi 80860F16:00: failed to setup card detect gpio
user@Minnowboard:~$ ls /sys/class/gpio
export gpiochip338 gpiochip382 gpiochip410 unexport
root@Minnowboard:~# mount -t debugfs none /sys/kernel/debug
root@Minnowboard:~# cat gpio
GPIOs 338-381, platform/INT33FC:02, INT33FC:02:
gpio-0 (Unrequested ) in hi pad-29 offset:0x1d0 mux:0 up 20k
...
gpio-43 (Unrequested ) in out lo pad-40 offset:0x280 mux:0
...
GPIOs 382-409, platform/INT33FC:01, INT33FC:01:
gpio-0 (Unrequested ) in lo pad-19 offset:0x130 mux:2
...
gpio-27 (Unrequested ) lo pad-7 offset:0x070 mux:0 down 20k
GPIOs 410-511, platform/INT33FC:00, INT33FC:00:
gpio-0 (Unrequested ) in lo pad-85 offset:0x550 mux:1
...
gpio-101 (Unrequested ) in out lo pad-100 offset:0x640 mux:0
To know the GPIO values let's look at the Minnowboard Elinux Wikipage
A very simple test is to enable a GPIO as output and use a multimeter to check the voltage, Minnowboard MAX Pin 1 (Ground | Gnd) and Pin 21 (GPIO / Wakeup | GPIO_S5_0) are connected to the negative y positive terminales of our multimeter.
The next commands will give us the configuration and output of 0 and 3.3 Volts respectively: