Jump to content

    
Sign in to follow this  
jenya7

Проблема с UART

Recommended Posts

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
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
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
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this