Linux下串口权限不足,如何正确配置串口访问权限?

1. 问题概述

       在 Linux 系统开发串口程序过程中,普通用户执行程序时常常遭遇 “Permission denied” 报错。这是由于系统默认将串口设备(如/dev/ttyS0/dev/ttyUSB0)的访问权限严格限定在特定用户组内,仅root用户或加入dialout组的用户具备操作权限。

        虽然临时使用sudo命令能快速获取权限,但会带来潜在安全风险,例如非预期的权限提升、误操作引发的系统问题。此外,在嵌入式或物联网设备的自动化运行场景中,频繁输入sudo密码或依赖 root 权限,不仅不符合安全规范,还会给无人值守运行带来障碍。

2. 常见原因分析

以下是导致权限不足的常见原因:

  1. 当前用户未加入串口设备所属的用户组(通常是`dialout`)。
  2. 串口设备的权限设置过于严格,仅允许`root`用户访问。

通过以下方法可以逐步排查并解决问题:

  1. 检查串口设备的权限:`ls -l /dev/ttyS0`。
  2. 确认当前用户是否属于`dialout`组:`groups`。

3. 解决方案

1. 通过指令临时修改串口权限

1) 直接修改设备文件权限
sudo chmod 666 /dev/ttyUSB0  # 所有用户可读写(不推荐长期使用)
2) 动态更改设备所属组
sudo chown root:dialout /dev/ttyUSB0  # 设置所有者为 root,组为 dialout
sudo chmod g+rw /dev/ttyUSB0          # 允许组用户读写

2. 永久修改(推荐方法

udev规则是更灵活和持久的解决方案。创建一个新的udev规则文件,例如`/etc/udev/rules.d/99-usb-serial.rules`,不仅能设置权限,还可以设置波特率等

在jetson平台中,在/etc/udev/rules.d/99-tegra-devices.rules文件中添加如下:

KERNEL=="ttyTHS0",GROUP="dialout",MODE="0666"
KERNEL=="ttyTHS1",GROUP="dialout",MODE="0666"
KERNEL=="ttyTHS3",GROUP="dialout",MODE="0666"
KERNEL=="ttyTHS4",GROUP="dialout",MODE="0666"

你可能感兴趣的:(linux)