原文地址:http://blog.csdn.net/myarrow/article/details/9300823

1. cfg80211_init

? cfg80211_wq工作队列主要处理以下工作:

1) 清除:wireless_dev.cleanup_work
2) 扫描:cfg80211_registered_device.scan_done_wk
3) 事件:cfg80211_registered_device.event_work

? 注册netlink,其名为:"nl80211",其操作为:nl80211_ops

net/wireless/core.c


  1. static int __init cfg80211_init(void)
  2. {
  3. int err;
  4. // 注册网络命名空间
  5. err = register_pernet_device(&cfg80211_pernet_ops);
  6. if (err)
  7. goto out_fail_pernet;
  8. // 注册ieee80211_class类
  9. err = wiphy_sysfs_init();
  10. if (err)
  11. goto out_fail_sysfs;
  12. // 注册网络通知,以接收网络事件
  13. err = register_netdevice_notifier(&cfg80211_netdev_notifier);
  14. if (err)
  15. goto out_fail_notifier;
  16. // 注册netlink "nl80211",其操作为nl80211_ops
  17. err = nl80211_init();
  18. if (err)
  19. goto out_fail_nl80211;
  20. // 创建sys/class/ieee80211目录
  21. ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
  22. err = regulatory_init();
  23. if (err)
  24. goto out_fail_reg;
  25. // 创建名为“cfg80211”的内核线程
  26. cfg80211_wq = create_singlethread_workqueue("cfg80211");
  27. if (!cfg80211_wq)
  28. goto out_fail_wq;
  29. return 0;
  30. out_fail_wq:
  31. regulatory_exit();
  32. out_fail_reg:
  33. debugfs_remove(ieee80211_debugfs_dir);
  34. out_fail_nl80211:
  35. unregister_netdevice_notifier(&cfg80211_netdev_notifier);
  36. out_fail_notifier:
  37. wiphy_sysfs_exit();
  38. out_fail_sysfs:
  39. unregister_pernet_device(&cfg80211_pernet_ops);
  40. out_fail_pernet:
  41. return err;
  42. }
  43. subsys_initcall(cfg80211_init);

01-01 04:59