You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

普通用户无法访问/dev/ttyS0:权限合规却提示设备忙

普通用户访问UART设备/dev/ttyS0提示“设备或资源忙”的排查与解决

排查方向及解决方案

1. 检查是否有其他进程占用串口

串口被其他进程独占是最常见的原因,普通用户可能无法看到root进程的占用情况,用以下命令排查:

sudo lsof /dev/ttyS0
# 或者
sudo fuser /dev/ttyS0

如果输出显示serial-getty@ttyS0.service这类系统服务,说明系统默认启用了串口登录服务,需要停止并禁用:

sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service

其他占用进程可根据PID直接终止:

sudo kill -9 <PID>

2. 检查串口锁文件

部分系统会用锁文件管理串口访问,锁文件通常位于/var/lock/LCK..ttyS0,普通用户可能没有权限读取或修改该文件:

ls -l /var/lock/LCK..ttyS0

如果锁文件存在且对应进程已退出,可删除锁文件:

sudo rm /var/lock/LCK..ttyS0

3. 调整minicom启动参数

minicom默认初始化流程可能触发独占锁定,尝试跳过初始化直接打开串口:

minicom -b 115200 -D /dev/ttyS0 -o

也可进入minicom配置界面,检查串口设置是否开启独占模式:

minicom -s

选择Serial port setup,确认无强制独占的配置项。

4. 检查安全模块限制

如果系统开启了SELinux或AppArmor,可能限制普通用户访问串口:

  • SELinux检查:
    getenforce
    
    若输出为Enforcing,临时关闭测试:
    sudo setenforce 0
    
    测试正常后,建议添加SELinux规则允许普通用户访问串口,而非直接关闭SELinux。
  • AppArmor检查:
    查看minicom的AppArmor配置:
    cat /etc/apparmor.d/usr.bin.minicom
    
    确认配置包含/dev/ttyS0 rw,这类权限项,若缺失则添加并重新加载配置:
    sudo apparmor_parser -r /etc/apparmor.d/usr.bin.minicom
    

5. 确认串口设备路径正确性

虽然root可访问,但仍需确认GPIO映射的UART是否确实为/dev/ttyS0,部分设备(如树莓派)会将硬件UART映射为/dev/ttyAMA0,mini UART映射为/dev/ttyS0,可通过以下命令确认:

dmesg | grep tty

内容的提问来源于stack exchange,提问作者judepereira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:02:23