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

这篇具有很好参考价值的文章主要介绍了使用香橙派学习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 编程,学习,linux,运维,香橙派,开发语言,C语言,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”下:

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

可见,多了一个078

然后调用“adb devices”:

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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口,将它接入香橙派:

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

然后执行“ dmesg ”指令:

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

那么话不多说,直接再次 “ 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)

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

  • SUBSYSTEM:匹配键,匹配为block

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

实现效果

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

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

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

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

udev 编程,学习,linux,运维,香橙派,开发语言,C语言,udev

可见,此时就没有任何文件了!文章来源地址https://www.toymoban.com/news/detail-753907.html

到了这里,关于使用香橙派学习Linux udev的rules 并实现U盘的自动挂载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 驱动开发--自动创建节点udev机制的实现过程分析

    1,mknod:手动创建设备节点 2,devfs:创建设备节点的逻辑在内核空间,2.5版本后淘汰 3,udev:自动创建设备节点的机制,逻辑在用户空间,常用 4,mdev:轻量级的udev机制 1,注册驱动,register_chrdev()函数 2,获取设备信息(设备树相关文件,目前为指定寄存器地址) 3,创建一

    2024年02月09日
    浏览(34)
  • Linux的UDEV机制

     手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb c. dmeg能查看到手机接入的信息,但是输入adb devices会出现提醒 dinsufficient permissions for device: user in plugdev group; are your udev rules wrong? d. 配置文件,以支持USB设备的热拔插,

    2024年04月22日
    浏览(26)
  • Linux + 香橙派 + V4L2 + http 实现远程监控摄像头在网页端显示

    项目需求,需要做一个基于边缘端的人脸识别远程监控摄像头并在网页前端展示 ,这里采用国产香橙派作为边缘计算终端,安装ubuntu系统,系统中采用v4l2接口对摄像头进行获取,当客户端通过网页进行请求时,服务器通过http服务的形式将一帧帧图像发送给客户端,只要一秒

    2024年02月15日
    浏览(41)
  • 关于XMind自动安装到c盘的解决方案

    问题 XMind会默认安装到c盘,如何更改安装盘符释放c盘空间呢? 原理 修改windows系统的默认软件安装位置 一般有“ProgramFilesDir”和“ProgramFilesDir(x86)” 解决方案 1、win+r,输入“regedit”打开注册表编辑器 2、在注册表中,找到如下路径 路径指引:HKEY_LOCAL_MACHINESOFTWAREMicrosof

    2024年02月04日
    浏览(48)
  • 使用Vue + el-form + rules实现图书信息录入功能实战

    前言  上节回顾 转眼2023年已经过去一半了,我咋记得2022年刚过去呢,有时候在前端打版本的时候我还不小心写成2022啥啥啥呢,写完才发现自己自己写错了,应该是2023,真是时光一去不复回,往事只能回味啊。 上一节为了给图书录入功能模块打基础,单独写了一篇 Vue + Fo

    2024年02月17日
    浏览(45)
  • 14 使用Vue + el-form + rules实现图书信息录入功能实战

    前言  上节回顾 转眼2023年已经过去一半了,我咋记得2022年刚过去呢,有时候在前端打版本的时候我还不小心写成2022啥啥啥呢,写完才发现自己自己写错了,应该是2023,真是时光一去不复回,往事只能回味啊。 上一节为了给图书录入功能模块打基础,单独写了一篇 Vue + Fo

    2024年02月16日
    浏览(52)
  • Linux挂载exFat格式U盘的方法

            exFat格式支持4G以上的大文件格式,同时支持mac系统、linux系统和windows系统,使用exFat格式的U盘(硬盘),方便在多个系统之间拷贝文件。但是在linux版的centOs下拷贝exFat格式文件,需要通过第三方工具实现文件的拷贝。 1、下载fuse-exfat支持软件: exfat支持是通过

    2023年04月14日
    浏览(45)
  • 在linux中挂载NFS共享盘的方法

    在 Linux 中,你可以使用 mount 命令来挂载 NFS(Network File System)共享盘。以下是挂载 NFS 共享盘的一般步骤: 确保已经安装 NFS 客户端:首先,你需要确保在你的 Linux 系统上已经安装了 NFS 客户端工具。大多数 Linux 发行版都默认安装了这些工具,但是如果你的系统没有安装,你

    2024年02月09日
    浏览(45)
  • Linux篇 三、香橙派Zero2搭建Qt环境

    一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 四、Linux修改用户名 五、Ubuntu与Linux板卡建立NFS服务 主要讲述了移植QT的过程 默认在香橙派篇2中,已经成功拉取Linux的SDK源码的情况下 如果失败的话,可以直接去官网下载交叉编译工具 此处路径和上一篇的源码

    2023年04月21日
    浏览(39)
  • [香橙派]Orange pi zero 3命令行配网方法——建立ssh连接——Ubuntu配置WIFI自动连接

            前面我们给Orange Pi安装了Ubuntu系统,并通过MobaXterm进行了串口连接,但其实并不方便,在日常开发中,我们希望能够使用更方便的ssh连接来进行操作,因此配置网络是必要的。         本章介绍的方法无需网线、HDMI线等,使用命令行完成,配置完成即可一直使用。

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包