Linux 内核 动态设备
术语"热插拔"最普遍使用的意义产生于当讨论这样的事实时, 几乎所有的计算机系统现在 能够处理当系统有电时设备的出现或消失. 这非常不同于只是几年前的计算机系统, 那时 程序员知道他们只需要在启动时扫描所有的设备, 并且他们从不必担心他们的设备消失直 到整个机器被关电. 现在, 随着 USB 的出现, CardBus, PCMCIA, IEEE1394, 和 PCI 热 插拔控制器, Linux 内核需要能够可靠地运行不管什么硬件从系统中增加或去除. 这产生 了一个额外的负担给设备驱动作者, 因为现在他们必须一直处理一个没有任何通知而突然 从地下冒出来的设备.
每个不同的总线类型以不同方式处理一个设备的消失. 例如, 当一个 PCI , CardBus, 或 者 PCMCIA 设备从系统中去除, 在驱动通过它的去除函数被通知之前常常是一会儿. 在发 生这个前, 所有的从 PCI 的读返回所有的位集合. 这意味着驱动需要一直检查它们从 PCI 总线读取的值并且能够正确处理 0xff 值.
这个的一个例子可在 drivers/usb/host/ehci-hcd.c 驱动中见到, 它是一个 PCI 驱动给 一个 UBS 2.0(高速)控制卡. 它有下面的代码在它的主握手循环中来探测是否控制块已经 从系统中去除.
result = readl(ptr);
if (result == ~(u32)0) /* card removed */ return -ENODEV;
对于 USB 驱动, 当一个 USB 驱动被绑定到的设备被从系统中去除, 任何挂起的已被提交 给设备的 urbs 以错误 -ENODEV 失败. 如果发生这个情况, 驱动需要识别这个错误并且 正确清理任何挂起的 I/O .
可热插拔的设备不只限于传统的设备, 例如鼠标, 键盘, 和网卡. 有大量的系统现在支持 整个 CPU 和内存条的移出. 幸运地, Linux 内核正确处理这些核心"系统"设备的加减, 以至于单个设备驱动不需要注意这些事情.
相关文章
- [Linux]linux如何把文件切成多块
- Linux 设备总线驱动模型
- linux lcd设备驱动剖析三
- 【刷题】Linux进程通信方式
- Linux CentOS 6.x设置静态IP(亲测有效)
- Linux 设备树 DTS DTB DTC
- dlopen 方式调用 Linux 的动态链接库
- 【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )
- 【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )
- linux shell sha256sum 和 md5sum 文件校验
- L83.linux命令每日一练 -- 第11章 Linux系统管理命令 -- ipcs和ipcrm
- L82.linux命令每日一练 -- 第11章 Linux系统管理命令 -- dmidecode和lspci
- L69.linux命令每日一练 -- 第十章 Linux网络管理命令 -- arpping和telnet
- L68.linux命令每日一练 -- 第十章 Linux网络管理命令 -- ping和traceroute
- L60.linux命令每日一练 -- 第九章 Linux进程管理命令 -- top和nice
- L35.linux命令每日一练 -- 第五章 Linux信息显示与搜索文件命令 -- which和whereis
- Linux下安装百度Paddle
- 嵌入式Linux开发,Ubuntu22下交叉编译报错:make[1]: aarch64-linux-gnu-gcc: No such file or directory
- 嵌入式Linux开发,Ubuntu下交叉编译内核报错:error while loading shared libraries: /lib/x86_64-linux-gnu/libc++.so:
- conda安装r Linux系统中 linux中安装r
- Linux读写I2C设备I2C_RDWR用法
- 重新启动linux上的tomcat
- LINUX设备驱动程序的注意事项(两)建设和执行模块
- 《Linux Device Drivers》第十四章 Linux 设备型号
- 【linux设备模型】之platform设备驱动
- linux 下svn忽略文件
- linux设备节点侦测——基于inotify
- Linux下修改触摸板默认行为的方法、所遇问题及解决