Собрал библиотеку 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 решение проблемы не нашел.
А ls -al /dev что показал? Для кого доступны устройства? В Вашем случае, как понимаю интересует SPI, I2C, GPIO. Будет понятно для кого и что доступно. А после изменения доступа надо обновить сессию.
Код (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 сессию обновлял.
Вот смотрите что Вы показали Код (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. Смотрите сами.
О_о Подскажи, как бинарник в автозагрузку заправить? Читал, читал тырнеты- как- то мудрено все( Уровни запуска надо разруливать. Сейчас через screen сделан запуск - но это неудобно. В маздаях проще.
Доброго времени суток! ...всё, что бутет вставлено в конце файла /etc/rc.local (в некоторых дистрибутивах системы может быть и /etc/init.d/rc.local но всегда в /etc) бутет стартовать при запуске. И это будет от ROOT. Для запуска от имени пользователя смотрите пример постом выше... как раз в этом сасмом rc.local. Запуск чего бы то ни было от имени конкретного пользователя когда-то сам решал (спрашивал) тут: https://www.moxa.ru/forum/index.php?/topic/6748-автозапуск-от-пользователя-в-ia240/
не надо ничего разруливать. Пихаешь загрузку в файл rc.local - это аналог autoexec.bat в ДОСе %) запуск от имени пользователя делается через su, например su --command="mount /u" b707 - монтирование раздела /u под правами юзера b707
Внутри что писать? Я прописал полный путь до бинарника - не работает. Там же ещё есть разные уровни, которые грузятся каждый в своё время. Я пока через скрин сижу - удобно, потому как вывод в файл и одновременно на экран, но автозапуска нет
Делал так: Код (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 &
Не надо, бинарник можно вписывать сразу в rc.local. Если у тебя не работает - значит что-то не так с правами. Когда вручную этот бинарник запускаешь - работает?
В rc.local добавьте перед звпуском бинарника... ну хоть это: Код (Text): chmod 777 /dev/spidev0.0 chmod 777 /dev/spidev0.1 или как там SPI обзывается... уточните этим: Код (Text): ls -al /dev И будет SPI доступен всем... ну или включите пользователя в группу SPI.
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 чувствителен к переносам и пробелам и табуляции Так что надо вручную проверить Компилятор выбираю раскомментировав одну из верхних строчек
ну ты спросил... "make это целый мир" Об make толстенные книжки написаны. Ищи в Гугле что-нибудь типа "первые шаги с make"
Да понятно, что исполнится. Я имел в виду, что для этой операции нужны рут-права, а значит вместо этого можно сразу запустить бинарник и он должен работать