新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM-Linux s3c2440 之UART分析(四)

ARM-Linux s3c2440 之UART分析(四)

作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
注冊完成之后,設(shè)備與驅(qū)動是如何連接的呢? 原來在driver_register()注冊中已經(jīng)進(jìn)行設(shè)備連接了。

串口是一種platform設(shè)備,在體系框架setup_arch()中完成設(shè)備注冊,而且設(shè)備的注冊先于驅(qū)動注冊,最終串口設(shè)備與驅(qū)動的連接在driver_register() -->bus_add_driver()中完成。

本文引用地址:http://2s4d.com/article/201611/318134.htm


  1. intbus_add_driver(structdevice_driver*drv)
  2. {
  3. intret;
  4. structdevice_driver*other;
  5. if(drv->bus->p->drivers_autoprobe){//platfrom_but_type==1自動探測platfrom設(shè)備
  6. error=driver_attach(drv);
  7. if(error)
  8. gotoout_unregister;
  9. }
  10. ….
  11. }

最后driver_attach()-->bus_for_each_dev(),完成串口設(shè)備與驅(qū)動的連接

  1. intbus_for_each_dev(structbus_type*bus,structdevice*start,
  2. void*data,int(*fn)(structdevice*,void*))
  3. {
  4. structklist_iteri;
  5. structdevice*dev;
  6. interror=0;
  7. if(!bus)
  8. return-EINVAL;
  9. klist_iter_init_node(&bus->p->klist_devices,&i,
  10. (start?&start->p->knode_bus:NULL));
  11. while((dev=next_device(&i))&&!error)//遍歷所有對應(yīng)上的設(shè)備
  12. error=fn(dev,data);
  13. klist_iter_exit(&i);
  14. returnerror;
  15. }




關(guān)鍵詞: ARMLinuxs3c2440UAR

評論


技術(shù)專區(qū)

關(guān)閉