加载中…
个人资料
byte_x
byte_x
  • 博客等级:
  • 博客积分:0
  • 博客访问:30,380
  • 关注人气:11
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Linux设备模型 之 总线类型 - bus_type

(2008-05-27 14:29:34)
标签:

it

分类: kernel


bus_type

相关数据结构:

struct bus_type {
 char   * name;

 struct subsystem subsys;
 struct kset  drivers;
 struct kset  devices;

 struct bus_attribute * bus_attrs;
 struct device_attribute * dev_attrs;
 struct driver_attribute * drv_attrs;

 int  (*match)(struct device * dev, struct device_driver * drv);
 int  (*hotplug) (struct device *dev, char **envp,
        int num_envp, char *buffer, int buffer_size);
 int  (*suspend)(struct device * dev, pm_message_t state);
 int  (*resume)(struct device * dev);
};


内核所支持的每一种总线类型都由一个bus_type对象表示。
bus_type中内嵌了一个subsystem - subsys。
系统中的bus_subsys子系统将所有的bus_type中的subsys集合在一起。
bus_subsys对应sysfs中的/sys/bus目录.

另外,bus_type中有两个内嵌的kset对象:devices 和 drivers。分别表示该bus上的设备和驱动。

                                                          
                            
                                                           
                                                           
                                                           
  /------------------------>       bus_type       <-------------------------\
                         +--------------------+                          |
                                                                   |
                           name                                    |
                         +--------------------+                          |
                                   kset                            |
                                +--------+ |                          |
                                | subsys | |                          |
                         | drivers +--------+ |                          |
                                | kobj   | |                          |
                                +--------+ |                          |
                                | list   | |                          |
                                +--------+ |                          |
                                      | |                          |
                         +--------------------+                          |
                                   kset                            |
                                +--------+ |                          |
                                | subsys | |                          |
                         | devices +--------+ |                          |
                                | kobj   | |                          |
                                +--------+ |                          |
  /------------------------------->| list   |<----------------------\    |
                             +--------+ |                       |
                                   | |                       |
                      +--------------------+                       |
                                                             |
                       subsys                                |
                                                             |
                      +--------------------+                       |
                                                             |
                                                             |
                                                             |
                                                                   |
                                                                   |
       device                                      device          |
   +-------------+                             +-------------+     |
     node                                  node        |
   +-------------+                             +-------------+     |
  \-->|  bus_list   |<-------  ......  ---------->|  bus_list   |<--/    |
      +-------------+                             +-------------+        |
      driver_list|                             driver_list|        |
      +-------------+                             +-------------+        |
      children                              children         |
      +-------------+                             +-------------+        |
       parent                                parent          |
      +-------------+                             +-------------+        |
       kobj                                  kobj            |
      +-------------+                             +-------------+        |
  \------|   bus                                   bus       |--------/
         +-------------+                             +-------------+   
          driver                                driver     
         +-------------+                             +-------------+   
                                                           
                                                                       

 

 

 

 


                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
   /------------------------>       bus_type       <-------------------------\
                          +--------------------+                          |
                                                                    |
                            name                                    |
                          +--------------------+                          |
                                    kset                            |
                                 +--------+ |                          |
                                 | subsys | |                          |
                          | drivers +--------+ |                          |
                                 | kobj   | |                          |
                                 +--------+ |                          |
   /------------------------------->| list   |<----------------------\    |
                              +--------+ |                       |
                                    | |                       |
                       +--------------------+                       |
                                 kset                         |
                              +--------+ |                       |
                              | subsys | |                       |
                       | devices +--------+ |                       |
                              | kobj   | |                       |
                              +--------+ |                       |
                              | list   | |                       |
                              +--------+ |                       |
                                    | |                       |
                       +--------------------+                       |
                                                              |
                        subsys                                |
                                                              |
                       +--------------------+                       |
                                                              |
                                                              |
                                                              |
                                                                    |
                                                                    |
                                                                    |
                                                                    |
           driver                               driver              |
     +------------------+                 +------------------+      |
                                                        |
       name                           name              |
                                                        |
     +------------------+                 +------------------+      |
             kset                           kset        |
          +--------+ |                      +--------+ |      |
          | parent | |                      | parent | |      |
     | kobj  +--------+ |                 | kobj  +--------+ |      |
          | kset   | |                      | kset   | |      |
          +--------+ |                      +--------+ |      |
   \----------->| entry  |<------------------------->| entry  |<-----/    |
             +--------+ |                      +--------+ |         |
                   | |                            | |         |
        +------------------+                 +------------------+         |
                                                              |
   \-------|    bus                            bus           |---------/
                                                          
           +------------------+                 +------------------+  
                                                          
                                                          
                                                          
                                                                      
                          
     
函数bus_for_each_dev() 和 bus_for_each_drv()分别用于遍历bus上devices和drivers链表中的所有元素。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有