On Wed, 12 May 2021 10:54:12 -0700, in gmane.comp.hardware.beagleboard.user
"John Dammeyer" <johnd-5o6ditlojsohvde0pjs...@public.gmane.org> wrote:


>Now let's look at groups.
>debian@ebb:~/lazarus/pxl/Samples/FreePascal/SingleBoard/Generic/Blinky$ ls -l 
>Blinky
>-rwxr-xr-x 1 debian debian 270880 May 11 15:08 Blinky
>
>Hmmm.  Not part of the gpio group
>
        It shouldn't be... That line says the file "Blinky" is owned by user
"debian" and is part of the group "debian"... And group/other have
read/execute permission on the file.

        You /run/ the file from your account, and your account is a member of
"gpio" group.

>debian@ebb:~/lazarus/pxl/Samples/FreePascal/SingleBoard/Generic/Blinky$ 
>./Blinky
>An unhandled exception occurred at $000282E0:
>                                             ESysfsFileOpenWrite: Cannot open 
> file </sys/class/gpio/gpio48/direction> for writing.
>                      $000282E0  WRITETEXTTOFILE,  line 68 of 
> /home/debian/lazarus/pxl/Source/PXL.Sysfs.Types.pas
>     $00021CB4  TSYSFSGPIO__SETPINMODE,  line 200 of 
> /home/debian/lazarus/pxl/Source/PXL.Sysfs.GPIO.pas
>
>So let’s add it to the gpio group:      
>                                                                               
>                   
> debian@ebb:~/lazarus/pxl/Samples/FreePascal/SingleBoard/Generic/Blinky$ chgrp 
> gpio Blinky

        Which only means users with group "gpio" membership now have access to
the file. It does nothing for what permissions the file itself is running
under -- those are defined by the user group membership.

        Unfortunately, the PXL source doesn't return the actual error code
which fpGetErrno would report; it raises that exception for any error code
(the help systems says "negative value if there was an error" whereas
fpwrite explicitly says -1 for an error; in either case, having fpgeterrno
value could help pin down what the real problem is).

  Handle := fpopen(FileName, O_WRONLY);
  if Handle < 0 then
    raise ESysfsFileOpenWrite.Create(Format(SCannotOpenFileForWriting,
[FileName]));

        I see that setpinmode does do an export of the pin if it is not already
exported... As my tests with Ada program show, I needed a delay (used one
second I believe) after doing an export or I'd get a similar problem with
opening the pin's files. However -- "not already exported" is PXL's
concept, not reality. PXL maintains a bit-map of "exported" pins, meaning
pins IT has done an export for...

function TSysfsGPIO.IsPinExported(const Pin: TPinIdentifier): Boolean;
begin
  Result := IsPinBitSet(Pin, ExportedBitmask);
end;

        This means the every time you run the program, it starts with the
assumption that the pin is NOT exported, and issues an export operation. I
suspect -- based on my timing issues -- that 

procedure TSysfsGPIO.ExportPin(const Pin: TPinIdentifier);
begin
  TryWriteTextToFile(FExportFileName, IntToStr(Pin));
  SetPinBit(Pin, ExportedBitmask);
end;               

needs to have some sleep/delay placed in it before it returns... say

        Sleep(1000);

for a 1 second delay (if that runs you could try fine-tuning downwards
until it fails, then add a safety margin to the last working value).
>After every compile I could run the application from the command line with a 
>sudo but that's not the solution I need.  Nor to each time change the 
>permissions at the command line level.  If we can figure out what the 
>attributes of the program are supposed to be so it runs without the sudo then 
>I can potentially change something with the Lazarus IDE or Free Pascal 
>Compiler to properly configure the executable.  But at the moment I can't get 
>the executable to run.

        The program attributes should only be a need to have eXecute permission
on thre file. Everything else should be defined by the /user account/
membership and the permissions of the target files.

        I don't know why "sudo" doesn't have the problem, unless, again, it is
a timing matter -- and immediately after the export the direction file
starts with root:root and needs time to be changed to root:gpio. If so,
then sudo would be owner of root and not tied to the group access... and if
so, adding a delay immediately after the export write in PXL may suffice.
After all, the program, as I understand the calling sequences and tests, IS
WRITING TO /sys/class/gpio/export without a problem.


>debian@ebb:/sys/class/gpio/gpio48$ ls /dev/spi*
>/dev/spidev1.0  /dev/spidev1.1  /dev/spidev2.0  /dev/spidev2.1
>
>/dev/spi:
>0.0  0.1  1.0  1.1
>

        Try ls -l               This appears to be another change as mine map 
1:1
(another reason to create an current Debian 10/buster uSD card). I wouldn't
be surprised if Stretch maps 0.0 to spidev2.0, while 1.0 goes to spidev1.0.

debian@beaglebone:~$ ls -l /dev/spi*
crw-rw---- 1 root spi  153, 0 May 12 12:46 /dev/spidev0.0
crw-rw---- 1 root spi  153, 1 May 12 12:46 /dev/spidev0.1
crw-rw---- 1 root spi  153, 2 May 12 15:58 /dev/spidev1.0
crw-rw---- 1 root spi  153, 3 May 12 15:58 /dev/spidev1.1

/dev/spi:
total 0
lrwxrwxrwx 1 root root 12 May 12 12:46 0.0 -> ../spidev0.0
lrwxrwxrwx 1 root root 12 May 12 12:46 0.1 -> ../spidev0.1
lrwxrwxrwx 1 root root 12 May 12 15:58 1.0 -> ../spidev1.0
lrwxrwxrwx 1 root root 12 May 12 15:58 1.1 -> ../spidev1.1
debian@beaglebone:~$

        A year old, so might be based on Stretch is
https://arcanesciencelab.wordpress.com/2020/01/14/the-correct-way-to-enable-spi-ports-on-the-beaglebone-black/

        On that page they state 
"""
# For SPI1, /dev/spidev1.#
#
config-pin p9_17 spi_cs
config-pin p9_18 spi
config-pin p9_21 spi
config-pin p9_22 spi_sclk

# For SPI0, /dev/spidev2.#
#
config-pin p9_28 spi_cs
config-pin p9_29 spi
config-pin p9_30 spi
config-pin p9_31 spi_sclk
"""

Note the cross -- spidev2 is SPI0. Hmmm, and Molloy states that SPI0 is the
one not available normally...

        Confusingly https://beagleboard.org/Support/bone101 shows SPI0 on pins
17/18/21/22, and SPI1 is on 19/20/28/29/30/31/42 -- chart may be a bit in
error as it shows two SPI1_CS0 and two _CS1 (19 and 20 seem the anomaly --
they are only assigned to I2C, SPI, and UART, otherwise blank) Maybe
https://microcontrollerslab.com/beaglebone-black-pinout-pin-configuration-features-applications/
is more trustworthy. Note that it puts SPI0 on 17-22, and SPI1 on 28-31



-- 
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/ak7o9g5q4imust07amcp23d9dvisn0l6if%404ax.com.

Reply via email to