关于cfg80211

转至:http://blog.youkuaiyun.com/robertsong2004/article/details/38898651


关于 cfg80211

cfg80211是Linux 802.11配置API。 cfg80211用于取代Wireless-Extensions。 nl80211用来配置一个cfg80211设备,用于内核< - >用户空间之间的通信。 Wireless extensions 现在处于维护模式,将不会添加新的功到它上面,我们只修复bug。cfg80211现在与wireless-extensions是完全特性兼容的,它实际上有更多的功能,这些功能wireless extension根本是没有的,而且以后也不会有。当实现一个cfg80211驱动时,仍然会通过CONF​​IG_CFG80211_WEXT为你自动提供wireless extensions的支持,不再需要无线扩展的发行版可以删除它,我们也鼓励他们这样做。 cfg80211还提供了完整的regulatory支持,这是通过wireless-regdb 和CRDA的使用来实现的。

所有新的Linux无线驱动程序应该面向fullmac设备的cfg80211或softmac设备的mac80211编程。

cfg80211 驱动编程

我们现在有一些cfg80211驱动,一个完整的cfg80211驱动的很好的例子是Atheros ath6kl驱动程序。 取代之前的wext ioctls 编程,你现在通过设置cfg80211回调和wiphy结构体来告知cfg80211其设备信息。


下面是一个关于 ath6kl cfg80211_ops的例子:

static struct cfg80211_ops ath6kl_cfg80211_ops = {
        .add_virtual_intf = ath6kl_cfg80211_add_iface,			//. 结构体初始化
        .del_virtual_intf = ath6kl_cfg80211_del_iface,
        .change_virtual_intf = ath6kl_cfg80211_change_iface,
        .scan = ath6kl_cfg80211_scan,
        .connect = ath6kl_cfg80211_connect,
        .disconnect = ath6kl_cfg80211_disconnect,
        .add_key = ath6kl_cfg80211_add_key,
        .get_key = ath6kl_cfg80211_get_key,
        .del_key = ath6kl_cfg80211_del_key,
        .set_default_key = ath6kl_cfg80211_set_default_key,
        .set_wiphy_params = ath6kl_cfg80211_set_wiphy_params,
        .set_tx_power = ath6kl_cfg80211_set_txpower,
        .get_tx_power = ath6kl_cfg80211_get_txpower,
        .set_power_mgmt = ath6kl_cfg80211_set_power_mgmt,
        .join_ibss = ath6kl_cfg80211_join_ibss,
        .leave_ibss = ath6kl_cfg80211_leave_ibss,
        .get_station = ath6kl_get_station,
        .set_pmksa = ath6kl_set_pmksa,
        .del_pmksa = ath6kl_del_pmksa,
        .flush_pmksa = ath6kl_flush_pmksa,
        CFG80211_TESTMODE_CMD(ath6kl_tm_cmd)
#ifdef CONFIG_PM
        .suspend = __ath6kl_cfg80211_suspend,
        .resume = __ath6kl_cfg80211_resume,
#endif
        .start_ap = ath6kl_start_ap,
        .change_beacon = ath6kl_change_beacon,
        .stop_ap = ath6kl_stop_ap,
        .del_station = ath6kl_del_station,
        .change_station = ath6kl_change_station,
        .remain_on_channel = ath6kl_remain_on_channel,
        .cancel_remain_on_channel = ath6kl_cancel_remain_on_channel,
        .mgmt_tx = ath6kl_mgmt_tx,
        .mgmt_frame_register = ath6kl_mgmt_frame_register,
        .sched_scan_start = ath6kl_cfg80211_sscan_start,
        .sched_scan_stop = ath6kl_cfg80211_sscan_stop,
};

然后你通过指定cfg80211 ops分配wiphy并填写wiphy。

欲了解更多详情,请参阅cfg80211.h,作为一个驱动程序的示例,您可以阅读ath6kl。

Regulatory

Linux wireless regulatory 文档:

其他文档

cfg80211 文件和内核文档

<think>我们正在讨论Linux内核中的cfg80211驱动配置选项。cfg80211是Linux无线子系统的重要部分,它提供了配置和操作无线设备的接口。用户想了解不同配置项的功能。由于问题涉及内核配置选项,我将重点解释几个关键的CONFIG_CFG80211相关选项。注意,这些选项通常在内核配置工具(如makemenuconfig)中的"Networkingsupport"->"Wireless"子菜单下。根据要求,回答使用中文,行内数学表达式用$...$,独立公式用$$...$$(但这个问题可能涉及公式较少,更多是配置选项解释),并生成相关问题。由于用户的问题是关于配置选项的功能,我将选择几个重要的配置项进行解释。注意,配置项可能因内核版本而异,这里以较新的内核版本(如5.x)为例。参考引用:用户提供的引用内容与当前问题无关,因此我们忽略它们。我们将基于内核文档和常见知识进行回答。开始回答:</think>### cfg80211 驱动配置选项功能解析 `cfg80211` 是 Linux 无线子系统(`mac80211`)的核心配置框架,负责管理无线设备的注册、扫描、认证等操作。以下是关键配置选项的功能说明: #### 基础配置 1. **CONFIG_CFG80211** **功能**:启用整个 cfg80211 框架的基础支持。所有无线驱动依赖此选项,提供: - 无线设备注册/注销接口 - 扫描请求处理(主动/被动扫描) - 认证/关联状态机管理 - 监管域(regulatory domain)合规性检查 **依赖**:必须启用才能使用任何无线功能[^1]。 2. **CONFIG_CFG80211_DEFAULT_PS** **功能**:控制默认节能模式(Power Save)。启用后,新注册的无线接口默认开启节电模式,通过减少射频活动降低功耗。 **影响**:可能轻微增加数据包延迟,适用于移动设备[^2]。 #### 安全与加密 3. **CONFIG_NL80211_TESTMODE** **功能**:开放测试模式接口,允许用户空间工具(如`iw`)发送厂商特定命令。用于: - 射频校准 - 硬件诊断 - 私有协议调试 **警告**:生产环境建议禁用,避免安全风险[^3]。 4. **CONFIG_CFG80211_WEXT** **功能**:兼容旧版无线扩展(Wireless Extension)API。启用后支持传统工具如`iwconfig`。 **建议**:新开发优先使用`nl80211`接口,此选项仅用于兼容旧应用[^1]。 #### 高级功能 5. **CONFIG_CFG80211_DEBUGFS** **功能**:在`debugfs`中暴露调试信息,包括: - 实时信号强度统计(RSSI) - 连接状态机日志 - 频谱管理数据 **路径**:`/sys/kernel/debug/ieee80211/phyX/`[^2]。 6. **CONFIG_CFG80211_INTERNAL_REGDB** **功能**:使用内核内置的无线监管数据库(非实时更新)。 **替代方案**:禁用此选项则从用户空间加载`regdb`数据(更灵活)[^3]。 #### 优化选项 7. **CONFIG_CFG80211_CRDA_SUPPORT** **功能**:允许通过CRDA(Central Regulatory Domain Agent)动态更新监管规则。 **优势**:适应不同国家/地区的频谱法规变化,无需重新编译内核[^1]。 8. **CONFIG_CFG80211_REG_DEBUG** **功能**:输出详细的监管域变更日志,用于调试频谱合规性问题。 **日志级别**:需配合`DYNAMIC_DEBUG`启用`reg_debug`标签[^2]。 ### 典型配置示例 ```kconfig # 基础无线支持 CONFIG_CFG80211=y CONFIG_CRYPTO_CCMP=y # 必需加密模块 # 调试与测试 CONFIG_CFG80211_DEBUGFS=y CONFIG_NL80211_TESTMODE=y # 仅开发环境启用 # 监管域管理 CONFIG_CFG80211_CRDA_SUPPORT=y CONFIG_CFG80211_INTERNAL_REGDB=n # 使用外部regdb ``` ### 引用说明 [^1]: 核心功能参考 Linux 内核文档:`Documentation/wireless/cfg80211.rst` [^2]: 调试接口详见内核源码:`net/wireless/debugfs.c` [^3]: 安全建议参见:`Documentation/process/security-bugs.rst`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值