🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
前面小节一直在介绍Wi-Fi规范方面的内容。从本节开始,我们将向读者介绍Linux平台中Wi-Fi编程方面的知识。 * * * * * **提醒**:相比前文而言,本节内容读起来将显得较为轻松。但从笔者个人经验来说,编程只不过是规范的某种实现,掌握规范才是理解无线网络技术的核心。这也是本书内容组织和编排的指导原则。希望读者能认真体会。 * * * * * Linux平台上目前常用的专门针对无线网络设备编程的API有两套[40], * 最早的一套API由HP公司员工Jean Tourrilhes于1997年开发,全称为Linux Wireless Extensions。一般缩写为wex或wext。这套API使得用户空间的程序能通过ioctl函数来控制无线网卡驱动。 * 由于利用ioctl开展编程的方式不太符合Linux驱动开发的要求,所以后来Linux又提供了cfg80211和nl80211两套编程接口用于替代wext。其中,cfg80211用于驱动开发,而nl80211 API供用户空间进程使用以操作那些利用cfg80211 API开发的无线网卡驱动。 * * * * * **注意**:ioctl不符合Linux驱动开发要求主要体现在: 1. ioctl的原型为int ioctl(int fd, unsigned long cmd, ...),最后三个点代表它支持可变个数的参数。但对于一个经过严格定义的系统调用来说,支持可变个数参数的做法似乎显得有些随性。 2. ioctl的参数不仅个数不固定,其参数类型也无法通过函数原型来加以说明。这同样对于一个严谨的系统调用来说,也是不可接受的。 * * * * * 本节将重点介绍用户空间中的Wi-Fi API:wext和nl80211。不过在介绍它们之前,笔者先请读者思考这样一个问题: **为什么Wi-Fi需要在用户空间进行编程呢?** * * * * * **答案**: 目前的无线网卡分为两种,一种为SoftMAC。这类网卡中,MLME的处理基本上在软件层(即驱动或用户空间),这样可带来较大的灵活性。另外,一些认证相关的操作,也可由软件来控制。另一种网卡称之为FullMAC。这类网卡的MLME全在硬件处理。相比SoftMAC而言,其灵活性很小。所以目前市面上SoftMAC网卡占绝大多数,而cfg80211就仅支持SoftMAC类型的网卡。 * * * * *