Перейти к содержанию
    

ls /dev выдает serial0 и ttyAMA0

пробую открыть

 

uart_fd = open("/dev/ttyAMA0", O_RDWR);

или

uart_fd = open("/dev/serial0", O_RDWR);

 

в обоих случаях получаю -1. что не так?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может просто у пользователя, из-под которого запускается программа, нет прав доступа к этому устройству? Сделайте

ls -l /dev/serial0 /dev/ttyAMA0 /dev/spidev0.0

и сравните, чем они отличаются. Ну или для пробы дайте всем пользователям полные права на эти устройства и попробуйте открыть ещё раз:

chmod +666 /dev/serial0 /dev/ttyAMA0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

root - это владелец, а вот 7 и 153 - это уже права доступа к файлу.  7 говорит о том, что читать/писать/выполнять может только владелец (root). Ваша рограмма из-под какого пользователя запускается?

14 минут назад, jenya7 сказал:

а почему +666? 

 
666 (-rw-rw-rw-) Все пользователи могут читать и редактировать, с той же вики: Chmod#Популярные_значения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, arhiv6 said:

root - это владелец, а вот 7 и 153 - это уже права доступа к файлу.  7 говорит о том, что читать/писать/выполнять может только владелец (root). Ваша рограмма из-под какого пользователя запускается?

666 (-rw-rw-rw-) Все пользователи могут читать и редактировать

 

а в таблице

777 (-rwxrwxrwx) - Каждый пользователь может читать, редактировать и запускать на выполнение. мне ведь и запускать надо ?

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и 777, но зачем вам права на его выполнение? Это же не программа или скрипт какой-нибудь, всё равно его не запустить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, arhiv6 said:

Можно и 777, но зачем вам права на его выполнение? Это же не программа или скрипт какой-нибудь, всё равно его не запустить.

у меня программа написанная в QT. я там работаю с модулем. хотя если это работа с файлом то может чтение\запись достаточно?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваша программа - исполняемый файл, я для неё, если посмотрите её права, стоит флаг на запуск (x). Но файл устройства (/dev/bla-bla-bla) - вы же его не выполняете? Он из вашей программы открывается только для чтения или записи, ему флаг на запуск не нужен. Его поставить можно, но он ни на что не повлияет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, arhiv6 said:

Ваша программа - исполняемый файл, я для неё, если посмотрите её права, стоит флаг на запуск (x). Но файл устройства (/dev/bla-bla-bla) - вы же его не выполняете? Он из вашей программы открывается только для чтения или записи, ему флаг на запуск не нужен. Его поставить можно, но он ни на что не повлияет.

понял. спасибо.

теперь файл открывается. :acute:

 

 

Но после ристарта опять errno = 13. а как сохранить настройки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите, на примере 

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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Настройки сохранятся, но группу spi зачем? Я это в качестве примера привёл. Выложите сюда вывод команд

ls -l /dev/ttyAMA0
whoami
id
groups $USER

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...