===============================
本文系本站原创,欢迎转载!
转载请注明出处:http://blog.csdn.net/gdt_a20
===============================
内核的开发者将总线,设备,驱动这三者用软件思想抽象了出来,巧妙的建立了其间的关系,使之更形象化。结合前面所学的知识,总的来说其三者间的关系为bus有两条链表,分别用于挂接设备和驱动,指定了其自身bus的device或者driver最后都会分别连接到对应bus的这两条链表上,而总线又有其始端,为bus_kset,一个driver可以对应于几个设备,因此driver同样有其设备链表,用于挂接可以操作的设备,其自身也有bus挂接点,用于将自身挂接到对应bus(每个driver只属于一条总线),而对于device,一个设备只属于一条总线,只能有一个driver与其对应,因此对于device,都是单一的,一个driver挂接点,一个bus挂接点,device与bus相同的是都有始端,device为devices_kset,因此device的注册同时会出现在对应的bus目录和device总目录下。好了,下面就以源码为例分别分析一下bus,device,driver的注册过程。
一、bus的注册
bus的注册比较简单,首先来看一下bus的结构:
无论是bus,driver,还是device其本身特征都放在私有成员里,其注册时,都会申请并填充这个结构体,下面具体分析一下bus的注册流程,从bus_register开始:

本文深入剖析Linux内核中bus、device和driver的注册过程。首先,介绍了bus注册的步骤,包括bus_type_private结构体的初始化和设备、驱动链表的创建。接着,分析了driver注册,涉及driver_private结构体、driver_find函数以及如何将driver挂接到bus的driver链表。文章指出,driver注册时会尝试匹配设备并调用probe函数进行初始化。最后,文章强调了driver匹配和初始化的关键函数driver_match_device和driver_probe_device。下篇将继续探讨device的注册细节。
最低0.47元/天 解锁文章
919

被折叠的 条评论
为什么被折叠?



