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

八、热插拔

一、概述

  1. udev设备文件系统,基于netlink-socket,用户态监听内核发出的uevent事件处理设备的插入和拔出
  2. mdev设备文件系统,是udev的轻量级,基于uevent_helper,内态调用用户注册的回调函数处理设备的插入和拔出
  3. udevadm monitor监听uevent事件
  4. netlink的用户态实现参开socket,但是没有bind函数
  5. usbmount可以配合udev实现U盘的自动挂载,文件系统中添加该工具即可

二、关键结构体和API

// 内核发送一个事件,对应的kobj必须有对应的kset
int kobject_uevent(struct kobject *kobj, enum kobject_action action);
// kset中的uevent_ops成员对发送的uevent进行操作
struct kset_uevent_ops {int (* const filter)(struct kset *kset, struct kobject *kobj);            // 对kset的kobject进行过滤const char *(* const name)(struct kset *kset, struct kobject *kobj);      // 获得kset的kobject的nameint (* const uevent)(struct kset *kset, struct kobject *kobj,        struct kobj_uevent_env *env);                                   // 设置env
};
// kobject_uevent函数关于udev监听的重要函数
kobject_uevent_net_broadcast      // 该函数广播uevent
// kobject_uevent函数关于mdev的重要函数
call_usermodehelper_setup         // 启动一个用户空间进程

三、使用udev自动挂载

  1. 配置文件系统,/dev/management (Dynamic using devtmpfs+eudev)
  2. 添加规则文件/etc/udev/rules.d/001.rules
  3. 实现规则文件和其配套文件,参数sd对应U盘,参数mmcblk对应SD卡
KERNEL=="sd[a-z][0-9]", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/usb/usb-add.sh %k" SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/usb/usb-remove.sh"
  1. 挂载脚本
#!/bin/sh
/bin/mount -t vfat /dev/$1 /mnt
sync
  1. 卸载脚本
#!/bin/sh
sync
/bin/umount -l /mnt

四、使用mdev自动挂载

  1. 配置文件系统,/dev/management (Dynamic using devtmpfs+mdev)
  2. 配置busybox的mdev
  3. 添加规则文件/etc/mdev.conf,,参数sd对应U盘,参数mmcblk对应SD卡
  4. 添加规则
sd[a-z][0-9] 0:0 666 @/etc/mdev/usb_insert.sh
sd[a-z] 0:0 666 $/etc/mdev/usb_remove.sh
  1. 挂载脚本
#!/bin/sh
if [ -d /sys/block/*/$MDEV ]; then
mount /dev/$MDEV /mnt
sync
fi
  1. 卸载脚本
#!/bin/sh
sync
/bin/umount -l /mnt
http://www.jsqmd.com/news/52095/

相关文章:

  • 第37天(中等题 数据结构)
  • PostgreSQL权限管理实践
  • 预编译命令
  • 2025 KEYDIY KD-MP: Add Keys for MLB MQB – Key Identification, Data, Calculation
  • 把 CLI 搬上 Web:在内网打造“可二开”的 AI IDE,为什么这条路更现实? - 指南
  • [LangChain] 23. 回调机制
  • freedom of speech
  • 七、设备模型
  • Scrum冲刺阶段 Day Three
  • 鼎鉴时代锋芒 智启品牌新章 ——2025品牌智鉴榜荣耀登临
  • 迈向人机共育的文明语法:AI元人文理论体系深度阐释——内观照叙事模型
  • 深入解析:MTK5G旗舰系列——天玑9500/9400/9300/9200/9000在AI和处理器性能、DDR频率及UFS的深度对比分析
  • Day25综合案例一--CSS精灵--京东服务
  • Intellij扩展列表
  • agentic terminal coding
  • the badness of USA
  • 2025年11月26日
  • Day3 Scrum冲刺博客
  • 完整教程:内核里常用宏BUG_ON/WARN_ON/WARN_ONCE
  • 贪心专题笔记(从b站左程云老师那上完后的笔记)
  • Agent编写全攻略(超详细)从零基础到精通,一篇搞定,不看后悔,赶紧收藏!
  • 做题警醒
  • 动态规划可能性展开
  • 微软发布 Godot C# 游戏开发教程:godot-csharp-essentials
  • Day3-20251126
  • [KaibaMath]1028 关于[log(m, a)]+1=⌈log(m+1, a)⌉的证明
  • QT TCP服务器构建及网络通信实现 - 详解
  • SCTimer/PWM定时器(续二)
  • 软件工程学习日志2025.11.26
  • [KaibaMath]1027 关于mn ⇔ m≥n+1(m,n均为整数)的证明