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
- static int __init cfg80211_init(void)
- {
- int err;
- // 注册网络命名空间
- err = register_pernet_device(&cfg80211_pernet_ops);
- if (err)
- goto out_fail_pernet;
- // 注册ieee80211_class类
- err = wiphy_sysfs_init();
- if (err)
- goto out_fail_sysfs;
- // 注册网络通知,以接收网络事件
- err = register_netdevice_notifier(&cfg80211_netdev_notifier);
- if (err)
- goto out_fail_notifier;
- // 注册netlink "nl80211",其操作为nl80211_ops
- err = nl80211_init();
- if (err)
- goto out_fail_nl80211;
- // 创建sys/class/ieee80211目录
- ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
- err = regulatory_init();
- if (err)
- goto out_fail_reg;
- // 创建名为“cfg80211”的内核线程
- cfg80211_wq = create_singlethread_workqueue("cfg80211");
- if (!cfg80211_wq)
- goto out_fail_wq;
- return 0;
- out_fail_wq:
- regulatory_exit();
- out_fail_reg:
- debugfs_remove(ieee80211_debugfs_dir);
- out_fail_nl80211:
- unregister_netdevice_notifier(&cfg80211_netdev_notifier);
- out_fail_notifier:
- wiphy_sysfs_exit();
- out_fail_sysfs:
- unregister_pernet_device(&cfg80211_pernet_ops);
- out_fail_pernet:
- return err;
- }
- subsys_initcall(cfg80211_init);