首页 > 其他分享 >驱动绑定 【ChatGPT】

驱动绑定 【ChatGPT】

时间:2023-12-10 13:00:46浏览次数:40  
标签:驱动程序 绑定 总线 列表 移除 驱动 ChatGPT 目录 设备

驱动绑定

驱动绑定是将设备与能够控制它的设备驱动程序关联起来的过程。通常由总线驱动程序处理这一过程,因为总线特定的结构用于表示设备和驱动程序。使用通用设备和设备驱动程序结构后,大部分绑定可以使用通用代码完成。

总线

总线类型结构包含系统中该总线类型上的所有设备列表。当为设备调用device_register时,它会被插入到该列表的末尾。总线对象还包含该总线类型上的所有驱动程序列表。当为驱动程序调用driver_register时,它会被插入到该列表的末尾。这两个事件触发驱动程序绑定。

device_register

当添加新设备时,会遍历总线的驱动程序列表以找到支持该设备的驱动程序。为了确定支持情况,设备的设备ID必须与驱动程序支持的设备ID之一匹配。比较ID的格式和语义是特定于总线的。与其尝试推导复杂的状态机和匹配算法,不如由总线驱动程序提供一个回调函数来比较设备与驱动程序的ID。如果找到匹配项,则总线返回1;否则返回0。

int match(struct device * dev, struct device_driver * drv);

如果找到匹配项,则设备的驱动程序字段被设置为该驱动程序,并调用驱动程序的探测回调函数。这使得驱动程序有机会验证它确实支持硬件,并且处于工作状态。

设备类

在成功完成探测后,设备将在其所属的类中注册。设备驱动程序属于一个且仅属于一个类,这在驱动程序的devclass字段中设置。调用devclass_add_device将设备枚举到类中,并实际上在类中注册设备,这是通过类的register_dev回调函数完成的。

驱动程序

当驱动程序附加到设备时,设备被插入到驱动程序的设备列表中。

sysfs

在总线的“devices”目录中创建一个符号链接,指向物理层次结构中设备的目录。

在驱动程序的“devices”目录中创建一个符号链接,指向物理层次结构中设备的目录。

在类的目录中为设备创建一个目录。在该目录中创建一个符号链接,指向sysfs树中设备的物理位置。

可以创建一个符号链接(尽管目前尚未执行此操作),指向设备的物理目录,指向其类目录或类的顶级目录。还可以创建一个指向其驱动程序目录的符号链接。

driver_register

当添加新驱动程序时,过程几乎与上述相同。遍历总线的设备列表以找到匹配项。跳过已经有驱动程序的设备。遍历所有设备,尽可能将尽可能多的设备绑定到驱动程序。

移除

当设备被移除时,其引用计数最终将变为0。当引用计数为0时,调用驱动程序的移除回调函数。它将从驱动程序的设备列表中移除,并将驱动程序的引用计数减一。两者之间的所有符号链接都将被移除。

当驱动程序被移除时,会遍历其支持的设备列表,并为每个设备调用驱动程序的移除回调函数。设备将从该列表中移除,并移除符号链接。

标签:驱动程序,绑定,总线,列表,移除,驱动,ChatGPT,目录,设备
From: https://www.cnblogs.com/pengdonglin137/p/17892418.html

相关文章

  • 硬件自旋锁框架 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/hwspinlock.html硬件自旋锁框架简介硬件自旋锁模块为异构处理器和不在单一共享操作系统下运行的处理器之间的同步和互斥提供硬件辅助。例如,OMAP4具有双核Cortex-A9、双核Cortex-M3和一个C64x+DSP,每个处理器运行不同的操作系......
  • 驱动模型 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/driver-model/index.htmlDriverModel(驱动程序模型)DriverBinding(驱动绑定)BusTypes(总线类型)DeviceDriverDesignPatterns(设备驱动程序设计模式)TheBasicDeviceStructure(基本设备结构)Devres-ManagedDeviceResou......
  • percpu 读写信号量 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/percpu-rw-semaphore.html"Percpurwsemaphores"是一种新的读写信号量设计,针对读取操作进行了优化。传统的读写信号量存在一个问题,即当多个核心获取读取锁时,包含信号量的缓存行在各个核心的L1缓存之间反复传输,导致性能下降......
  • 保持内核代码的可抢占安全 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/preempt-locking.html在可抢占内核下的适当锁定:保持内核代码的可抢占安全作者[email protected]介绍可抢占内核会引发新的锁定问题。这些问题与SMP下的问题相同:并发性和可重入性。幸运的是,Linux可抢占内核模型利......
  • 序列计数器和顺序锁 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/seqlock.html#序列计数器和顺序锁介绍序列计数器是一种具有无锁读取器(只读重试循环)和无写入者饥饿的读者-写者一致性机制。它们用于很少写入数据的情况(例如系统时间),其中读者希望获得一致的信息集,并且愿意在信息发生变化时重试......
  • 锁定课程 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/spinlocks.html锁定课程课程1:自旋锁用于锁定的最基本原语是自旋锁:staticDEFINE_SPINLOCK(xxx_lock);unsignedlongflags;spin_lock_irqsave(&xxx_lock,flags);...临界区域...spin_unlock_irqrestore(&xxx_lock,fl......
  • RT-mutex 实现设计【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/rt-mutex-design.htmlRT-mutex实现设计版权所有(c)2006StevenRostedt根据GNU自由文档许可证第1.2版许可本文档试图描述rtmutex.c实现的设计。它并不描述rtmutex.c存在的原因。有关此内容,请参阅带PI支持的RT-m......
  • 通用互斥子系统 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/mutex-design.html通用互斥子系统由[email protected]发起由[email protected]更新互斥锁是什么?在Linux内核中,互斥锁指的是一种特定的锁原语,它在共享内存系统上强制进行串行化,而不仅仅是指学术界......
  • 锁统计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/lockstat.html锁统计什么顾名思义,它提供了有关锁的统计信息。为什么因为诸如锁争用之类的问题会严重影响性能。如何Lockdep已经在锁函数中设置了钩子,并将锁实例映射到锁类上。我们在此基础上构建(参见运行时锁正确性验证器)......
  • 运行时锁定正确性验证器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/lockdep-design.html锁类该验证器操作的基本对象是“锁”的“类”。“锁”的“类”是一组逻辑上相同的锁,即使这些锁可能有多个(可能有成千上万个)实例化。例如,inode结构中的锁是一个类,而每个inode都有自己的该锁类的实例化。验......