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

news2024/11/25 7:26:27

在之前编程首先语音刷抖音的博文里提到过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.coloradmin.cn/o/1024181.html

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

相关文章

SQL Server关于AlwaysOn的理解-读写分离的误区(一)

前言 很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到。因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到辅助副本上。这是一个认知误区&#x…

jmeter基础压力教程

Jmeter基础压力测试教程 一、安装Jmeter; 安装需求:1. JDK 8.0.91安装包(最新即可,配置环境变量) 2. Badboy2.25脚本录制工具(注:Jmeter3.0与badboy2.0不兼容) Jmerter安装包…

玩玩“小藤”开发者套件 Atlas 200I DK A2 之环境准备

玩玩“小藤”开发者套件 Atlas 200I DK A2 之环境准备 0. 背景1. 烧录镜像2. 安装依赖3. 安装 Ascend-cann-toolkit 软件包4. 安装PyTorch5. 安装 PyTorch 插件 torch_npu6. 安装APEX混合精度模块 0. 背景 总所周知,英伟达的GPU供不应求,还各种限制。华…

Ae 效果:CC Bubbles

模拟/CC Bubbles Simulation/CC Bubbles CC Bubbles(CC 气泡)主要用于生成气泡以及模拟其运动的效果。 既可将效果应用到一个纯色图层,也可将其应用到一个图层的副本上或者调整图层上。CC Bubbles 效果生成的气泡在运动过程会与图层内容即时发…

现货白银的价格如何变动

只要是在正常的交易日,现货白银价格的走势,几乎全天24小时都处于波动之中,其行情走势会因为各种政治、经济因素的影响而发生改变,有时价格波动在一天内可以高达两三美元,有时却可以连续几周都处于窄幅波动,…

详解Nacos和Eureka的区别

文章目录 Eureka是什么Nacos是什么Nacos的实现原理 Nacos和Eureka的区别CAP理论连接方式服务异常剔除操作实例方式自我保护机制 Eureka是什么 Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心, 由Netflix公司与2012将其开源出来,Eureka基于REST服务开发,主要用…

爬虫项目(四):抓取网页所有图片

文章目录 一、书籍推荐二、完整代码三、运行结果 一、书籍推荐 推荐本人书籍《Python网络爬虫入门到实战》 ,详细介绍见👉: 《Python网络爬虫入门到实战》 书籍介绍 二、完整代码 原理:抓取该链接中所有的图片格式。基于seleni…

分布式数据库(笔记)

课程链接:015_数据库系统的用户接口以及SQL语言(一)_哔哩哔哩_bilibili 1、分类 DDB:物理上分散,逻辑上集中 特点: 有统一的全局模式靠分布式数据库管理系统实现 DDBMS分布在网络的不同节点上 优点&am…

Responder

环境准备 操作系统:Kali Linux工具:responder,john,evil-winrm PS:输入以下命令解决靶场环境无法打开问题 #echo "<靶机IP> unika.htb">>/etc/hostsresponder工具 [Kali 官网] 手册地址:https://www.kali.org/tools/responder/ 摘要: This package c…

ubuntu 里根文件系统的扩容,/dev/ubuntu-vg/ubuntu-lv 文件系统扩充到整个分区

笔者安装了ubuntu服务器版软件&#xff0c;由于系统安装的时候没有划分好磁盘分区&#xff0c;只采用了1000G固态硬盘的 200G来安装系统&#xff0c;安装完毕后&#xff0c;用df -h 命令查看如下&#xff1a; 根文件系统仅占用了 196G&#xff0c;而本身硬盘的尺寸为1000G&…

C++笔记之std::forward

C笔记之std::forward 文章目录 C笔记之std::forward例一例二 std::forward的作用是在C中帮助实现完美转发&#xff08;perfect forwarding&#xff09;&#xff0c;它将传递给它的参数以原始类型和引用的方式传递给下一个函数&#xff0c;保持参数的值类别&#xff08;lvalue或…

爬虫 — Js 逆向

目录 一、概念1、爬虫2、反爬虫3、加密解密4、加密5、步骤 二、常用加密方式1、加密方式2、常见加密算法3、JS 中常见的算法4、MD5 算法4.1、MD5 加密网站4.2、特点 5、DES/AES 算法6、RSA 算法7、base64 算法 三、环境配置1、node.js 环境配置2、PyCharm 环境配置 一、概念 1…

【AI视野·今日NLP 自然语言处理论文速览 第三十六期】Tue, 19 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 19 Sep 2023 (showing first 100 of 106 entries) Totally 106 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Speaker attribution in German parliamentary debates with QLoRA-ada…

xp 系统 安装 python 2.7 ide pip

1 下载python http://www.python.org/ftp/python/ python-2.7.2.msi 安装完需要设置环境变量 2 下载 setuptools setuptools-0.6c11.win32-py2.7.exe https://pypi.tuna.tsinghua.edu.cn/simple/setuptools/ 3 下载 pip &#xff0c;python 2.7 最高支持 pip 20.3.4 https:…

安全远程访问工具

什么是安全远程访问 安全远程访问是指一种 IT 安全策略&#xff0c;允许对企业网络、任务关键型系统或任何机密数据进行授权、受控访问。它使 IT 团队能够根据员工和第三方的角色和工作职责为其提供不同级别的访问权限&#xff0c;安全的远程访问方法可保护系统和应用程序&…

C语言指针讲解-------进阶篇(下篇)

目录 六.函数指针数组 七.指向函数指针数组的指针 八.回调函数 冒泡排序 与 qsort 函数 冒泡排序 qsort函数 六.函数指针数组 函数指针数组---数组存放的是函数 ---指针存放的是函数的地址 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int Add(int x, in…

TuyaLink 快速入门教程

通过本入门教程&#xff0c;大家能了解到如何在涂鸦 IoT 开发平台上使用 TuyaLink 完成智能设备接入。并通过 Java 程序&#xff0c;在 IntelliJ IDEA 中使用 TuyaLink 的 GitHub Demo 工程&#xff0c;对一个电工开关设备&#xff0c;实现基本的数据上报下发功能。 准备工作 …

分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测

分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测 目录 分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GA-RF遗传算法优化随机森林多输入分类预测&#xff08;完整源码和数据&…

细说GNSS模拟器的RTK功能(四)应用实例02

在之前的文章中&#xff0c;我们详细介绍了什么是RTK&#xff0c;并且用一个基于RTCM插件的RTK使用实例&#xff0c;来模拟RTCM的使用&#xff0c;本期文章我们将通过另一种方式——基于多实例&#xff0c;来模拟两个同步的射频信号。 基于多实例 硬件设置 首先&#xff0c;需…

elasticsearch bulk 批量操作

1&#xff1a;bulk 是 elasticsearch 提供的一种批量增删改的操作API bulk 对 JSON串 有着严格的要求。每个JSON串 不能换行 &#xff0c;只能放在同一行&#xff0c;同时&#xff0c; 相邻的JSON串之间必须要有换行 &#xff08;Linux下是\n&#xff1b;Window下是\r\n&#…