×
单片机 > 单片机程序设计 > 详情

ARM-Linux s3c2440 之UART分析(四)

发布时间:2020-06-04 发布时间:
|
注册完成之后,设备与驱动是如何连接的呢? 原来在driver_register()注册中已经进行设备连接了。

串口是一种platform设备,在体系框架setup_arch()中完成设备注册,而且设备的注册先于驱动注册,最终串口设备与驱动的连接在driver_register() -->bus_add_driver()中完成。


 

  1. int bus_add_driver(struct device_driver *drv)  
  2. {  
  3.        intret;  
  4.        structdevice_driver *other;  
  5.    
  6.        …  
  7.    
  8.        if(drv->bus->p->drivers_autoprobe) { //platfrom_but_type == 1自动探测platfrom设备  
  9.               error= driver_attach(drv);  
  10.               if(error)  
  11.                      goto out_unregister;  
  12.        }  
  13.               ….  
  14. }  

 

最后driver_attach()-->bus_for_each_dev(),完成串口设备与驱动的连接

 

  1. int bus_for_each_dev(struct bus_type *bus,struct device *start,  
  2.                    void *data, int (*fn)(struct device *,void *))  
  3. {  
  4.        structklist_iter i;  
  5.        structdevice *dev;  
  6.        interror = 0;  
  7.    
  8.        if(!bus)  
  9.               return-EINVAL;  
  10.    
  11.        klist_iter_init_node(&bus->p->klist_devices,&i,  
  12.                           (start ? &start->p->knode_bus :NULL));  
  13.        while((dev = next_device(&i)) && !error)   //遍历所有对应上的设备  
  14.               error= fn(dev, data);  
  15.        klist_iter_exit(&i);  
  16.        return error;  
  17. }  



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项