[2020.1.19][udev] 金步国udev

2023-11-10

金步国index里有4条udev相关的.

[1] udevadm

[2] udev

[3] systemd-udevd.service           //udevd守护进程

[4] udev.conf


[1] udevadm

1 udevadm info [options] [devpath|file|unit...] 

从udev数据库中提取设备信息。

位置参数用于指定一个或多个设备,它可以是 一个设备名(必须以 /dev/ 开头)、 一个 sys 路径(必须以 /sys/ 开头)、 一个设备单元(必须以 ".device" 结尾)。

udevadm info /dev/sda1

udevadm info /sys/class/block/sda

-q, --query=TYPE

提取特定类型的设备信息。 TYPE 可以是下列值之一: name, symlink, path, property, all(默认值)

-p, --path=DEVPATH

该设备在 /sys 目录下的路径(例如 [/sys]/class/block/sda)。 

因为此选项是位置参数以 /sys/ 开头时的替代, 所以通常将 udevadm info --path=/class/block/sda 直接简写为 udevadm info /sys/class/block/sda

-p后面要接/sys下的目录,一般这么用:

udevadm info -a -p $(udevadm info -q path /dev/sdb1)

-n, --name=FILE

设备节点或软连接的名称(例如 [/dev]/sda)。 因为此选项是位置参数以 /dev/ 开头时的替代, 所以通常将 udevadm info --name=sda 直接简写为 udevadm info /dev/sda

-a, --attribute-walk

按照udev规则的格式,显示所有可用于匹配该设备的sysfs属性: 从该设备自身开始,沿着设备树向上回溯(一直到树根), 显示沿途每个设备的sysfs属性。

udevadm info -a /dev/sda1

-d, --device-id-of-file=FILE

显示 FILE 文件所在底层设备的主/次设备号。 如果使用了此选项,那么将忽略所有位置参数。

2 udevadm trigger [options] [devpath|file|unit] 

强制内核触发设备事件,主要用于重放内核初始化过程中的冷插(coldplug)设备事件。 

udevadm trigger /dev/sda1

3 udevadm settle [options] 

监视udev事件队列,并且在所有事件全部处理完成之后退出。

4 udevadm control option

控制udev守护进程(systemd-udevd)的内部状态。

-e, --exit

向 systemd-udevd 发送"退出"信号并等待其退出。因为 systemd-udevd.service 中含有 Restart=always ,所以此选项实际是重启了 systemd-udevd 。 

udevadm control -e

systemctl status systemd-udevd.service显示static,原来是可以强制关掉的,需要把相关socket关掉.

如果你想停止 systemd-udevd.service ,那么应该使用:

systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd.service

-l, --log-priority=value

设置 systemd-udevd.service(8) 的内部日志等级。 可以用数字或文本表示: remerg(0), alert(1), crit(2), err(3), warning(4), notice(5), info(6), debug(7)

-s, --stop-exec-queue

向 systemd-udevd 发送"禁止处理事件"信号, 这样所有新发生的事件都将进入等候队列。

-S, --start-exec-queue

向 systemd-udevd 发送"开始处理事件"信号,也就是开始处理事件队列中尚未处理的事件。

-m, --children-max=value

设置最多允许 systemd-udevd 同时处理多少个设备事件。

--ping

向 systemd-udevd 发送一个"ping"消息并等待应答。用于检查 systemd-udevd 守护进程是否仍在正常运行。

5 udevadm monitor [options] 

监视内核发出的设备事件(以"KERNEL"标记), 以及udev在处理完udev规则之后发出的事件(以"UDEV"标记),并在控制台上输出事件的设备路径(devpath)。

可用于分析udev处理设备事件所花的时间(比较"KERNEL"与"UDEV"的时间戳)。

udevadm monitor

配合udevadm trigger /dev/sda1测试

-s, --subsystem-match=subsystem[/devtype]

根据 subsystem[/devtype] 对事件(包括 kernel uevent 与 udev event)进行过滤,仅显示与"子系统[/设备类型]"匹配的"UDEV"事件。 

如果多次使用此选项,那么表示以 OR 逻辑连接每个匹配规则, 也就是说,所有指定子系统中的设备都会被监视。

-t, --tag-match=string

根据设备标签对事件(仅 udev event)进行过滤,仅显示与"标签"匹配的"UDEV"事件。 

如果多次使用此选项,那么表示以 OR 逻辑连接每个匹配规则, 也就是说,拥有任一指定标签的设备都会被监视。

6 udevadm test [options] [devpath] 

模拟一个设备事件,并输出调试信息。

udevadm test /sys/class/block/sda1


[2] udev

1 描述

udev 能够处理设备事件、管理设备文件的权限、 在 /dev 目录中创建额外的符号链接、重命名网络接口,等等。

内核通常仅根据设备被发现的先后顺序给设备文件命名, 因此很难在设备文件与物理硬件之间建立稳定的对应关系。 

而根据设备的物理属性或配置特征创建有意义的符号链接名称或网络接口名称, 就可以在物理设备与设备文件名称之间建立稳定的对应关系。

udev守护进程(systemd-udevd.service(8)) 直接从内核接收设备的插入、拔出、改变状态等事件, 并根据这些事件的各种属性, 到规则库中进行匹配,以确定触发事件的设备。 

被匹配成功的规则有可能提供额外的设备信息,这些信息可能会被记录到udev数据库中, 也可能会被用于创建符号链接。

udev处理的所有设备信息都存储在udev数据库中, 并且会发送给可能的设备事件的订阅者。 可以通过 libudev 库访问udev数据库以及设备事件源。

2 规则文件

规则文件分别位于:

系统规则目录(/usr/lib/udev/rules.d)、 运行时规则目录(/run/udev/rules.d)、 本机规则目录(/etc/udev/rules.d)。 所有的规则文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。 

对于不同目录下的同名规则文件,仅以优先级最高的目录中的那一个为准。 具体说来就是: /etc/ 的优先级最高、 /run/ 的优先级居中、 /usr/lib/ 的优先级最低。 

如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个规则文件, 那么最佳做法是在 /etc/ 目录中创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。 

注意,规则文件必须以 .rules 作为后缀名,否则将被忽略。

每行必须至少包含一个"键-值"对。 "键"有两种类型:匹配与赋值。 

如果某条规则的所有匹配键的值都匹配成功,那么就表示此条规则匹配成功, 也就是此条规则中的所有赋值键都会被赋予指定的值。

一条匹配成功的规则可以:重命名网络接口、为某个设备文件添加一个软连接、运行一个指定的程序等等。

":="

(赋值)为键赋予指定的值,并视为最终值,也就是禁止被继续修改。

Linux通过sysfs以树状结构展示设备,例如硬盘是SCSI设备的孩子、SCSI设备又是ATA控制器的孩子、 ATA控制器又是PCI总线的孩子。

而你经常需要从父设备那里引用信息, 比如硬盘的序列号就是通过父设备(SCSI设备)展现的。

DEVPATH

匹配设备的路径(也就是该设备在sysfs文件系统下的相对路径)。

[举例] /dev/sda1 对应的 devpath 是 /block/sda/sda1 (一般对应着 /sys/block/sda/sda1 目录)。

KERNEL

匹配设备的内核名称。"内核名称"是指设备在sysfs里的名称,也就是默认的设备文件名称,例如"sda"。

ATTR{文件}

匹配设备在sysfs中的属性值。属性值中的尾部空白会被忽略,除非指定的值自身就包含尾部空白。 

[译者注]大括号中的"文件"是指设备路径(devpath)下的文件。 例如,对于 /dev/sda1 来说,ATTR{size} 的含义其实是指 /sys/block/sda/sda1/size 文件的内容。

SYSCTL{内核参数}

匹配"内核参数"的值。[译者注]所谓"内核参数"其实是指 /proc/sys/ 中的"内核参数"。

例如,可以用 SYSCTL{kernel/hostname} 匹配 /proc/sys/kernel/hostname 的值。

KERNELS

匹配设备及其所有父设备的内核名称

ENV{设备属性}

匹配设备的属性。例如 "DEVTYPE", "ID_PATH", "SYSTEMD_WANTS" 等等。

[提示]可以通过 udevadm info --query=property /dev/sda 命令查看 /dev/sda 的所有属性。

PROGRAM

执行指定的程序并检查返回值, 如果返回值为零,则匹配成功,否则匹配失败。 设备的属性会转化为该程序的环境变量供其使用。 同时该程序的标准输出会被 自动保存在 RESULT 键中。

注意,仅可用于执行时间很短的前台程序。 参见 RUN

下面的键可用于赋值:

NAME

设置网络接口的名称。参见 systemd.link(5) 以了解设置网络接口名称的高级机制。 

实际上,udev 并不能直接修改网络接口的设备节点名称, 只是额外创建了一个符号链接而已。

RUN{类型}

对于每一个设备事件来说,在处理完所有udev规则之后, 都可以再接着执行一个由此键设置的程序列表(默认为空)。 

不同的"类型"含义如下:

"program"

一个外部程序, 如果是相对路径, 那么视为相对于 /usr/lib/udev 目录。 否则必须使用绝对路径。

如果未明确指定"类型", 那么这是默认值。

"builtin"

与 program 类似, 但是仅用于表示内置的程序。

程序名与其参数之间用空格分隔。 如果参数中含有空格,那么必须使用单引号(')界定。

仅可使用运行时间非常短的前台程序, 切勿设置任何后台守护进程或者长时间运行的程序。

设备事件处理完成之后, 所有派生的进程(无论是否已经分离), 都将会被无条件的杀死。

注意,禁止在 udev 规则中运行访问网络、或挂载/卸载文件系统的程序, 因为在 systemd-udevd.service 中强制使用了默认沙盒机制。

可用的替换标记如下:

$kernel, %k

设备的内核名称

$number, %n

设备在内核中的序号。例如,对于 "sda3" 来说,此值为 "3"


[3] systemd-udevd.service    

/usr/lib/systemd/systemd-udevd

systemd-udevd.service

systemd-udevd-control.socket

systemd-udevd-kernel.socket

systemd-udevd 监听内核发出的设备事件, 并根据 udev 规则处理每个事件

内核引导选项

注意,下面以"rd."开头的参数 仅用于 initrd 环境。

udev.log_priority=, rd.udev.log_priority=

设置日志等级

udev.children_max=, rd.udev.children_max=

限制最多同时并行处理多少个设备事件


[4] udev.conf

systemd-udevd 将使用 /etc/udev/udev.conf 作为主配置文件。该文件包含一组允许用户修改的变量( VAR=VALUE 格式),以控制该进程的行为。 

udev_log=日志等级。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[2020.1.19][udev] 金步国udev 的相关文章

  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • 使用 posix_spawn 启动进程

    我正在使用以下代码在 Linux 中启动新进程 pid t processID char argV 192 168 1 40 char 0 int status 1 status posix spawn processID home use
  • Raspberry 交叉编译 - 执行程序以“分段错误”结束

    我有一个自己编写的程序 我想从我的 x86 机器上为 Raspberry Pi 构建它 我正在使用 eclipse 生成的 makefile 并且无法更改此内容 我已经阅读了 CC for raspi 的教程 Hackaday 链接 htt
  • 捕获数据包后会发生什么?

    我一直在阅读关于网卡捕获数据包后会发生什么的内容 我读得越多 我就越困惑 首先 我读过传统上 在网卡捕获数据包后 它会被复制到内核空间中的一个内存块 然后复制到用户空间 供随后处理数据包数据的任何应用程序使用 然后我读到了 DMA 其中 N
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • 找出 Linux 上的默认语言

    有没有办法从C语言中找出Linux系统的默认语言 有 POSIX API 可以实现这个功能吗 例如 我想要一个人类可读格式的字符串 即德语系统上的 German 或 Deutsch 法语系统上的 French 或 Francais 等 有类
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际

随机推荐

  • 04-----无法执行二进制文件: 可执行文件格式错误

    这个问题一般是gcc的命令参数导致的 例如我在cmake添加如下参数 set CMAKE CXX FLAGS DEBUG ENV CXXFLAGS O0 g ggdb3 Wall std c 11 fPIC 生成的可执行文件会很小 在生成的
  • 二:PWM配置

    1 PWM其实是一个定时器 配置这些寄存器要注意 需要打开特殊功能寄存器的开关 1 程序 P SW2 0x80 最高位EAXFR置1 允许访问XFR寄存器 P SW2的B7位要置1 才能使用特殊功能寄存器哦 2 打开想要使用PWM模块的时钟
  • 给我一个爬取天气数据的Python程序

    这是一个使用 Python 爬取天气数据的简单示例 import requests def get weather data city 向天气 API 发起请求 url https api openweathermap org data 2
  • 主充/pd charger 调试精品文章转载

    PD充电调试问题解析 一 之前一直对充电的调试有了解 这次经过一个案子 对最新的充电技术和方案有所了解 现记录一下 充电框图 几个关键的概念 1 PD的输出电流 电压 他的对象是 充电IC PD Out gt gt Charge IN 2
  • Java:多线程概述与创建方式

    文章目录 Java 多线程概述与创建方式 进程和线程 并发与并行 多线程的优势 线程的创建和启动 继承Thread类 start 和run 实现Runnable接口 实现Callable接口 创建方式的区别 Java 多线程概述与创建方式
  • 垃圾回收机制

    垃圾回收机制 垃圾回收一般分为两步 分别是 1 发现无用的对象 2 回收无用对象站用的内存空间 垃圾回收常用的两种算法 1 引用计数法 优点是算法简单 缺点是 循环引用大额无用对象无法识别 2 引用可达法 根搜索算法 堆内存划分成 年轻代
  • docker---runlike查看容器run命令详情

    文章目录 一 安装 二 使用 一 安装 一般情况下linux系统中都内置了pip3 没有的话先手动安装下 yum install python3 pip 安装runlike pip3 install runlike 二 使用 runlike
  • html为什么图片有的显示不出来,网页显示不出图片怎么办 6种常见的解决方案详解...

    我们上网的时候 可能因为种种原因导致网页显示不出图片 那么网页显示不出图片怎么办呢 有哪些解决的方法 接下来小编就简单的给大家介绍一下网页显示不出图片怎么办 网页显示不出图片怎么办 1 网速问题 网页显示不出图片有可能是因为电脑的网速比较慢
  • 【每日练习】从两个数字数组里生成最小数字

    题目描述 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 每个数组中的元素 互不相同 请你返回最小的数字 两个数组都至少包含这个数字的某个数位 示例 示例 1 输入 nums1 4 1 3 nums2 5 7 输出
  • Seaweedfs部署

    软件下载地址 https github com seaweedfs seaweedfs releases 创建工作目录 mkdir wkspace contribs seaweedfs 将下载的组件包放到此目录下 解压组件包 tar xvf
  • tar打包隐藏文件

    默认情况下 tar打包当前目录是不会包含隐藏文件的 但奇葩的是 他会包含当前目录子目录下的隐藏文件 bm6j80 aaa find aa aa cc bb bm6j80 aaa tar cvf test tar aa aa cc bb bm
  • 数组对象深拷贝

    数组对象深拷贝再研究 常见的深层数组对象拷贝方式有 concat 解构 JSON解析 函数递归等 concat var ary2 ary1 concat es6解构 var ary2 ary1 var ary2 ary1 JSON解析 va
  • 6行代码最简单的VB6标准DLL工程

    vb6可以做标准DLL方法很简单 利用了一个微软未公开的方法 不需要LINK工具 牛人还可以把DLL加上多线程等功能 再加上VB头初始化 VB6标准DLL就无所不能了 VB6做的控件 又是标准DLL 又是COM对象 还可以单文件运行 exe
  • Spring3学习笔记之(spring core 之DI(Bean作用域))

    Bean的作用域 什么是作用域呢 即 scope 在面向对象程序设计中一般指对象或变量之间的可见范围 而在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围 Spring提供 singleton 和 protot
  • 深度强化学习系列: “奖励函数”的设计和设置(reward shaping)

    概述 前面已经讲了好几篇关于强化学习的概述 算法 DPG gt DDPG 也包括对环境OpenAI gym的安装 baseline算法的运行和填坑 虽然讲了这么多 算法也能够正常运行还取得不错的效果 但是一直以来忽略了一个非常重要的话题 那
  • 【100%通过率 】华为O机试C++/java/python【箱子之字形摆放】 2022 Q4 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 有一批箱子 形式为字符串 设为str 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地 请输出箱子的摆放位置 例如 箱子ABCDE
  • Yolov5的安装配置及实现目标检测

    本文内容 本文主要介绍anaconda下yolov5的安装配置方法 以及如何实现目标检测 目录 一 yolov5的下载安装 一 环境配置 二 下载yolov5 二 yolov5测试 一 图片测试 二 视频测试 三 调用手机摄像头实现实时检测
  • 如何使用 Docker 部署 FreeGPT-WebUI:一个简单的教程

    目录 1 FreeGPT WebUI 项目简介 2 安装 Docker 3 从 Docker Hub 拉取 FreeGPT WebUI 镜像 4 使用 Docker 运行 FreeGPT WebUI 应用程序 5 访问 FreeGPT We
  • python菜鸟学习Day1(数据类型)

    第一节 数据类型 int 整型 python2中有int long python3中只有int float 浮点型 string 字符串型 bool 布尔型 变量命名 字母 数字 下划线 数据不能开头 大小写敏感 不能和系统关键字 函数名
  • [2020.1.19][udev] 金步国udev

    金步国index里有4条udev相关的 1 udevadm 2 udev 3 systemd udevd service udevd守护进程 4 udev conf 1 udevadm 1 udevadm info options devp