【全志H616开发】Linux的热拔插UDEV机制

udev简介

Udev 是 Linux 系统中设备管理的一部分,它负责管理动态设备节点并处理设备的热插拔。Udev 提供了一种在用户空间管理设备节点的机制,可以在设备插入或移除时自动执行相应的操作。

  • Udev 是 Linux 内核 2.6 及以后版本的设备管理框架。
  • 它负责在 /dev 目录中创建和删除设备文件。
  • Udev 通过监听内核发送的 udev 事件来响应设备的插入和拔出。

工作原理

  • 内核中有一个设备管理系统(例如 hotplug),它会在设备插入或拔出时生成 uevent。
  • Udev 守护进程(udevd)会监听这些 uevent 事件。
  • 当 udevd 收到 uevent 后,会根据配置文件中的规则进行处理,包括命名设备文件、设置权限、创建符号链接等。
    在这里插入图片描述
    应用层调用:库函数->系统调用->内核->硬件;

Udev 配置文件和规则

  • Udev 的配置文件通常位于 /etc/udev/udev.conf,它定义了 Udev 的全局配置选项。
  • 规则文件通常存放在 /etc/udev/rules.d/ 和 /lib/udev/rules.d/ 目录中。
  • 规则文件的命名格式为 NN-name.rules,其中 NN 表示优先级,name 为规则名称。

    为何要创建规则文件:
    当插入usb设备时,内核识别到usb设备,但应用层检测不到设备,所以创建规则文件是为了让udev机制能认识他是usb类型设备,或者其他类型设备,当内核识别到了usb设备,发出uevent事件,Udev会根据配置文件中的规则进行处理
    下面创建对应的设备文件。

当没有创建文件时,连接手机会出现如下错误
List of devices attached
FMLDU20103009685 no permissions (user in plugdev group; are your udev rules wrong?); see [http://developer.android.com/tools/device.html]
在这里插入图片描述
解决:创建规则文件,见示例

规则语法

  • 规则格式:MATCH_KEYS==”value”, ACTION_KEYS=”value”
  • 常用匹配条件:KERNEL, SUBSYSTEM, ATTR, ENV, NAME, SYMLINK, OWNER, GROUP,
    MODE。
  • 常用操作:RUN, IMPORT, GOTO, LABEL, OPTIONS。

示例

cd 到如下目录

cd /etc/udev/rules.d

添加配置,文件名随便写

sudo vim huaWei-android.rules

输入:SUBSYSTEM==“usb”, ENV{DEVTYPE}==“usb_device”, MODE=“0666”

这样就是建立了usb热拔插规则的文件

重新拔插,确保手机USB调试打开
在这里插入图片描述
在这里插入图片描述

总结:

当设备插入,内核知道后,发出uevent,udev设备工具一直在监听,监听到uevent后,根据规则文件的规则(可以是自己创建的),判断它是什么类型的设备,并在/dev下面为它创建对应的设备文件,这样应用层就通过文件句柄访问到设备了;

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过udev配置来实现Linux中的热拔,具体步骤如下: 1. 确认设备节点 首先需要确认设备节点,可以通过以下命令查看: ``` dmesg | tail ``` 在入设备后,系统会输出设备信息,其中包括设备节点信息。例如,如果入的是USB设备,通常会以`/dev/sdx`的形式显示。 2. 创建udev规则 在`/etc/udev/rules.d/`目录下创建一个新的规则文件,例如`10-usb.rules`,并在文件中添加以下内容: ``` ACTION=="add", KERNEL=="sd*", RUN+="/path/to/mount_script" ACTION=="remove", KERNEL=="sd*", RUN+="/path/to/unmount_script" ``` 其中,`/path/to/mount_script`和`/path/to/unmount_script`分别为挂载和卸载脚本的路径,可以根据实际情况进行修改。 3. 编写挂载脚本和卸载脚本 在指定的路径下分别创建挂载脚本和卸载脚本,例如`mount_script`和`unmount_script`,并分别添加以下内容: 挂载脚本: ``` #!/bin/bash DEVICE=$1 MOUNT_POINT="/mnt/usb" mkdir -p "${MOUNT_POINT}" mount "${DEVICE}" "${MOUNT_POINT}" ``` 卸载脚本: ``` #!/bin/bash DEVICE=$1 umount "${DEVICE}" ``` 注意,需要给挂载脚本和卸载脚本添加可执行权限: ``` chmod +x /path/to/mount_script chmod +x /path/to/unmount_script ``` 4. 重载udev规则 完成以上步骤后,需要重载udev规则使其生效: ``` sudo udevadm control --reload-rules ``` 现在,当入/拔出设备时,系统会自动执行指定的脚本进行挂载/卸载操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值