jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 (изменено) · Жалоба ls /dev выдает serial0 и ttyAMA0 пробую открыть uart_fd = open("/dev/ttyAMA0", O_RDWR); или uart_fd = open("/dev/serial0", O_RDWR); в обоих случаях получаю -1. что не так? Изменено 1 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба man open, раздел "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ". После этого man errno/perror/strerror. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 (изменено) · Жалоба 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 Изменено 1 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба Может просто у пользователя, из-под которого запускается программа, нет прав доступа к этому устройству? Сделайте ls -l /dev/serial0 /dev/ttyAMA0 /dev/spidev0.0 и сравните, чем они отличаются. Ну или для пробы дайте всем пользователям полные права на эти устройства и попробуйте открыть ещё раз: chmod +666 /dev/serial0 /dev/ttyAMA0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 (изменено) · Жалоба 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? Изменено 1 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба root - это владелец, а вот 7 и 153 - это уже права доступа к файлу. 7 говорит о том, что читать/писать/выполнять может только владелец (root). Ваша рограмма из-под какого пользователя запускается? 14 минут назад, jenya7 сказал: а почему +666? 666 (-rw-rw-rw-) Все пользователи могут читать и редактировать, с той же вики: Chmod#Популярные_значения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 (изменено) · Жалоба 10 minutes ago, arhiv6 said: root - это владелец, а вот 7 и 153 - это уже права доступа к файлу. 7 говорит о том, что читать/писать/выполнять может только владелец (root). Ваша рограмма из-под какого пользователя запускается? 666 (-rw-rw-rw-) Все пользователи могут читать и редактировать а в таблице 777 (-rwxrwxrwx) - Каждый пользователь может читать, редактировать и запускать на выполнение. мне ведь и запускать надо ? Изменено 1 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба Можно и 777, но зачем вам права на его выполнение? Это же не программа или скрипт какой-нибудь, всё равно его не запустить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 (изменено) · Жалоба 5 minutes ago, arhiv6 said: Можно и 777, но зачем вам права на его выполнение? Это же не программа или скрипт какой-нибудь, всё равно его не запустить. у меня программа написанная в QT. я там работаю с модулем. хотя если это работа с файлом то может чтение\запись достаточно? Изменено 1 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба Ваша программа - исполняемый файл, я для неё, если посмотрите её права, стоит флаг на запуск (x). Но файл устройства (/dev/bla-bla-bla) - вы же его не выполняете? Он из вашей программы открывается только для чтения или записи, ему флаг на запуск не нужен. Его поставить можно, но он ни на что не повлияет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба 8 minutes ago, arhiv6 said: Ваша программа - исполняемый файл, я для неё, если посмотрите её права, стоит флаг на запуск (x). Но файл устройства (/dev/bla-bla-bla) - вы же его не выполняете? Он из вашей программы открывается только для чтения или записи, ему флаг на запуск не нужен. Его поставить можно, но он ни на что не повлияет. понял. спасибо. теперь файл открывается. Но после ристарта опять errno = 13. а как сохранить настройки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба Смотрите, на примере 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 (изменено) · Жалоба 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? Изменено 1 декабря, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба Настройки сохранятся, но группу spi зачем? Я это в качестве примера привёл. Выложите сюда вывод команд ls -l /dev/ttyAMA0 whoami id groups $USER Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 1 декабря, 2019 Опубликовано 1 декабря, 2019 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться