Linux下Arduino USB to TTL 权限问题解决

在Linux中高高兴兴的安装完了Arduino,结果编译下载程序时发现竟然出错,不能下载程序,本文就来说一下这个问题。

在linux下使用usbttl均会出现usb使用权限问题,下图是我在Ubuntu15.04中的问题截图:

1

可以看到问题是:avrdude:ser_open():can't open device "/dev/ttyUSB0":Permission denied

解决方法

解决方法,我找到了两种,一个来自Arduino官网labs的ARDUINO IDE ON LINUX-BASED OS,一个来自文章让ubuntu串口和USB设备不用root权限访问,经尝试均可解决,更喜欢用Arduino官网的解决方案。

方法一

  1. 创建文件90-extraacl.rules,放到目录/etc/udev/rulse.d/

    sudo vim /etc/udev/rules.d/90-etreacl.rules
    
  2. 粘贴以下内容:

    KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="<your_username>" 
    KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="<your_username>"
    

    其中OWNER的值是用户名,比如我的linux用户名是smslit,我就可以是下面的样子:

    KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="smslit"
    KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="smslit"
    
  3. 开启权限,注销后有效,可执行下面命令:

    sudo usermod -a -G tty smslit
    sudo usermod -a -G dialout smslit
    

    **注:**smslit替换为你当前的用户名。

方法二

从文章中我们知道ubuntu采用udev管理设备,因而插入设备的权限可以由udev的rules文件来定义,其实linux都是如此的。这里Arduino访问的硬件是USB转TTL串口,所以可以创建rules文件来解决,做法如下:

  • 在/etc/udev/rules.d/目录下新建一个文件,取名可以是90-tofu.rules 用vim创建文件,命令如下(需要用sudo的):

    cd /etc/udev/rules.d/
    sudo vim 90-tofu.rules
    

    这样我们就进入vim,按下i,进入编辑插入状态。

  • 添加内容如下:

    SUBSYSTEMS=="usb-serial", KERNEL=="ttyUSB?", GROUP="tofu", MODE="0666"
    

    按下 ESC 键,输入:wq,保存并退出。重新插拔Arduino或下载线。

Arduino此时就有权限使用设备下载程序了。