Собрал библиотеку 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. Будет понятно для кого и что доступно. А после изменения доступа надо обновить сессию.
Вот смотрите что Вы показали Код (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"
Да понятно, что исполнится. Я имел в виду, что для этой операции нужны рут-права, а значит вместо этого можно сразу запустить бинарник и он должен работать