nRF24L01 без root, помогите

Тема в разделе "Raspberry Pi", создана пользователем SNAK84, 5 май 2018.

  1. SNAK84

    SNAK84 Нерд

    Собрал библиотеку http://tmrh20.github.io/RF24
    Скомпилировал пример, но возникла проблема запуска от пользователя.

    От root все работает, а при запуске от пользователя возникает ошибка

    Пользователю добавил следующие группы:

    Код (Bash):
    uid=1000(pi) gid=1000(pi) группы=1000(pi),0(root),108(netdev),999(spi),998(i2c),997(gpio)
    Код (Bash):
    RF24/examples/scanner/
    Ошибка сегментирования
    В google решение проблемы не нашел.
     
  2. Igor68

    Igor68 Гуру

    А ls -al /dev что показал? Для кого доступны устройства? В Вашем случае, как понимаю интересует SPI, I2C, GPIO. Будет понятно для кого и что доступно. А после изменения доступа надо обновить сессию.
     
  3. SNAK84

    SNAK84 Нерд


    Код (Bash):
    crw-r--r--  1 root root     10, 235 май  5 00:17 autofs
    drwxr-xr-x  2 root root         640 май  5 00:17 block
    crw-------  1 root root     10, 234 май  5 00:17 btrfs-control
    drwxr-xr-x  3 root root          60 янв  1  1970 bus
    crw-------  1 root root     10,  63 май  5 00:17 cachefiles
    drwxr-xr-x  2 root root        2480 май  5 00:17 char
    crw-------  1 root root      5,   1 май  5 00:19 console
    crw-------  1 root root     10,  62 май  5 00:17 cpu_dma_latency
    crw-------  1 root root     10, 203 май  5 00:17 cuse
    drwxr-xr-x  7 root root         140 май  5 00:17 disk
    crw-rw----  1 root video    29,   0 май  5 00:17 fb0
    lrwxrwxrwx  1 root root          13 ноя  3  2016 fd -> /proc/self/fd
    crw-rw-rw-  1 root root      1,   7 май  5 00:17 full
    crw-rw-rw-  1 root root     10, 229 май  5 00:17 fuse
    crw-rw----  1 root gpio    254,   0 май  5 00:17 gpiochip0
    crw-rw----  1 root gpio    254,   1 май  5 00:17 gpiochip1
    crw-rw----  1 root gpio    254,   2 май  5 00:17 gpiochip2
    crw-rw----  1 root gpio    248,   0 май  5 00:17 gpiomem
    crw-------  1 root root     10, 183 май  5 00:17 hwrng
    crw-rw----  1 root i2c      89,   1 май  5 00:17 i2c-1
    lrwxrwxrwx  1 root root          25 ноя  3  2016 initctl -> /run/systemd/initctl/fifo
    drwxr-xr-x  2 root root          60 янв  1  1970 input
    crw-r--r--  1 root root      1,  11 май  5 00:17 kmsg
    lrwxrwxrwx  1 root root          28 ноя  3  2016 log -> /run/systemd/journal/dev-log
    brw-rw----  1 root disk      7,   0 май  5 00:17 loop0
    brw-rw----  1 root disk      7,   1 май  5 00:17 loop1
    brw-rw----  1 root disk      7,   2 май  5 00:17 loop2
    brw-rw----  1 root disk      7,   3 май  5 00:17 loop3
    brw-rw----  1 root disk      7,   4 май  5 00:17 loop4
    brw-rw----  1 root disk      7,   5 май  5 00:17 loop5
    brw-rw----  1 root disk      7,   6 май  5 00:17 loop6
    brw-rw----  1 root disk      7,   7 май  5 00:17 loop7
    crw-rw----  1 root disk     10, 237 май  5 00:17 loop-control
    drwxr-xr-x  2 root root          60 май  5 00:17 mapper
    crw-r-----  1 root kmem      1,   1 май  5 00:17 mem
    crw-------  1 root root     10,  59 май  5 00:17 memory_bandwidth
    brw-rw----  1 root disk    179,   0 май  5 00:17 mmcblk0
    brw-rw----  1 root disk    179,   1 май  5 00:17 mmcblk0p1
    brw-rw----  1 root disk    179,   2 май  5 00:17 mmcblk0p2
    brw-rw----  1 root disk    179,   5 май  5 00:17 mmcblk0p5
    brw-rw----  1 root disk    179,   6 май  5 00:17 mmcblk0p6
    brw-rw----  1 root disk    179,   7 май  5 00:17 mmcblk0p7
    drwxrwxrwt  2 root root          40 янв  1  1970 mqueue
    drwxr-xr-x  2 root root          60 май  5 00:17 net
    crw-------  1 root root     10,  61 май  5 00:17 network_latency
    crw-------  1 root root     10,  60 май  5 00:17 network_throughput
    crw-rw-rw-  1 root root      1,   3 май  5 00:17 null
    crw-------  1 root root    108,   0 май  5 00:17 ppp
    crw-rw-rw-  1 root tty       5,   2 май  5 16:32 ptmx
    drwxr-xr-x  2 root root           0 ноя  3  2016 pts
    brw-rw----  1 root disk      1,   0 май  5 00:17 ram0
    brw-rw----  1 root disk      1,   1 май  5 00:17 ram1
    brw-rw----  1 root disk      1,  10 май  5 00:17 ram10
    brw-rw----  1 root disk      1,  11 май  5 00:17 ram11
    brw-rw----  1 root disk      1,  12 май  5 00:17 ram12
    brw-rw----  1 root disk      1,  13 май  5 00:17 ram13
    brw-rw----  1 root disk      1,  14 май  5 00:17 ram14
    brw-rw----  1 root disk      1,  15 май  5 00:17 ram15
    brw-rw----  1 root disk      1,   2 май  5 00:17 ram2
    brw-rw----  1 root disk      1,   3 май  5 00:17 ram3
    brw-rw----  1 root disk      1,   4 май  5 00:17 ram4
    brw-rw----  1 root disk      1,   5 май  5 00:17 ram5
    brw-rw----  1 root disk      1,   6 май  5 00:17 ram6
    brw-rw----  1 root disk      1,   7 май  5 00:17 ram7
    brw-rw----  1 root disk      1,   8 май  5 00:17 ram8
    brw-rw----  1 root disk      1,   9 май  5 00:17 ram9
    crw-rw-rw-  1 root root      1,   8 май  5 00:17 random
    drwxr-xr-x  2 root root          60 янв  1  1970 raw
    crw-rw-r--  1 root netdev   10,  58 май  5 00:17 rfkill
    lrwxrwxrwx  1 root root           7 май  5 00:17 serial1 -> ttyAMA0
    drwxrwxrwt  2 root root          40 ноя  3  2016 shm
    drwxr-xr-x  3 root root         160 май  5 00:17 snd
    crw-rw----  1 root spi     153,   0 май  5 00:17 spidev0.0
    crw-rw----  1 root spi     153,   1 май  5 00:17 spidev0.1
    lrwxrwxrwx  1 root root          15 ноя  3  2016 stderr -> /proc/self/fd/2
    lrwxrwxrwx  1 root root          15 ноя  3  2016 stdin -> /proc/self/fd/0
    lrwxrwxrwx  1 root root          15 ноя  3  2016 stdout -> /proc/self/fd/1
    crw-rw-rw-  1 root tty       5,   0 май  5 00:17 tty
    crw--w----  1 root tty       4,   0 май  5 00:17 tty0
    crw--w----  1 root tty       4,   1 май  5 00:17 tty1
    crw--w----  1 root tty       4,  10 май  5 00:17 tty10
    crw--w----  1 root tty       4,  11 май  5 00:17 tty11
    crw--w----  1 root tty       4,  12 май  5 00:17 tty12
    crw--w----  1 root tty       4,  13 май  5 00:17 tty13
    crw--w----  1 root tty       4,  14 май  5 00:17 tty14
    crw--w----  1 root tty       4,  15 май  5 00:17 tty15
    crw--w----  1 root tty       4,  16 май  5 00:17 tty16
    crw--w----  1 root tty       4,  17 май  5 00:17 tty17
    crw--w----  1 root tty       4,  18 май  5 00:17 tty18
    crw--w----  1 root tty       4,  19 май  5 00:17 tty19
    crw--w----  1 root tty       4,   2 май  5 00:17 tty2
    crw--w----  1 root tty       4,  20 май  5 00:17 tty20
    crw--w----  1 root tty       4,  21 май  5 00:17 tty21
    crw--w----  1 root tty       4,  22 май  5 00:17 tty22
    crw--w----  1 root tty       4,  23 май  5 00:17 tty23
    crw--w----  1 root tty       4,  24 май  5 00:17 tty24
    crw--w----  1 root tty       4,  25 май  5 00:17 tty25
    crw--w----  1 root tty       4,  26 май  5 00:17 tty26
    crw--w----  1 root tty       4,  27 май  5 00:17 tty27
    crw--w----  1 root tty       4,  28 май  5 00:17 tty28
    crw--w----  1 root tty       4,  29 май  5 00:17 tty29
    crw--w----  1 root tty       4,   3 май  5 00:17 tty3
    crw--w----  1 root tty       4,  30 май  5 00:17 tty30
    crw--w----  1 root tty       4,  31 май  5 00:17 tty31
    crw--w----  1 root tty       4,  32 май  5 00:17 tty32
    crw--w----  1 root tty       4,  33 май  5 00:17 tty33
    crw--w----  1 root tty       4,  34 май  5 00:17 tty34
    crw--w----  1 root tty       4,  35 май  5 00:17 tty35
    crw--w----  1 root tty       4,  36 май  5 00:17 tty36
    crw--w----  1 root tty       4,  37 май  5 00:17 tty37
    crw--w----  1 root tty       4,  38 май  5 00:17 tty38
    crw--w----  1 root tty       4,  39 май  5 00:17 tty39
    crw--w----  1 root tty       4,   4 май  5 00:17 tty4
    crw--w----  1 root tty       4,  40 май  5 00:17 tty40
    crw--w----  1 root tty       4,  41 май  5 00:17 tty41
    crw--w----  1 root tty       4,  42 май  5 00:17 tty42
    crw--w----  1 root tty       4,  43 май  5 00:17 tty43
    crw--w----  1 root tty       4,  44 май  5 00:17 tty44
    crw--w----  1 root tty       4,  45 май  5 00:17 tty45
    crw--w----  1 root tty       4,  46 май  5 00:17 tty46
    crw--w----  1 root tty       4,  47 май  5 00:17 tty47
    crw--w----  1 root tty       4,  48 май  5 00:17 tty48
    crw--w----  1 root tty       4,  49 май  5 00:17 tty49
    crw--w----  1 root tty       4,   5 май  5 00:17 tty5
    crw--w----  1 root tty       4,  50 май  5 00:17 tty50
    crw--w----  1 root tty       4,  51 май  5 00:17 tty51
    crw--w----  1 root tty       4,  52 май  5 00:17 tty52
    crw--w----  1 root tty       4,  53 май  5 00:17 tty53
    crw--w----  1 root tty       4,  54 май  5 00:17 tty54
    crw--w----  1 root tty       4,  55 май  5 00:17 tty55
    crw--w----  1 root tty       4,  56 май  5 00:17 tty56
    crw--w----  1 root tty       4,  57 май  5 00:17 tty57
    crw--w----  1 root tty       4,  58 май  5 00:17 tty58
    crw--w----  1 root tty       4,  59 май  5 00:17 tty59
    crw--w----  1 root tty       4,   6 май  5 00:17 tty6
    crw--w----  1 root tty       4,  60 май  5 00:17 tty60
    crw--w----  1 root tty       4,  61 май  5 00:17 tty61
    crw--w----  1 root tty       4,  62 май  5 00:17 tty62
    crw--w----  1 root tty       4,  63 май  5 00:17 tty63
    crw--w----  1 root tty       4,   7 май  5 00:17 tty7
    crw--w----  1 root tty       4,   8 май  5 00:17 tty8
    crw--w----  1 root tty       4,   9 май  5 00:17 tty9
    crw-rw----  1 root dialout 204,  64 май  5 00:17 ttyAMA0
    crw-------  1 root root      5,   3 май  5 00:17 ttyprintk
    crw-------  1 root root     10, 239 май  5 00:17 uhid
    crw-------  1 root root     10, 223 май  5 00:17 uinput
    crw-rw-rw-  1 root root      1,   9 май  5 00:17 urandom
    crw-rw----  1 root video   245,   0 май  5 00:17 vchiq
    crw-rw----  1 root video   249,   0 май  5 00:17 vcio
    crw-------  1 root root    250,   0 май  5 00:17 vc-mem
    crw-rw----  1 root tty       7,   0 май  5 00:17 vcs
    crw-rw----  1 root tty       7,   1 май  5 00:17 vcs1
    crw-rw----  1 root tty       7,   2 май  5 00:17 vcs2
    crw-rw----  1 root tty       7,   3 май  5 00:17 vcs3
    crw-rw----  1 root tty       7,   4 май  5 00:17 vcs4
    crw-rw----  1 root tty       7,   5 май  5 00:17 vcs5
    crw-rw----  1 root tty       7,   6 май  5 00:17 vcs6
    crw-rw----  1 root tty       7, 128 май  5 00:17 vcsa
    crw-rw----  1 root tty       7, 129 май  5 00:17 vcsa1
    crw-rw----  1 root tty       7, 130 май  5 00:17 vcsa2
    crw-rw----  1 root tty       7, 131 май  5 00:17 vcsa3
    crw-rw----  1 root tty       7, 132 май  5 00:17 vcsa4
    crw-rw----  1 root tty       7, 133 май  5 00:17 vcsa5
    crw-rw----  1 root tty       7, 134 май  5 00:17 vcsa6
    crw-rw----  1 root video   246,   0 май  5 00:17 vcsm
    crw-------  1 root root     10, 137 май  5 00:17 vhci
    crw-------  1 root root     10, 130 май  5 00:17 watchdog
    crw-------  1 root root    252,   0 май  5 00:17 watchdog0
    crw-rw-rw-  1 root root      1,   5 май  5 00:17 zero
     
    сессию обновлял.
     
  4. Igor68

    Igor68 Гуру

    Вот смотрите что Вы показали
    Код (Text):

    crw-rw----  1 root gpio    254,   0 май  5 00:17 gpiochip0
    crw-rw----  1 root gpio    254,   1 май  5 00:17 gpiochip1
    crw-rw----  1 root gpio    254,   2 май  5 00:17 gpiochip2
    crw-rw----  1 root i2c      89,   1 май  5 00:17 i2c-1
    crw-rw----  1 root spi     153,   0 май  5 00:17 spidev0.0
    crw-rw----  1 root spi     153,   1 май  5 00:17 spidev0.1
     
    Вот одно из решений... возможно и не верное (в смысле защиты доступа). Это разрешить доступ к устройству... для всех пользователей при включении питания и/или запуске/перезапуске системы прописав правила в файл /etc/rc.local
    напримертак:
    Код (Text):

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi

    #это для моего RAMDISK - только в моём случае
    /etc/init.d/ramdisk restart
    #это для монтирования RAMDISK - только в моём случае
    mount --bind /mnt/ram0 /home/httpd/ramdisk
    #что-то запускаю при старте - только в моём случае
    su www-data -c /home/httpd/bash/wwstart &
    #запускаю прокси - только в моём случае
    /etc/init.d/3proxyinit start

    #а это разрешение доступа к устройству например gpiochip0
    chmod 777 /dev/gpiochip0
    exit 0

     
    ну и после этого будет:
    Код (Text):

    crwxrwxrwx  1 root root  254,  0 May  3 18:54 gpiochip0
     
    а было:
    Код (Text):

    crw-------  1 root root  254,  0 May  3 18:54 gpiochip0
     
    Одним словом теперь к нему обращаться можно всем.
    Как Вы обратили внимание там пользователь root и группа root.
    С SPI несколько по другому... там
    crw-rw---- 1 root spi 153, 0 май 5 00:17 spidev0.0
    Второй вариант это добавить пользователя в группу... допустим spi, i2c. Только для GPIO группа root. Смотрите сами.
     
  5. parovoZZ

    parovoZZ Гуру

    О_о
    Подскажи, как бинарник в автозагрузку заправить? Читал, читал тырнеты- как- то мудрено все( Уровни запуска надо разруливать. Сейчас через screen сделан запуск - но это неудобно. В маздаях проще.
     
  6. Igor68

    Igor68 Гуру

    Доброго времени суток!
    ...всё, что бутет вставлено в конце файла /etc/rc.local (в некоторых дистрибутивах системы может быть и /etc/init.d/rc.local но всегда в /etc) бутет стартовать при запуске. И это будет от ROOT. Для запуска от имени пользователя смотрите пример постом выше... как раз в этом сасмом rc.local.
    Запуск чего бы то ни было от имени конкретного пользователя когда-то сам решал (спрашивал) тут:
    https://www.moxa.ru/forum/index.php?/topic/6748-автозапуск-от-пользователя-в-ia240/
     
  7. b707

    b707 Гуру

    не надо ничего разруливать. Пихаешь загрузку в файл rc.local - это аналог autoexec.bat в ДОСе %)
    запуск от имени пользователя делается через su, например

    su --command="mount /u" b707
    - монтирование раздела /u под правами юзера b707
     
    Igor68 нравится это.
  8. parovoZZ

    parovoZZ Гуру

    Внутри что писать? Я прописал полный путь до бинарника - не работает. Там же ещё есть разные уровни, которые грузятся каждый в своё время. Я пока через скрин сижу - удобно, потому как вывод в файл и одновременно на экран, но автозапуска нет
     
  9. Igor68

    Igor68 Гуру

    Делал так:
    Код (Text):

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    #ram disk
    /etc/init.d/ramdisk

    mkdir /mnt/ramdisk/httpd
    mount --bind /mnt/ramdisk/httpd /home/httpd/ramdisk
    chmod 777 /home/httpd/ramdisk

    #запуск элементов сессии www-data
    /home/httpd/start/tstart&

    exit 0
     
    А это то, что мне надо было запустить:
    Код (Text):

    #!/bin/bash
    #

    ########################
    # Старт по telnet
    # для сессии www-data
    # запуск с опцией "run &"
    ########################

    ########################
    #  29.05.2017  - редактирование для автозапуска при включении
    #
    ########################

    #запуск процессов индукционной печи
    function _telnet_session()
    {
      (
      sleep 1
      echo "www-data" #login
      sleep 1
      echo "www-data" #password
      sleep 1
      ##############################
      #собственно запуск элементов
      ##############################
      #система охлаждения и контроля печи ABP
      echo "cd /home/httpd/cool"
      sleep 1
      echo "./cool.sh run &"
      #система контроля станции катодной защиты
      echo "cd /home/httpd/catserver"
      sleep 1
      echo "./workscs.sh &"
      #система водоподготовки
      echo "cd /home/httpd/swc"
      sleep 1
      echo "./swcwork.sh &"
      #логирование напряжения питания
      echo "cd /home/httpd/powercontrol"
      sleep 1
      echo "./powerlog.sh start &"
      ((loop = 1))
      while ( ((loop > 0)) )
      do
      sleep 1
      done
      #
      ) | telnet 127.0.0.1  
    }

    #старт
    _telnet_session

     
    Тут я делал чеерез Telnet... но наверное разумнее так:
    Код (Text):

    su www-data -c /home/httpd/bash/wwstart &
     
     
  10. parovoZZ

    parovoZZ Гуру

    Хм. Мне надо скрипт написать для запуска бинарника, а уже потом этот скрипт прописать в rc.local?
     
  11. b707

    b707 Гуру

    Не надо, бинарник можно вписывать сразу в rc.local.
    Если у тебя не работает - значит что-то не так с правами. Когда вручную этот бинарник запускаешь - работает?
     
  12. parovoZZ

    parovoZZ Гуру

    Из скрина от su - работает. Он в интерфейс SPI лезет, поэтому с рутовыми правами.
     
  13. Igor68

    Igor68 Гуру

    В rc.local добавьте перед звпуском бинарника... ну хоть это:
    Код (Text):

    chmod 777 /dev/spidev0.0
    chmod 777 /dev/spidev0.1
     
    или как там SPI обзывается... уточните этим:
    Код (Text):

    ls -al /dev
     
    И будет SPI доступен всем... ну или включите пользователя в группу SPI.
     
  14. b707

    b707 Гуру

    системный rc.local от рута и выполняется... обычно. По крайней мере от su точно должен запускаться
     
  15. b707

    b707 Гуру

    ну блин... если это исполнится, значит нужные права уже есть и бинарник должен срабатывать и так
     
  16. Igor68

    Igor68 Гуру

    Ещё как исполнится... Уже много лет так делаю на всех линуксах.
     
  17. parovoZZ

    parovoZZ Гуру

    Раз уж у нас такая полемика, то кто скажет, как make файл создавать для GCC?
     
  18. Igor68

    Igor68 Гуру

    https://habr.com/post/155201/
    Для таких влпросов гугл и существует... сам лично пользуюсь шаблоном:
    Код (Text):

    ###########################
    # Simple Generic Makefile #
    ###########################
    #для андроид Terminal IDE
    #CC=terminal-gcc
    #для любой машины
    CC=gcc
    #для IA240
    #PREFIXPATH=/usr/local/arm-linux/bin
    #CC=$(PREFIXPATH)/arm-linux-gcc

    #STRIP=$(PREFIXPATH)/arm-linux-strip
    #NAME=proxy


    CFLAGS=-c -Wall
    LDFLAGS=-lpthread #подключил библиотеку потоков

    #SOURCES=*.c
    SOURCES=$(shell ls *.c)  #все файлы Си в текущей директории

    OBJECTS=$(SOURCES:.c=.o)
    EXECUTABLE=work    #имя будущей программы

    all: $(SOURCES) $(EXECUTABLE)

    $(EXECUTABLE): $(OBJECTS)
      $(CC) $(LDFLAGS) $(OBJECTS) -o $@

    .c.o:
      $(CC) $(CFLAGS) $< -o $@

    install:
      install -m 0755 $(EXECUTABLE) $(HOME)/local/bin

    clean:
      rm -rf *o $(EXECUTABLE)

     
    Внимание Makefile чувствителен к переносам и пробелам и табуляции
    Так что надо вручную проверить
    Компилятор выбираю раскомментировав одну из верхних строчек
     
  19. b707

    b707 Гуру

    ну ты спросил... "make это целый мир" :)
    Об make толстенные книжки написаны.
    Ищи в Гугле что-нибудь типа "первые шаги с make"
     
  20. b707

    b707 Гуру

    Да понятно, что исполнится. Я имел в виду, что для этой операции нужны рут-права, а значит вместо этого можно сразу запустить бинарник и он должен работать
     
    Igor68 нравится это.