Linux Wireless子系统初始化

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);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值