udev

是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载固件时Linux 2.6.13内核。udev的最新版本依赖于升级后的的uevent接口的最新版本。使用新版本udev的系统不能在2.6.13以下版本启动,除非使用noudev参数来禁用udev并使用传统的/dev来进行设备读取。

基本信息

Linux 传统上使用静态设备创建方法,因此大量设备节点在 /dev 下创建(有时上千个),而不管相应的硬件设备是否真正存在。通常这由一个MAKEDEV脚本实现,这个脚本包含了许多通过世界上(有幽默意味,注)每一个可能存在的设备相关的主设备号和次设备号对mknod程序的调用。采用udev的方法,只有被 内核检测到的设备才会获取为它们创建的设备节点。因为这些设备节点在每次系统启动时被创建,他们会被贮存在ramfs(一个内存中的文件系统,不占用任何磁盘空间).设备节点不需要大量磁盘空间,因此它使用的内存可以忽略。

Udev:动态管理设备文件的方法

  1. Linux中一切皆文件。

  2. Udev管理设备文件。如,主机连接U盘出现新的文件(sdb),移除U盘,磁盘文件消失。

  3. 硬件文件的信息写入到了/sys目录下,这个目录与proc类似。

  4. 我们用udev可以为设备改名,或执行自定义操作。

  1. 在/etc/udev/rules.d目录下创建规则文件

  2. 接入新设备,如果满足规则,就会按管理员的规则应用

  3. 规则文件名:数字-名字.rules

  1. 规则文件中,管理员指定硬件满足或不满足哪些条件,就执行什么操作

  • 实例:新碰盘接入时,创建一个捷链接的设备文件(相当于创建快捷方式)

1) 查看设备信息(先查看设备完整路径,再查看地完整信息)

[root@pc1 ~]# udevadm info --query=path --name=/dev/vdb      //查看设备的完整路径信息,vdb为磁盘

/devices/pci0000:00/0000:00:0d.0/virtio8/block/vdb

[root@pc1 ~]# udevadm info --query=all --attribute-walk >path=/devices/pci0000:00/0000:00:0e.0/virtio9/block/vdc/vdc1    //两行是一起的,写不了这么长

...........
  looking at device '/devices/pci0000:00/0000:00:0d.0/virtio8/block/vdb':
    KERNEL=="vdb"
..........
  looking at parent device '/devices/pci0000:00/0000:00:0d.0/virtio8':
    KERNELS=="virtio8"
    SUBSYSTEMS=="virtio"
    DRIVERS=="virtio_blk"   //如果里是U盘,一般会显示成DRIVERS=="usb-storage"
......
  looking at parent device '/devices/pci0000:00/0000:00:0d.0':
    KERNELS=="0000:00:0d.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="virtio-pci"    //找到一些有特征的信息,在自定义规则时作为检测条件使用
    ATTRS{irq}=="10"
    ATTRS{subsystem_vendor}=="0x1af4"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x010000"
    ATTRS{driver_override}=="(null)"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{local_cpus}=="1"
    ATTRS{device}=="0x1001"
    ATTRS{enable}=="1"
    ATTRS{msi_bus}==""
    ATTRS{local_cpulist}=="0"
    ATTRS{vendor}=="0x1af4"
    ATTRS{subsystem_device}=="0x0002"
    ATTRS{numa_node}=="-1"
    ATTRS{d3cold_allowed}=="0"

......

2) 创建规则

[root@pc1 rules.d]# cd /etc/udev/rules.d/     //设备链接规则存放目录
[root@pc1 rules.d]# ls

70-persistent-ipoib.rules

[root@pc1 rules.d]# cp 70-persistent-ipoib.rules 80-persistent-ipoib.rules

[root@pc1 rules.d]# vim 80-persistent-ipoib.rules   //编写规则,删除全部,编写内容如下

ACTION=="add", KERNEL=="vd[a-z]*", DRIVERS=="virtio_blk",SYMLINK+="lcfvdb%n"

//将设备连到主机,ACTION(行为)就是add,KERNEL的意思是没有人为干预内核给它起的名。SYMLINIK是创建快捷方式,+=是额外增加。%n是分区号

[root@pc1 rules.d]# ls /dev/lcf*

ls: 无法访问/dev/lcf*: 没有那个文件或目录

//重启电脑后再查看一次

[root@pc1 ~]# ls /dev/lcf*

/dev/lcfvdb  /dev/lcfvdb1  /dev/lcfvdb2

//这样就出来了

3) udevadm 工具简介
概要:

udevadm [--debug] [--version] [--help]

udevadm info options

udevadm trigger [options]

udevadm settle [options]

udevadm control command

udevadm monitor [options]

udevadm test [options] devpath

描述:

udevadm 后接一个命令和命令指定选项。它控制了udev运行的行为,处理内核事件,控制事件队列,并且提供简单的调试机制。

选项:

--debug 打印错误信息

--version 打印版本信息

--help 帮助文档

udevadm info options

查询udev数据库中的设备信息。也可以从sysfs文件系统中查询到设备的属性以辅助创建udev规则。

--query=type

从数据库中查询指定类型的设备。需要--path和--name来指定设备。合法的查询文件是:设备名,链接,路径,属性

--path=devpath

设备的路径

--name=file

设备节点或者链接

--attribute-walk

打印指定设备的所有sysfs记录的属性,以用来udev规则匹配特殊的设备。该选项打印链上的所有设备信息,最大可能到sys目录。

--device-id-of-file=file

打印主/从设备号

--export-db

输出udev数据库中的内容

--version

输出版本信息

--help

打印帮助文档

udevadm trigger [options]

接收内核发送来的设备事件。主要用于重放coldplug事件信息

(译者补充:内核在启动时已经检测到了系统的硬件设备,并把硬件设备信息通过sysfs内核虚拟文件系统导出。udev扫描sysfs文件系统,根据硬件设备信息生成热插拔(hotplug)事件,udev再读取这些事件,生成对应的硬件设备文件。由于没有实际的硬件插拔动作,所以这一过程被称为coldplug。)

--verbose 输出将要被触发的设备列表。

--dry-run 不真的触发事件

--type=type 触发一个特殊的设备。合法的类型:devices,subsystem,failed.默认是devices

--action=action

被触发的事件,默认是change

--subsystem-match=subsystem

触发匹配子系统的设备事件。这个选项可以被多次指定,并且支持shell模式匹配。

--attr-match=attribute=value

触发匹配sysfs属性的设备事件。如果属性值和属性一起指定,属性的值可以使用shell模式匹配。如果没有指定值,会重新确认现有属性。这个选项可以被多次指定。

--attr-nomatch=attribute=value

不要触发匹配属性的设备事件。如果可以使用模式匹配。也可以多次指定

--property-match=property=value

匹配属性吻合的设备。可以多次指定支持模式匹配

--tag-match=property

匹配标签吻合的设备。可以多次指定。

--sysname-match=name

匹配sys设备名相同的设备。可以多次指定支持模式匹配。

udevadm settle [options]

查看udev事件队列,如果所有事件全部处理完就退出。

--timeout=seconds

等待事件队列空的最大时间。默认是180秒。如果是0则立即退出。

--seq-start=seqnum

只等待到给定的顺序号。

--seq-end=seqnum

只等待到给定顺序号之前。

--exit-if-exists=file

如果文件存在就退出

--quiet

不输出任何信息

--help

输出帮助文档

udevadm monitor [options]

监听内核事件和udev发送的events事件。打印事件发出的设备。可以通过比较内核或者udev事件的时间戳来分析事件时序。

--kernel

输出内核事件

--udev

输出udev规则执行时的udev事件

--property

输出事件的属性

--subsystem-match=string

通过子系统或者设备类型过滤事件。只有匹配了子系统值的udev设备事件通过。

--tag-match=string

通过属性过滤事件,只有匹配了标签的udev事件通过。

--help

udevadm test [options] devpath

模拟一个udev事件,打印出debug信息。

--action=string

--subsystem=string

`--help

udev的应用案例_2018_lcf相关推荐

  1. 27 | 案例篇:为什么我的磁盘I/O延迟很高?

    上一节,我们研究了一个狂打日志引发 I/O 性能问题的案例,先来简单回顾一下. 日志,是了解应用程序内部运行情况,最常用也是最有效的工具.日志一般会分为调试.信息.警告.错误等多个不同级别. 通常,生 ...

  2. oracle11gasm,Oracle11gASM之ACFS创建案例

    一团网资讯 一团资讯 > oracle > Oracle11gASM之ACFS创建案例 Oracle11gASM之ACFS创建案例 2018-05-20 08:58:50     发布者: ...

  3. 转://Linux Multipath多路径配置与使用案例

    在Linux平台一部分存储产品使用操作系统自带的多路径软件,包括最常见的HP和IBM的部分存储产品,在Linux自带的多路径软件叫做multipath,这篇文章以HP EVA系列存储在Linux平台的 ...

  4. python 网络编程之Socket通信案例消息发送与接收

    背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...

  5. 2021年大数据ELK(十七):Elasticsearch SQL 订单统计分析案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 订单统计分析案例 一.案例介绍 二.创建索引 三.导入测试数据 四.统计不同支 ...

  6. 2021年大数据ELK(十六):Elasticsearch SQL(职位查询案例)

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 职位查询案例 一.查询职位索引库中的一条数据 二.将SQL转换为DSL 三.职 ...

  7. 2021年大数据ELK(四):Lucene的美文搜索案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 美文搜索案例 一.需求 二.准备工作 1.创建IDEA项目 2. ...

  8. ❤️让人心跳加速的陌陌案例,大数据必需学会的基础案例!❤️ 【推荐收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 已列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 陌陌案例 一.陌陌案例的需求说明 二.陌陌案例中表设计内容 1. ...

  9. 2021年大数据Hive(十二):Hive综合案例!!!

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...

最新文章

  1. C#第一个程序Helloworld
  2. 《评人工智能如何走向新阶段》后记(深谈人工智能发展前沿)
  3. mov sreg, r/m16 在16位和32位编程中的区别
  4. mybatis实现一对多关系《DeptEmp》
  5. 对if...else if...的理解
  6. 追踪盗窃12亿用户登录数据的网络犯罪团伙
  7. 从时分复用、频分复用到码分复用(CDMA)
  8. 搭建Sublime Text3 Java编译运行环境
  9. 试题10 最大子阵(枚举)
  10. Flink 在米哈游的落地实践
  11. wps2019计算机里的云盘,WPS2019云文档如何使用?
  12. 怎么在国内创建谷歌账号_如何在Google相册中创建和共享协作相册
  13. 基于关系图卷积网络的源代码漏洞检测
  14. 男人最碰不得的十大危险女人
  15. VisionPro基础入门
  16. winimage使用教程
  17. 理解matplotlib、pylab与pyplot之间的关系
  18. Vimium如何使用
  19. 场效应管 | N-mos内部结构详解
  20. 计算机专业答辩开场白,计算机专业论文答辩开场白(2篇)

热门文章

  1. Slam(即时定位与地图构建) 知识篇
  2. python property类
  3. MobileWeb适配(二)
  4. mysql会话过期_Session过期、失效时间
  5. 团队师兄的模式课培训大纲
  6. linux中find与rm实现查找并删除目录或文件
  7. java实现十进制小数转换二进制
  8. acer电脑新装系统指南
  9. statementType:STATEMENT,PREPARED 或 CALLABLE
  10. android switchpreference 怎么切换,Android中的自定义SwitchPreference