当前位置: 首页 > news >正文

Linux下udev应用

udev是一个设备管理工具,并以守护进程的方式运行,它能够根据内核的uevent管理/dev/下面的设备文件。因为工作在用户层的缘故,所以能够很好地接收内核层的消息动态和管理设备文件,比单一的在内核层静态注册设备文件方便得多。

接下来我们以启扬IAC-IMX8MP-Kit开发板中的udev为例,对其进行简单的了解。

udev一般会有一个配置文件—— udev.conf,如下图所示:

其中,udev_log表示日志等级,显示可能为err(3),info(6),debug(7);

children_max表示允许同时执行的最大设备数量;

exec_delay表示延迟多少秒之后再执行RUN指令;

event_timeout表示等待设备事件完成的超时秒数,超时后,设备事件将会被终止,默认为180s;

timeout_signal表示超时发出的信号;

resolve_names设置systemd-udevd 在何时解析用户与组的名称。此时显示默认值 early 表示在规则的解析阶段;显示late时表示在每个设备事件发生的时候;显示never时表示不解析(所有设备都归 root 用户拥有)。

udev主要根据/etc/udev/rules.d/下面的匹配规则进行指定动作,如下图所示:

前面的数字代表着优先级,数字越低表示优先级越高。

这里我们打开automount规则文件,显示如下图

其中,SUBSYSTEM如字面意思,是子系统的名称,这里是块儿设备所以是block;

ACTION表示事件的行为,add是添加,remove是移除,change是改变;

ENV{key}是环境变量,在一条规则中,最多设置五条环境变量的匹配键;

RUN就是所执行的内容,一般以脚本为主;

而这里整体的意思就是,当有一个块儿设备添加进来,就执行/etc/udev/scripts/mount.sh这个脚本,块儿设备的卸载包括变更也都是执行这个脚本。

接下来我们再看这个脚本的内容,如下图

 脚本的内容有点儿长,大致的内容就是通过判断插入块儿设备的文件系统类型进行不同的操作,一般都是将其挂载到某一个指定的目录下。

这里我们将U盘插入,看看udev规则下它会挂载到哪里。

插入U盘显示如下图:

识别到U盘,并且根据上面脚本的规则,将其挂载到/run/media/sda1下面,如图所示,表明规则执行成功。

通过上面的操作,可以看出我们能够根据udev规则做一些设备的固定匹配工作,这会为一些需要根据硬件动作做出相应脚本执行的工作带来的极大的方便。

相关文章:

  • Responder的使用
  • 【小月电子】FPGA开发板(XLOGIC_V1)系统学习教程-LESSON6
  • JAVA和JVM和JDK和JRE和JAVA SE 是什么? 他们有什么区别? 怎么区分 编程下哪个?
  • Hydro-bzoj,你用过吗?
  • 【云原生 · Kubernetes】apiserver高可用
  • Mendeley教程(3)引用各种文献
  • 研发中学习git(小趴菜)
  • C++ 数据结构与算法(十三)(单调栈)
  • MySQL高级篇——存储过程和函数中的变量
  • pytorch迁移学习载入部分权重
  • 【正点原子STM32连载】第二十四章 内存保护(MPU)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  • 【无标题】qml与c++数据交互的一种方式
  • 在线教育项目【老师管理-前端实现】
  • 【Redis】事务、lua脚本、发布订阅、异步连接
  • 通过 360 反馈提高团队绩效
  • (三)从jvm层面了解线程的启动和停止
  • 08.Android之View事件问题
  • CentOS 7 防火墙操作
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • echarts花样作死的坑
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux快速复制或删除大量小文件
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • select2 取值 遍历 设置默认值
  • supervisor 永不挂掉的进程 安装以及使用
  • Web Storage相关
  • webpack入门学习手记(二)
  • 爱情 北京女病人
  • 闭包--闭包之tab栏切换(四)
  • 复杂数据处理
  • 第二十章:异步和文件I/O.(二十三)
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #控制台大学课堂点名问题_课堂随机点名
  • $ git push -u origin master 推送到远程库出错
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原)Matlab的svmtrain和svmclassify
  • (转)EXC_BREAKPOINT僵尸错误
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 中viewstate的原理和使用
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .net中我喜欢的两种验证码
  • /etc/fstab和/etc/mtab的区别
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [2023-年度总结]凡是过往,皆为序章
  • [Android] Upload package to device fails #2720