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. 3.分支结构与循环结构
  2. 【Codeforces】659B Qualifying Contest (sort)
  3. 并发编程中一种经典的分而治之的思想!!
  4. Codeforces 607B Zuma
  5. PHP RSA签名
  6. 程序员面试题精选100题(44)-数值的整数次方[算法]
  7. pytorch入门使用
  8. day3-python学习笔记(三)字典、元组
  9. python中imread导入失败_ImportError:无法导入加载图像文件所需的Python Imaging Library(PIL)...
  10. 【转】贝塞尔曲线介绍
  11. 机器翻译(信息学奥赛一本通-T1401)
  12. kali2020设置root用户登录
  13. 大数据之-Hadoop3.x_了解一下hive和hbase的区别---大数据之hadoop3.x工作笔记0084
  14. 综治应急指挥中心建设方案
  15. 《想做视频号必须要懂的知识——音质篇》
  16. java思路_java编程的思路
  17. 如何实时计算日累计逐单资金流
  18. db2嵌套查询效率_提高 DB2 查询性能的常用方法
  19. IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略
  20. 授权dns(CloudXNS)的学习使用

热门文章

  1. python常用函数详解(持续更新ing)
  2. logstash判断是否匹配_logstash 中的贪婪匹配
  3. 狮子座|狮子座性格分析
  4. Horizontal+异步+pullTorefresh+viewPager+侧滑(XListView)
  5. 微信小程序 - 将 MP4 视频下载保存到用户手机相册(网络路径 / 临时路径)
  6. 记一次全角空格造成的nginx启动失败(坑)
  7. transparent特性
  8. EV2200 使用方法
  9. oracle 支持多少并发量,如何估算一台数据库服务器能够承受的并发量
  10. rime|小狼毫输入emoji表情的效果