Linux热插拔hotplug处理流程
将可移动设备连入系统时,系统的后台中会依次发生如下事件:
1、 内核检测到新硬件插入,然后分别通知hotplug和udev。前者用来装入相应的内核模块(如usb-storage),而后者用来在/dev中创建相应的设备节点(如/dev/sda1)。
2、 udev创建了相应的设备节点之后,会将这一消息通知hal的守护程序(hald)。当然udev还得保证新创建的设备节点可以被普通用户访问。
3、 hotplug装入了相应的内核模块之后,会把这一消息通知给hald。
4、 hald在受到hotplug和udev发出的消息之后,认为新硬件已经正式被系统认可了。此时它会通过一系列精心编写的规则文件(就是传说中的xxx-policy.fdi),把发现新硬件的消息通过dbus发送出去,同时还会调用update-fstab或fstab-sync来更新/etc/fstab,为相应的设备节点创建适合的挂载点。
hotplug 包和内核里的hotplug模块不是一回事,2.6内核里的pci_hotplug.ko是一个内核模块,而hotplug包是用来处理内核产生的hotplug事件。这个软件包还在引导时检测现存的硬件并在运行的内核中加载相关模块。
不但有热插拔,还有冷插拔(cold pluging)。热插拔在内核启动之后发生,而“cold pluging”发生在内核启动的过程中。
/etc/hotplug/.rc 这些脚本用于冷插拔(检测和激活在系统启动时已经存在的硬件)。它们被hotplug 初始化脚本调用。.rc 脚本会尝试恢复系统引导时丢失的热插拔事件,举例来说,内核没有挂载根文件系统。
/etc/hotplug/*.agent这些脚本将被 hotplug调用以响应内核产生的各种不同的热插拔事件,导致插入相应的内核模块和调用用户预定义的脚本。
/sbin/hotplug内核默认情况下将在内核态的某些事情发生变化时(如硬件的插入和拔出)调用此脚本。
发送热插拔事件的子系统(subsystem)包括总线驱动(USB、PCI等)和一些设备的抽象层(网络接口、磁盘分区等)。它们通过/sbin/hotplug的第一个参数来识别。
对于设备驱动来说,需要在代码里设置MODULE_DEVICE_TABLE,指向驱动程序感兴趣的设备的设备ID列表。
参考链接:
http://blog.chinaunix.net/uid-7374279-id-5677690.html
ACPI相关
https://blog.csdn.net/qq_21186033/article/details/116975453?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-3.pc_relevant_default&utm_relevant_index=6
内核PCI扫描过程
https://blog.csdn.net/weixin_30364147/article/details/96563236
Linux内核笔记之PCIe hotplug介绍及代码分析
https://blog.csdn.net/yhb1047818384/article/details/99705972?spm=1001.2014.3001.5502
Linux热插拔hotplug处理流程相关推荐
- Linux | PCIe Hotplug | 概念及工作原理的不完全总结
本文对 PCIe 热插拔的概念及工作原理进行不完全总结. 更新: 2022 / 12 / 31 Linux | PCIe Hotplug | 概念及工作原理的不完全总结 热插拔 组成部件 实现代码 通 ...
- linux驱动加载流程分析
linux驱动加载流程分析 内核是如何加载驱动的,有些是编译到内核里面,有些事编译成ko,让系统自动加载.总的说来,在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动 ...
- Linux下服务器端开发流程及相关工具介绍(C++)
原文:Linux下服务器端开发流程及相关工具介绍(C++) 去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把 ...
- linux驱动程序是什么,简述一个Linux驱动程序的主要流程与功能
1. 简述一个Linux驱动程序的主要流程与功能. 2. 请列举一个软件中时间换空间或者空间换时间的例子. void swap(int a,int b) { int c; c=a;a=b;b=a; } ...
- Linux基本管理七大流程
Linux基本管理七大流程 环境:centos7.6系统,IP为192.168.11.11,具体操作环境依实际环境为准 1.通过rc.local脚本文件实现光盘的自动挂载,关闭selinux和防火墙功 ...
- Linux系统管理-开机启动流程
Linux系统管理-开机启动流程 文章目录 Linux系统管理-开机启动流程 CentoOS6的开机启动流程 CentOS6忘记root密码 Linux的关机指令 CentOS7的开机启动流程 Cen ...
- 嵌入式Linux系统环境搭建全流程-4412友善之臂开发板
4412友善之臂开发板-Linux系统环境搭建全流程 没错,这篇确实值得一看!可能是由于我稍微会一点点哈,就有好多小伙伴就找我帮他们搭建环境,但Linux中的以及开发版连接,与烧写程序中的整个环境 ...
- Linux 系统注册系统服务流程
Linux 系统注册系统服务流程 在/etc/systemd/system定义test.service文件(以定义启动nginx服务为例子) [Unit] Description=nginx serv ...
- 简单记录linux 宝塔建站流程
linux宝塔建站流程 官网非常详细 https://www.bt.cn/bbs/thread-19376-1-1.html 1.官网选择系统版本 2.有服务器的 远程连接系统 3.获取su权限 su ...
最新文章
- 硅谷产品实战-总结:23、增长的核心在于减少用户阻力
- Logistic Classification
- php 提取登录QQsid_php模拟登录qq邮箱(curl命令详解)
- 安全方向比路由交换难吗_「网工进阶」路由交换:链路聚合的配置,你都会吗...
- 立即生效!帕特·基辛格卸任 VMware 所有职务
- DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)
- 夹具PHP,PHP类的静态(static)方法和静态(static)变量
- 中职计算机操作系统,中职计算机应用基础操作系统试题
- C#RSACryptoServiceProvider加密
- 电脑与电脑之间快速传输大文件的方法
- 使用 Docker 搭建 mysql 数据库
- 交互设计师眼中的需求分析
- Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置
- iOS应用中crash 奔溃解析
- 关键词下降应该怎么办?
- 加州大学计算机硕士录取率是多少,加州大学发布2021录取数据,录取率全面下降,UCLA要跌破10%了!...
- 查询各科分数最高的科目名称,学生学号,姓名,分数,排名
- 计算机语言学专业排名,语言学专业排名
- 分享几个常用的运维 shell 脚本
- N78上手咯!开箱全记录
热门文章
- tp5的时间查询,查询时间戳是否在某一天中
- 递归实现 1,1,2,3,5,8,….第 30 个数是多少?
- 如何找到隐式转换的SQL?
- 德家:你知道吗?朋友圈里的微商传销正在疯狂蔓延
- 《舍得让你爱的人受苦》读后感
- Vagrant + VMBox 踩坑记录
- html5+ mui框架 微信授权登录无响应,不回跳APP
- ES6 Math新增方法trunc() sign() cbrt()
- 苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景
- xposed定位插件_模拟位置xposed