使用香橙派学习Linux udev的rules 并实现U盘的自动挂载

在之前编程首先语音刷抖音的博文里提到过udev,现在回顾一下:

什么是udev?

  • udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行,而不在内核空间 运行。它能够根据系统中的硬 件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。

 本节就深入学习以下udev相关的知识,以下是一些参考链接:

[Linux 基础] -- udev 和 rules 使用规则_udev rules_BestW2Y的博客-CSDN博客

udev概述

在之前多次提到过:Linux中一切皆文件。在早期的 Linux 版本中,/dev 目录包含了所有可能出现的设备的设备文件。很难想象 Linux 用户如何在这些大量的设备文件中找到匹配条件的设备文件。现在 udev 只为那些连接到 Linux 操作系统的设备产生设备文件并且 udev 能通过定义一个 udev 规则(rule)来产生匹配设备属性的设备文件,这些设备属性可以是内核设备名称、总线路径、厂商名称、型号、序列号或者磁盘大小等等。

udev 添加/删除 设备文件的过程

udev的规则(rule) 

规则文件是 udev 里最重要的部分,默认是存放在 /etc/udev/rule.d/ 下。所有的规则文件必须以 ".rules" 为后缀名。

下面是一个简单的规则:(规则就是规则文件里的内容)

KERNEL=="sda", NAME="my_root_disk", MODE="0660"

其中:KERNEL 是匹配键,NAME 和 MODE 是赋值键。这条规则的意思是:如果有一个设备的内核名称为 sda,则该条件生效,执行后面的赋值:在 /dev 下产生一个名为my_root_disk 的设备文件,并把设备 文件的权限设为 0660。 

同时,在语音刷抖音项目中,手机接入香橙派不能识别的解决办法,也是在udev的rules文件夹下创建规则文件“ 51-android.rules ”,并写入以下规则:

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666" 

为什么此处的规则要这么写?

首先,插入的手机usb设备对应的设备文件在“/dev/bus/usb/001”下:

可见,这个文件的名字是063(001是系统的)

通过“ udevadm info --attribute-walk --name=/dev/bus/usb/001/设备名字 ” 可以看到设备的详细信息,此处设备名字就写063

其中,就可以找到刚刚规则中第一句“ SUBSYSTEM=="usb" ”的由来:

  • 这也是为什么规则第一句写上“ SUBSYSTEM=="usb" ”,udev就能知道:这条规则是针对手机这个设备。
  • 第二句的“ ENV{DEVTYPE}=="usb_device" ”,和第一句一样,都是匹配键:用来设置环境变量;
  • 最后一句的“ MODE="0666" ”才是赋值键,用来赋予权限

所以其实,想要通过规则来匹配一个设备文件,方法不止一种,我同样可以用其他的属性来进行匹配:

比如,在上图打印的信息中注意到了VID和PID的值,用他们来写规则:

SUBSYSTEM=="usb", ATTR{idProduct}=="ff08", ATTR{idVendor}=="2717", MODE="0666"

那么现在这条规则实现的效果 和 “之前那条使用环境变量来匹配的规则实现的效果” 是一样的。

为了验证,我修改 “ /etc/udev/rules.d/ ” 下的 “51-android.rules”:

然后再次插入手机。并查看“/dev/bus/usb/001”路径:

可见,多了一个078

然后调用“adb devices”:

可见可以成功脸上,说明用新的规则确实可以成功匹配到手机的设备文件

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 的返回结果

 

U盘的自动挂载

拿出我的U盘,它同样有一个USB口,将它接入香橙派:

然后执行“ dmesg ”指令:

可见,内核识别到了这个设备!且显示是sda4

然后执行“sudo mount /dev/sda4 /mnt/” 再 “cd /mnt” 就可以查看U盘中的内容:

(乱码是因为文件名是中文)

但是这样很麻烦,每次U盘插入后还要执行两个指令,可以用udev来实现U盘的自动挂载:

首先,执行 udevadm info --attribute-walk --name=/dev/sda4 ”来查看U盘的信息:

在里面可以选取用于匹配U盘的udev规则,通常使用KERNAL 或 SUBSYSTEM来匹配U盘

那么话不多说,直接再次 “ cd /etc/udev/rules.d/ ” 然后 “ sudo vim my_storage.rules

规则具体为:

ACTION=="add", SUBSYSTEMS=="block", SUBSYSTEM=="block", RUN{program}+="/bin/mkdir
/media/%k" ,RUN{program}+="/usr/bin/systemd-mount --no-block --collect $devnode
/media/%k"
  • ACTION:匹配键,匹配添加设备的动作
  • SUBSYSTEMS:匹配键,匹配为block(此处也可以是usb)

  • SUBSYSTEM:匹配键,匹配为block

通过这三个匹配键,匹配到U盘

  • RUN:运行命令,此处执行“ /bin/mkdir ”指令创建一个名为“media“的文件夹,里面有名为“%k” 的文件,%k是sda/sdb的通配符
  • RUN:运行命令,此处执行“ /usr/bin/systemd-mount ”指令挂载U盘到“%k”文件夹下

实现效果

重新拔插U盘,并“sudo service udev restart”重启udev后,查看media文件夹:

可见此时没有输入任何命令,就可以访问U盘的文件了,成功实现了U盘的自动挂载!

另外,可以安装一个tree指令来查看U盘文件,使用“sudo apt-get install tree”来安装;

安装完成后,进入media文件夹后,直接输入" tree ”,就可以清晰的看到文件结构了:

此时拔掉U盘,再次输入“tree”: 

可见,此时就没有任何文件了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础课-解析几何

1.平面直角坐标系 两点A(x1,y1)与B(x2,y2)之间的距离: 2.两点斜率公式 3.点到直线的距离 平行线之间的距离 4.平面直线方程的几种形式 点斜式 点P(x0,y0),斜率为k的直线方程:y-y0k(x-x0) 5.圆

Qt5开发及实例V2.0-第十七章-Qt版MyWord字处理软件

Qt5开发及实例V2.0-第十七章-Qt版MyWord字处理软件 第17章-Qt版MyWord字处理软件17.1 运行界面17.1.1 菜单设计基本操作17.1.2.MyWord系统菜单 17.2 工具栏设计17.2.1 与菜单对应的工具条17.2.2 附加功能的工具条 这段代码的作用是加载系统标准字号集,只要在主窗体构…

中兴R5300 G4服务器iSAC管理员zteroot密码遗失的重置方法及IPV6地址启用设置

本文讲解中兴R5300 G4服务器BMC带外iSAC管理员zteroot密码遗失,无法登录时如何对其进行密码重置,以及iSAC启用IPV6地址的方法。 一、重置中兴R5300 G4服务器iSAC管理员zteroot密码 1、通过SSH登录到iSAC,默认用户名:sysadmin&am…

【STM32】IAP升级 预备知识

IAP(In Application Programming)简介 Flash够大的情况下,上电后的程序通过修改 MSP 的方式,可以在一块Flash上存在多个功能差异的程序。 IAP是为了在执行正常功能前,为了升级功能,提前运行的一段程序。这…

WebRTC系列--sdp协商中的answer编解码协商过程

关于createAnswer的流程在前面的文章WebRTC系列-SDP之CreateAnswer这篇文章中有详细的分析。 这篇文章主要对于MediaSessionDescriptionFactory的AddAudioContentForAnswer做详细的分析,也就是说对于音频编码的匹配也是在这个方法里实现: 首先主要的函数调用如下图: 这篇文…

python连接mysql数据库报错pymysql.err.OperationalError

报错如下: 历史工程使用的是python3.6pymysqlmysql8.0 原因分析: 1、可能密码错误,通过navicat可以正常连接, 可排除 2、可能新版mysql默认使用的caching_sha2_password认证方式,换成mysql_native_password就可以 解决方法&am…

给定一个链表,判断链表中是否有环

【思路】 快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行, **如果链表带环则一定会在环中相遇,**否则快指针率先走到链表的末尾。比如:陪女朋友到操作跑步减肥。 bool hasC…

誉天在线项目-放大招-Vue3集成RichText富文本客户端组件QuillEditor

背景 开发中我们需要填写图文内容,就是含有图片和文字,html标准组件中是没有的。都是第三方来实现,就需要我们去集成。 有早期的fckEditor、ckEditor等,新的我们使用了vue框架,市场又推出了quillEditor。下面我们就在…

最新Java JDK 21:全面解析与新特性探讨

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

C++之容器std::stack类empty、size、top、push、emplace、pop、swap应用总结(二百二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Linux 本地 Docker Registry本地镜像仓库远程连接【内网穿透】

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

基于matlab实现的中点放炮各类地震波时距曲线程序

完整程序&#xff1a; clear all dx50;x-500:dx:500;%炮检距 h100;V11500; theta25*pi/180; V2V1/sin(theta); t1sqrt(x.*x4*h*h)/V1;%反射波时距曲线 t2abs(x)./V1;%直达波时距曲线 %折射波时距曲线 xm2*h*tan(theta);%求盲区 k1; for i1:length(x) if x(i)<-xm …

基于docker进行Grafana + prometheus实现服务监听

基于docker进行Grafana Prometheus实现服务监听 Grafana安装Prometheus安装Jvm监控配置服务器主机监控(基础cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网络) Grafana安装 docker pull grafana/grafanamkdir /server/grafanachmod 777 /server/grafanadocker run -d -p…

POJ 3977 Subset 折半枚举+二分搜素+双指针

一、题目大意 我们有N&#xff08;N<35&#xff09;个元素&#xff0c;从中选取一个子集&#xff0c;使得它的元素求和的绝对值最小&#xff0c;如果有多个可行解&#xff0c;选择元素最小的。 输出最优子集的元素总和绝对值&#xff0c;和最优子集元素的数量。 二、解题…

JavaWeb 学习笔记 7:Filter

JavaWeb 学习笔记 7&#xff1a;Filter 1.快速开始 使用过滤器的方式与 Servlet 类似&#xff0c;要实现一个Filter接口&#xff1a; WebFilter("/*") public class FirstFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletE…

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出 目录 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出…

《向量数据库指南》——向量搜索库Faiss 迁移到 Milvus 2.x

Faiss -> Milvus 2.x 1. Faiss 数据准备 前提条件是用户已经准备好了自己的 faiss 数据文件。(为了能快速体验,在项目源码的 testfiles 目录下放置了 faiss 测试数据方便用户体验: faiss_ivf_flat.index. 2. 编译打包 这部分同上,不再展开介绍。 3. 配置 migration.ymal…

vue下载Excel文件

前端vue实现导出Excel文件 用到的是 上代码 var wb XLSX.utils.table_to_book(document.querySelector(#my-table));//关联dom节点 这个是表格绑定的id名称var wbout XLSX.write(wb, {bookType: xlsx,bookSST: true,type: array})try {FileSaver.saveAs(new Blob([wbout], {…

【教学类】公开课学号挂牌(15*15CM手工纸)

作品展示&#xff1a; 15*15CM手工纸 文本框12磅加粗。学号数字是段落写入&#xff0c;黑体270磅 背景需求 最近都在小班、中班、大班里做“Python学具测试”&#xff0c;由于都是陌生的孩子&#xff0c;上课时&#xff0c;我通常只能喊“白衣服的女孩”“花格子衣服的男孩”…

精华回顾:Web3 前沿创新者在 DESTINATION MOON 共话未来

9 月 17 日&#xff0c;由 TinTinLand 主办的「DESTINATION MOON: Web3 Dev Summit Shanghai 2023」线下活动在上海黄浦如约而至。 本次 DESTINATION MOON 活动作为 2023 上海区块链国际周的 Side Event&#xff0c;设立了 4 场主题演讲与 3 个圆桌讨论&#xff0c;聚集了诸多…