Jump to content

    

Проблема с UART

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

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

 

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

или

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

 

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

Edited by jenya7

Share this post


Link to post
Share on other sites

man open, раздел "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ". После этого man errno/perror/strerror.

Share this post


Link to post
Share on other sites
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 by jenya7

Share this post


Link to post
Share on other sites

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

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

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

chmod +666 /dev/serial0 /dev/ttyAMA0

 

Share this post


Link to post
Share on other sites
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 by jenya7

Share this post


Link to post
Share on other sites

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

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

а почему +666? 

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

Share this post


Link to post
Share on other sites
10 minutes ago, arhiv6 said:

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

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

 

а в таблице

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

 

Edited by jenya7

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
5 minutes ago, arhiv6 said:

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

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

Edited by jenya7

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
8 minutes ago, arhiv6 said:

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

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

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

 

 

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

Share this post


Link to post
Share on other sites

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

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.

 

Share this post


Link to post
Share on other sites
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 by jenya7

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this