jenya7 0 Posted December 1, 2019 (edited) · Report post ls /dev выдает serial0 и ttyAMA0 пробую открыть uart_fd = open("/dev/ttyAMA0", O_RDWR); или uart_fd = open("/dev/serial0", O_RDWR); в обоих случаях получаю -1. что не так? Edited December 1, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post man open, раздел "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ". После этого man errno/perror/strerror. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 (edited) · Report post 40 minutes ago, arhiv6 said: man open, раздел "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ". После этого man errno/perror/strerror. получаю errno = 13 - EACCES 13 /* Permission denied */. странно. скажем я открываю SPI - file = open("/dev/spidev0.0", O_RDWR) и не получаю Permission denied Edited December 1, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post Может просто у пользователя, из-под которого запускается программа, нет прав доступа к этому устройству? Сделайте ls -l /dev/serial0 /dev/ttyAMA0 /dev/spidev0.0 и сравните, чем они отличаются. Ну или для пробы дайте всем пользователям полные права на эти устройства и попробуйте открыть ещё раз: chmod +666 /dev/serial0 /dev/ttyAMA0 Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 (edited) · Report post 8 minutes ago, arhiv6 said: Может просто у пользователя, из-под которого запускается программа, нет прав доступа к этому устройству? Сделайте ls -l /dev/serial0 /dev/ttyAMA0 /dev/spidev0.0 и сравните, чем они отличаются. Ну или для пробы дайте всем полные права на эти устройства и попробуйте открыть ещё раз: chmod +666 /dev/serial0 /dev/ttyAMA0 получил 1 root root 7 /dev/serial0 -> ttyAMA0 1 root spi 153 0 /dev/spidev0.0 вроде и тот и другой root а почему +666? Edited December 1, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post root - это владелец, а вот 7 и 153 - это уже права доступа к файлу. 7 говорит о том, что читать/писать/выполнять может только владелец (root). Ваша рограмма из-под какого пользователя запускается? 14 минут назад, jenya7 сказал: а почему +666? 666 (-rw-rw-rw-) Все пользователи могут читать и редактировать, с той же вики: Chmod#Популярные_значения Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 (edited) · Report post 10 minutes ago, arhiv6 said: root - это владелец, а вот 7 и 153 - это уже права доступа к файлу. 7 говорит о том, что читать/писать/выполнять может только владелец (root). Ваша рограмма из-под какого пользователя запускается? 666 (-rw-rw-rw-) Все пользователи могут читать и редактировать а в таблице 777 (-rwxrwxrwx) - Каждый пользователь может читать, редактировать и запускать на выполнение. мне ведь и запускать надо ? Edited December 1, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post Можно и 777, но зачем вам права на его выполнение? Это же не программа или скрипт какой-нибудь, всё равно его не запустить. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 (edited) · Report post 5 minutes ago, arhiv6 said: Можно и 777, но зачем вам права на его выполнение? Это же не программа или скрипт какой-нибудь, всё равно его не запустить. у меня программа написанная в QT. я там работаю с модулем. хотя если это работа с файлом то может чтение\запись достаточно? Edited December 1, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post Ваша программа - исполняемый файл, я для неё, если посмотрите её права, стоит флаг на запуск (x). Но файл устройства (/dev/bla-bla-bla) - вы же его не выполняете? Он из вашей программы открывается только для чтения или записи, ему флаг на запуск не нужен. Его поставить можно, но он ни на что не повлияет. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 · Report post 8 minutes ago, arhiv6 said: Ваша программа - исполняемый файл, я для неё, если посмотрите её права, стоит флаг на запуск (x). Но файл устройства (/dev/bla-bla-bla) - вы же его не выполняете? Он из вашей программы открывается только для чтения или записи, ему флаг на запуск не нужен. Его поставить можно, но он ни на что не повлияет. понял. спасибо. теперь файл открывается. Но после ристарта опять errno = 13. а как сохранить настройки? Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post Смотрите, на примере ls -l /dev/spidev0.0 1 root spi 153 0 /dev/spidev0.0 у файла владелец root, группа spi. Причём у группы есть права на чтнеие/запись. Я бы просто добавил пользователя в группу spi: usermod -a -G spi username где spi - имя группы, а username - ваше имя пользователя, который запускает ПО, которое будет обращаться к файлу /dev/spidev0.0. Для файла ttyAMA0 группу посмотрите сами, там будет что-нибудь вроде dialout (для /dev/serial0 на группу не смотрите, т.к. это не файл, а ссылка на файл /dev/ttyAMA0), имя пользователя можно узнать командой whoami или echo $USER. Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 (edited) · Report post 28 minutes ago, arhiv6 said: Смотрите, на примере ls -l /dev/spidev0.0 1 root spi 153 0 /dev/spidev0.0 у файла владелец root, группа spi. Причём у группы есть права на чтнеие/запись. Я бы просто добавил пользователя в группу spi: usermod -a -G spi username где spi - имя группы, а username - ваше имя пользователя, который запускает ПО, которое будет обращаться к файлу /dev/spidev0.0. Для файла ttyAMA0 группу посмотрите сами, там будет что-нибудь вроде dialout (для /dev/serial0 на группу не смотрите, т.к. это не файл, а ссылка на файл /dev/ttyAMA0), имя пользователя можно узнать командой whoami или echo $USER. на sudo adduser pi dialout я получаю the user 'pi' is already a member of 'dialout' . вопрос если я добавлю в группу spi - настройки сохраняться при рестарте? echo $USER возвращает pi. на ls -l /dev/ttyAMA0 я получаю crw-rw-rw- 1 root tty 204, 64 /dev/ttyAMA0 - это значит моя группа tty? Edited December 1, 2019 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
arhiv6 0 Posted December 1, 2019 · Report post Настройки сохранятся, но группу spi зачем? Я это в качестве примера привёл. Выложите сюда вывод команд ls -l /dev/ttyAMA0 whoami id groups $USER Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted December 1, 2019 · Report post 13 minutes ago, arhiv6 said: Настройки сохранятся, но группу spi зачем? Я это в качестве примера привёл. Выложите сюда вывод команд ls -l /dev/ttyAMA0 whoami id groups $USER crw-rw-rw- 1 root tty 204, 64 /dev/ttyAMA0 pi uid=1000(pi) gid=1000(pi) groups=1000(pi), 4(adm),20(dalout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi) pi: adm dalout cdrom sudo audio video plugdev users input netdev gpio i2c spi Quote Ответить с цитированием Share this post Link to post Share on other sites