On Tue, 11 May 2021 18:51:22 -0700, in gmane.comp.hardware.beagleboard.user
"John Dammeyer" <johnd-5o6ditlojsohvde0pjs...@public.gmane.org> wrote:

>But I'm trying to keep this discussion pointed in the direction of the subject 
>line.  The problem with access to GPIO seems to exist in both the Pi and 
>Beagle world.  One posting mentioned how his software broke when the Pi OS was 
>upgraded to 4.14.
>

pi@rpi3bplus-1:~/PI_GPIO$ uname -a
Linux rpi3bplus-1 5.10.17-v7+ #1403 SMP Mon Feb 22 11:29:51 GMT 2021 armv7l
GNU/Linux
pi@rpi3bplus-1:~/PI_GPIO$

        If I interpret that, the current R-Pi is up to kernel 5.10 vs 4.18 for
BBB

debian@beaglebone:~$ uname -a
Linux beaglebone 4.19.94-ti-r48 #1buster SMP PREEMPT Wed Aug 19 17:38:55
UTC 2020 armv7l GNU/Linux
debian@beaglebone:~$


        Well, there are some weird things on the R-Pi... My Ada program is able
to export a GPIO (they aren't exported by default, unlike the BBB). But it
fails when opening the direction file to change from "in" to "out". I even
tried changing from "out_file" to "append_file".

        Turns out to be a timing issue -- the OS hasn't finished creating the
pin files by the time it tried to write the direction. {This is
Raspberry-Pi -- I didn't have that problem on BBB, but wasn't exporting in
code either}. Putting in a 1 second delay after closing the export file let
the program run. I also had to add an exception handler on the export
operation in case the pin had already been exported (along with adding an
Unexport function called at the end). Other than using GPIO 18, and using
export (with delay), unexport -- this is the same program that ran on the
BBB. In fact, I just built and ran it on the BBB (Using GPIO 18). (Changed
to GPIO 48 -- and first run had the same timing error -- since it took the
exception branch; subsequent runs no problem).

pi@rpi3bplus-1:~/PI_GPIO$ gnatmake main
arm-linux-gnueabihf-gcc-8 -c main.adb
arm-linux-gnueabihf-gnatbind-8 -x main.ali
arm-linux-gnueabihf-gnatlink-8 main.ali
pi@rpi3bplus-1:~/PI_GPIO$ ./main
Opening /sys/class/gpio/export
Writing pin number: 18
Closing /sys/class/gpio/export
Delaying to allow pin control files to be set up

Opening /sys/class/gpio/gpio18/value
Reading value
Closing /sys/class/gpio/gpio18/value

Current value of 18 is  1

Opening /sys/class/gpio/gpio18/direction
Writing direction: out
Closing /sys/class/gpio/gpio18/direction


Opening /sys/class/gpio/gpio18/value
Reading value
Closing /sys/class/gpio/gpio18/value

Current value of 18 is  0

Opening /sys/class/gpio/gpio18/value
Writing value:  0
Closing /sys/class/gpio/gpio18/value

Opening /sys/class/gpio/gpio18/value
Reading value
Closing /sys/class/gpio/gpio18/value

Current value of 18 is  0

Opening /sys/class/gpio/gpio18/value
Writing value:  1
Closing /sys/class/gpio/gpio18/value

Opening /sys/class/gpio/gpio18/value
Reading value
Closing /sys/class/gpio/gpio18/value

Current value of 18 is  1

Opening /sys/class/gpio/gpio18/direction
Writing direction: in
Closing /sys/class/gpio/gpio18/direction

Opening /sys/class/gpio/unexport
Writing pin number: 18
Closing /sys/class/gpio/unexport


>My experience with changing Beagle versions is fraught with disaster where the 
>change then breaks all sorts of stuff that was working.  This is why I'm 
>staying on 4.11 which is what the book uses and at least there's 1.25" of 
>paper all pointing to the same OS.  
>

        As I mentioned, uSD cards are getting cheap... Write a current OS image
and try it on a fresh 8+GB card (don't forget to resize the partition after
first boot). If it works, great. If it doesn't you still have your original
image to mess with. I'd suggest
https://elinux.org/Beagleboard:Latest-images-testing#Debian_10_.28Buster.29_LXQt
at a minimum, or
https://rcn-ee.net/rootfs/bb.org/testing/2021-04-19/buster-lxqt/ (to save
time bringing the image up-to-date -- note that the latter is Buster 10-9
while the shipping image https://beagleboard.org/latest-images is 10-3 and
a year out-of-date).

>So.   Should I just blindly, in the command line way, type all that stuff with 
>no idea of why I'm doing it, run it and if it works be happy? 
>
>As an example  the second link uses:
>chown -R nick:digital /sys/devices/gpio
>
>The first link above uses
>chown -R debian:root /sys/devices/gpio
>
>I think debian:root is what I want to do but I don't understand why the 
>nick:digital allows root access.  Why not nick:root?

        It doesn't... It changes the OWNER of /sys/devices/gpio to BE the user
"nick" (note -- it isn't changing the files under that directory!), while
also putting them into a group called "digital". As owner, "nick" then has
full privileges to the file, and any user in the "digital" group has group
privileges.

        The second, again, would change the OWNER to "debian" but put the file
into a group called "root". And, again, it doesn't change what is below
that directory. That's one reason for all those nasty udev rules -- the
sysfs is created at boot time, and the pin files are created when the pin
is exported. Those files would be created using whatever the kernel is
configured to use for permissions (likely root:root) unless over-written by
a udev rule.

        In a proper system (current BBB and R-Pi), the GPIO should be
root:gpio, and the user "debian" ("pi") set as a member of the gpio group
-- owned by root, with access to any member of the "gpio" group, and group
permissions should be RWX

pi@rpi3bplus-1:~/PI_GPIO$ ls -l /sys/class/gpio
total 0
-rwxrwx--- 1 root gpio 4096 May 12 11:05 export
lrwxrwxrwx 1 root gpio    0 May  3 11:30 gpiochip0 ->
../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root gpio    0 May  3 11:30 gpiochip504 ->
../../devices/platform/soc/soc:firmware/soc:firmware:expgpio/gpio/gpiochip504
-rwxrwx--- 1 root gpio 4096 May 12 11:05 unexport

vs

debian@beaglebone:~/BBB_IO$ ls -l /sys/class/gpio
total 0
--w--w---- 1 root gpio 4096 May 12 11:20 export
lrwxrwxrwx 1 root gpio    0 May 11 20:40 gpio10 ->
../../devices/platform/ocp/44e07000.gpio/gpiochip0/gpio/gpio10
        <SNIP>
lrwxrwxrwx 1 root gpio    0 May 11 20:40 gpiochip0 ->
../../devices/platform/ocp/44e07000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root gpio    0 May 11 20:40 gpiochip32 ->
../../devices/platform/ocp/4804c000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root gpio    0 May 11 20:40 gpiochip64 ->
../../devices/platform/ocp/481ac000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root gpio    0 May 11 20:40 gpiochip96 ->
../../devices/platform/ocp/481ae000.gpio/gpio/gpiochip96
--w--w---- 1 root gpio 4096 May 12 11:20 unexport


pi@rpi3bplus-1:~/PI_GPIO$ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev
spi i2c gpio lpadmin
pi@rpi3bplus-1:~/PI_GPIO$

        ... So, again... CAN you access GPIO 48 (from "debian", without using
sudo) from the SHELL itself?

-=-=-
debian@beaglebone:~/BBB_IO$ echo 48 > /sys/class/gpio/export
debian@beaglebone:~/BBB_IO$ cat /sys/class/gpio/gpio48/*
0                                                               <<<<< active_low
cat: /sys/class/gpio/gpio48/device: Is a directory
in                                                              <<<<< direction
none                                                    <<<<< edge (trigger)
sysfs                                                   <<<<< label
cat: /sys/class/gpio/gpio48/power: Is a directory
cat: /sys/class/gpio/gpio48/subsystem: Is a directory
1                                                               <<<<< value
debian@beaglebone:~/BBB_IO$ echo out > /sys/class/gpio/gpio48/direction
debian@beaglebone:~/BBB_IO$ cat /sys/class/gpio/gpio48/*
0
cat: /sys/class/gpio/gpio48/device: Is a directory
out
none
sysfs
cat: /sys/class/gpio/gpio48/power: Is a directory
cat: /sys/class/gpio/gpio48/subsystem: Is a directory
0
debian@beaglebone:~/BBB_IO$ echo 1 > /sys/class/gpio/gpio48/value
debian@beaglebone:~/BBB_IO$ cat /sys/class/gpio/gpio48/*
0
cat: /sys/class/gpio/gpio48/device: Is a directory
out
none
sysfs
cat: /sys/class/gpio/gpio48/power: Is a directory
cat: /sys/class/gpio/gpio48/subsystem: Is a directory
1
debian@beaglebone:~/BBB_IO$ echo 0 > /sys/class/gpio/gpio48/value
debian@beaglebone:~/BBB_IO$ cat /sys/class/gpio/gpio48/*
0
cat: /sys/class/gpio/gpio48/device: Is a directory
out
none
sysfs
cat: /sys/class/gpio/gpio48/power: Is a directory
cat: /sys/class/gpio/gpio48/subsystem: Is a directory
0
debian@beaglebone:~/BBB_IO$
-=-=-

        If you can do that, you do NOT have a permission problem for GPIO (SPI
is another matter) -- and the problem is either in PXL library or your
code. As I mentioned previously, your code may need to EXPORT the GPIOs
before you can pass the pins to your display driver call. PXL appears to
assume the two GPIOs are already exported with direction set to OUT.


*************************************

        I would also like to point out that
https://beagleboard.org/Support/bone101 indicates that SPI1 (pins P9_28,
P9_29, P9_31) are used by the HDMI system -- in order to gain use of SPI1
you may have to disable the HDMI device tree overlay (besides maybe needing
to add a SPI1 overlay) in /boot/uEnv.txt... say goodbye to using a direct
monitor/keyboard/mouse on the BBB; you'd have to export the display to some
external X-server and use its monitor/keyboard/mouse.

###Additional custom capes
#uboot_overlay_addr4=/lib/firmware/<file4>.dtbo <<<<<<
#uboot_overlay_addr5=/lib/firmware/<file5>.dtbo
#uboot_overlay_addr6=/lib/firmware/<file6>.dtbo
#uboot_overlay_addr7=/lib/firmware/<file7>.dtbo
###
###Custom Cape
#dtb_overlay=/lib/firmware/<file8>.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
#disable_uboot_overlay_emmc=1
#disable_uboot_overlay_video=1          <<<<<<<
#disable_uboot_overlay_audio=1
#disable_uboot_overlay_wireless=1
#disable_uboot_overlay_adc=1
###

debian@beaglebone:~/BBB_IO$ ls /lib/firmware/*SPI1*
/lib/firmware/ADAFRUIT-SPI1-00A0.dtbo           ???????????
/lib/firmware/PB-SPI1-ETH-WIZ-CLICK.dtbo
/lib/firmware/BB-LCD-ADAFRUIT-18-SPI1-00A0.dtbo
/lib/firmware/PB-SPI1-MICROSD-CLICK.dtbo
/lib/firmware/BB-LCD-ADAFRUIT-24-SPI1-00A0.dtbo
/lib/firmware/PB-SPI1-OLEDB-CLICK.dtbo
/lib/firmware/BB-SPI1-LTC2947-00A0.dtbo
/lib/firmware/PB-SPI1-OLEDC-CLICK.dtbo
/lib/firmware/PB-MCP2515-SPI1.dtbo /lib/firmware/PB-SPI1-RTC-5-CLICK.dtbo
/lib/firmware/PB-SPI1-7SEG-TECHLAB-CAPE.dtbo
/lib/firmware/PB-SPI1-THUNDER-CLICK.dtbo
/lib/firmware/PB-SPI1-ETH-CLICK.dtbo
debian@beaglebone:~/BBB_IO$

        Could be that just disabling the HDMI overlay will make SPI1 available.


-- 
Dennis L Bieber

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/k8on9gd9tbk7v4t3qd2rdbhi4h3ih81bi5%404ax.com.

Reply via email to