Linux串口权限与udev理解

本文不是很深入的探讨权限和udev问题,只是分析在日常使用中有关的一些概念、理解和解决方式。

串口的问题

在现场开发的同事反映UOS工控机没有配置串口,每次都需要sudo才能使用。(明明在家里你们都会自己配置好环境与权限,为什么到了现场反而不会了需要我提供协助呢?)

我之前没考虑过这个问题,认为串口就是得root权限操作才安全。但是既然提出了需求,就赶紧百度并测试一下吧(可能2会了,Google上不去)。

赋予普通用户串口权限的两种方法

在百度上,给普通用户串口权限有两种主流方法,一种是将用户放入特殊的用户组,从而获得权限。另一种是加入udev规则,在串口插入时自动更改权限。

我个人更倾向于使用第二种方案,因为公司中不同的人装系统就可能起不同的名字,之后进入生产环境可能又会起新的名字,所以采用第二种设置规则的办法,便于之后制作恢复镜像和一键部署。

xxx.rules

sudo vi /etc/udev/rules.d/70-tty-usb-rules,写入以下内容:

KERNEL=="ttyS*",MODE="0666"
KERNEL=="ttyUSB*",MODE="0666"

这一段的意思是匹配所有ttyS和ttyUSB,插入时都赋予0666的权限,即所有用户都可读可写。重新加载一下设备,就可以按规则配置权限进行操作了。

udev规则

udev是什么?udev是Linux下的设备文件管理方式,运行在用户侧(devfs在内核侧管理设备文件)。有了udev,/dev目录下的文件就都是真实存在的已连接的设备了。

udev的规则都保存在/etc/udev/rules.d目录下,文件名的格式为数字-名称.rules,数字表示加载顺序,一般是从小往大加载,后加载的会覆盖前面的;名称按功能自定义,最后以.rules结尾。这些规则会在设备接入时生效。

规则文件按行执行,每行分为两个部分:匹配和赋值,每个参数使用逗号,分割。

(这段复制自引用[2],仅供参考)。
1、udev 规则的所有操作符
==  比较键、值,若等于,则该条件满足;
!=  比较键、值,若不等于,则该条件满足;
=   对一个键赋值;
+=  为一个表示多个条目的键赋值。
:=  对一个键赋值,并拒绝之后所有对该键的改动,防止后面的规则文件对该键重赋值。

2、udev 规则的匹配键
ACTION        事件 (uevent) 的行为,例如:add、remove。
KERNEL         内核设备名称,例如:sda, cdrom。
DEVPATH        设备的 devpath 路径。
SUBSYSTEM       设备的子系统名称,例如:sda 的子系统为 block。
BUS           设备在 devpath 里的总线名称,例如:usb。
DRIVER         设备在 devpath 里的设备驱动名称,例如:ide-cdrom。
ID            设备在 devpath 里的识别号。
SYSFS{filename}    设备的 devpath 路径下,设备的属性文件“filename”里的内容。
ENV{key}       环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。
PROGRAM        调用外部命令。
RESULT         外部命令 PROGRAM 的返回结果。

3、udev 的重要赋值键
NAME           /dev目录下显示的文件名重命名
SYMLINK          为 /dev下文件进行符号链接,防止覆盖系统默认产生的文件
OWNER, GROUP, MODE  为设备设定权限。
ENV{key}         导入一个环境变量。

4、udev 的值和可调用的替换操作符
Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符:
kernel,∗∗kernel, %k**        设备的内核设备名称,例如:sda、cdrom。 **kernel,∗∗number, %n        设备的内核号码,例如:sda3 的内核号码是 3。
devpath,∗∗devpath, %p**       设备的 devpath路径。 **devpath,∗∗id, %b          设备在 devpath里的 ID 号。
sysfsfile,∗∗sysfs{file}, %s{file}**   设备的 sysfs里 file 的内容。其实就是设备的属性值。 **sysfsfile,∗∗env{key}, %E{key}   一个环境变量的值。
major,∗∗major, %M**        设备的 major 号。 **major,∗∗minor %m        设备的 minor 号。
result,∗∗result, %c**        PROGRAM 返回的结果。 **result,∗∗parent, %P       父设备的设备文件名。
root,∗∗root, %r**         udev_root的值,默认是 /dev/。 **root,∗∗tempnode, %N      临时设备名。
%%            符号 % 本身。
$$             符号 $ 本身。

比如前面更改串口的规则,就是匹配所有设备名为ttyS和ttyUSB的设备,将其权限修改为0666。

参考

[1]https://www.cnblogs.com/qixianyu/p/6869744.html
[2]https://www.cnblogs.com/cslunatic/p/3171837.html

Linux串口权限与udev理解相关推荐

  1. linux 串口驱动 理解,linux 串口驱动 理解

    linux 串口 驱动 理解 一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选) ...

  2. 嵌入式Linux 串口编程系列2--termios的VMIN和VTIME深入理解

    在上一篇文章中,我们介绍了串口的一些基本知识.串口配置接口 termios结构体的概念,串口的配置参数有n多个,这里面不用都背下来,什么时候使用,翻看手册即可,但是有两个 参数是一定要理解的,就是VM ...

  3. 解决Linux非root用户读写串口权限问题

    解决Linux非root用户读写串口权限问题 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 目录 文章目录 解决Linux非root ...

  4. 对linux文件权限的理解,理解linux文件权限2

    使用文件权限符[root@TP-CW-WS-PH-01 ~]# ls -l total 6689968 -rw-------. 1 root root 1770 Sep 16 2012 anacond ...

  5. Linux串口编程详解

    Linux串口编程详解(阻塞模式.非阻塞模式.select函数) 之前一直觉得串口编程很简单,这两天仔细研究后发现串口里的各种参数还挺复杂,稍不注意就容易出错,这里总结一下网上的各种文章及自己的理解与 ...

  6. linux域文件夹权限设置密码,如何配置Linux 文件权限(经典详细版本: rwxst)

    在Linux中,Linux文件权限一共分为三种.本文将向读者展示如何正确配置Linux文件权限. 三种特殊权限简介 SUID 当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行, ...

  7. Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)

    一.查看本机串口信息 1. 串口是否在使用 串口在 /dev 目录中,查看串口是否在使用,可以用命令 ls -l /dev/ttyUSB0 说明: ls -l:是查看目录的命令,直接用ls或ll也可以 ...

  8. Serial Programming HOWTO——Linux 串口编程HOWTO

    转自:http://bbs.loveunix.net/viewthread.php?tid=35896 1. Introduction 简介 This is the Linux Serial Prog ...

  9. linux通过串口读取文件,Linux 串口读写(二)

    例子 下面是一个简单的读取串口数据的例子,使用了上面定义的一些函数和头文件 /************************************************************* ...

最新文章

  1. 52 个深度学习目标检测模型汇总,论文、源码一应俱全
  2. hdu 5199 Gunner(STL之map,水)
  3. 【MM模块】Contract 采购合同简介
  4. Python数据分析pandas之dataframe初识
  5. 十问十答 BSD 许可证
  6. learnpython3thehardway视频_LearnPython3theHardWay__Excercise 13 Parameters, Unpacking, Variables
  7. 解决hive交互模式退格键乱码
  8. 调用exe文件(一般处理登陆安全窗口)+睡眠等待(--------------------)
  9. css中标签显示模式、块元素、行内元素、行内块元素、显示模式转换
  10. 面试官:什么是 Reactor 和 Proactor
  11. scrapy 自动下载图片
  12. 如何用div隐藏table中的某几行呢?
  13. vs2015安装python3.6.8,windows下安装caffe (cuda10.0,anaconda3,python3.6→python2.7,vs2015→vs2013)...
  14. BFS算法(广度优先搜索)java
  15. 机器人图形变变变_中班数学活动——图形变变变 教案
  16. solr中文同义词检索的配置讲解
  17. 计算机网络高频知识点(一)
  18. 计算机一级wps选择题必背知识点,2017全国计算机一级《WPS》复习题「附答案」...
  19. java计算机毕业设计线上花店购物商城源码+lw文档+系统+数据库
  20. 关于Mybatis中的条件查询。createCriteria example里面的条件

热门文章

  1. 尚硅谷大数据视频_Shell视频教程
  2. 解决知乎live无法下载的问题
  3. 禁用计算机账户控制,win8系统禁止弹出用户账户控制窗口的方法
  4. [错误]文件 UNKNOWN.RPT 内出错:无法将请求提交给后台处理。
  5. 华大单片机 HC32F460 驱动BM8563ESA RTC芯片
  6. hiredis的异步处理
  7. 顶刊TPAMI 2022!清华刘玉身团队提出SPD:雪花反卷积网络
  8. GPS北斗共视授时中的多径效应分析
  9. 游戏引擎开发技术栈总结(自用)
  10. JSR303字段校验