linux sdio wifi驱动知识总结(一)

摘要:
sdiowifi中与网络设备相关的代码基本上基于Linux网络设备驱动程序框架。接下来,我们将介绍sdio协议。在我的博客中,我只总结了过去两周调试sdiowifi所涉及的知识,希望加深我对sdiowife的理解。估计我以后很长一段时间都不会从事sdiowifi,写博客作为提醒也是极好的。如果未遵循上述配置,加载sdiowifi驱动程序时将报告80211错误和sdio _ claim_ host()函数找不到的错误。

这两周在tq imx6ul下调一个迈威88w8801sdio wifi模组,最后尴尬的发现tq imx6ul并不支持sdio wifi。至于不支持的原因会在后面简单说一下,小弟才疏学浅如果有大佬在tqimx6ul上成功移植过sdio wifi,也请多多指教,好了现在进入正题吧。

    首先我们要搞清楚SDIO WIFI是什么,SDIO WIFI首先是一个网络设备,然后才是一个块设备。一个网络设备驱动程序,必须要具有的是收包发包函数、网络设备注册函数。接下来参照宋宝华《Linux设备驱动开发详解-基于最新的Linux4.0内核》简单介绍一下网络设备驱动程序。

    Linux对网络设备驱动定义了4个层次,这4个层次为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层和网络设备与媒介层。

(1)网络设备协议接口层向网络层协议提供统一的数据包发送接口,不论上层协议是ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx函数接收数据。这一层的存在使得上层协议独立于具体的设备.

(2)网络设备接口层向协议层提供统一的用于描述具体网络设备属性和操作的结构体net_deive,该结构体是设备驱动功能层中各函数的容器。实际上,网络设备接口层从宏观上规划了具体操作硬件的设备驱动功能层的结构。

(3)设备驱动功能层的各函数是网络设备接口层net_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过hard_start_xmit()函数启动发送操作,并通过网络设备上的中断触发接收操作。

(4)网络设备与媒介层是完成数据包发送和接收的物理实体,包括网络适配器和具体的传输媒介、网络适配器被设备驱动功能层中的函数在物理上驱动。对于Linux而言,网络设备和媒介可以是虚拟的。

    在sdio wifi涉及到网络设备部分的代码,基本上也是按照Linux网络设备驱动框架。对Linux网络设备驱动的介绍就到这,如果后面还涉及到的话再深入。接下来介绍sdio协议。

    sdio卡(Secure Digital Input and Output)安全数字输入输出卡,是基于并且兼容sdio内存卡的。它的兼容性包括机械、电气、电源、信号传递和软件。sdio卡专注于提供高速数据i/o口应用在低功耗的消费类移动电子产品中。

    sdio卡分为两种,全速SDIO卡和低速SDIO卡。全速SDIO卡支持SPI、1位和4位SD传输模式,时钟频率在0~25MHZ之间。全速SDIO卡传输速率最快能达到10M/秒。低速SDIO卡仅需支持SPI和1位SD传输模式,4位SD传输模式是可选的,时钟频率仅在0~400KHZ之间。低速卡的目标应用是以最小的硬件开支支持低速I/ O能力。低速卡支持类似调制解调器、条码扫描仪和GPS接受器等应用。对“组合”卡(存储器+ SDIO)而言,全速和4位操作对卡内存储器和SDIO部分都是强制要求的。在博文中我只对这两周调试sdio wifi时所涉及到的知识做一次总结,希望能再加深一下自己对sdio wifi的理解,估计在以后很长一段时间自己也不会再搞sdio wifi了,写个博文用作备忘也是极好的。首先要配置Linux内核支持SDIO WIFI:

    make menuconfig

    Networking support->

                                        Wireless->

    配置如图所示:

    linux sdio wifi驱动知识总结(一)第1张

    Device driver->

                            MMC/SD/SDIO card support ->

    配置如图所示

 linux sdio wifi驱动知识总结(一)第2张

比较关键的选项是Networking support->Wireless下的 cfg80211 wireless extensions compatibility   

和Device driver->MMC/SD/SDIO card support 下的SDIO UART/GPS class support  。

如果不按照上面的配置的话,装载sdio wifi的驱动时将会报有关80211的错误和sdio_claim_host()函数找不到的错误。

因为刚才说了,sdiowifi首先是一个网络设备,其次是一个块设备, 所以在Linux下需要mmc子系统的支持。

原文:https://blog.csdn.net/qq_23235811/article/details/80554239

免责声明:文章转载自《linux sdio wifi驱动知识总结(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇磁盘RAID10和RAID5的配置流程QT MSVC中文编译出错error: C2001: 常量中有换行符 --- 解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux sdio card睡眠治疗 sdio card removed解决方案

         近期调试几款sdio card suspend时都会出现sdio card removed,之后 要么死机要么模块不能正常工作。根本原因也就是休眠没有处理好。昨天最终找到了 解决方法。          1:host端须要设置nonremovable,软件设置:mmc->caps |= MMC_CAP_NONREMOVABLE; ...

QNX 实时操作系统(Quick Unix)

Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他们根据大学时代的一些设想写出了一个能在IBM PC上运行的名叫QUNIX(Quick UNIX)的系统,直到AT&T发律师函过来才把名字改成QNX。 中文名 QNX 实时操作系统 POSⅨ 规范 系统 嵌入式系统 目录...

重学STM32---(八)----SDIO

1.  SDIO(SD/SDIO MMC卡主机模块)在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和CE-ATA设备间提供了操作接口。(SDIO没有SPI兼容的通信模式 ) 1.1.什么是MMC卡 MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗...

zabbix3.x添加H3C网络设备详解

                         zabbix3.x添加H3C网络设备详解                                             作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 前言:   欢迎加入:高级运维工程师之路 598432640   相信大家在看我的文章之前,也看过其他人写的博客...

网络设备性能指标之pps

基本概念: Bps:Byte per second 每秒传输多少字节 bps: bits per second 每秒传输多少位 ,这个也叫做端口速率 pps:Packet Per Second(包每秒),网络设备的转发性能以“包转发性能”来表示,即设备在单位时间内能够处理多少个“包”,这决定了设备转发能力的强弱。 mbps:Million bits per...

使用WinPcap编程(1)——获取网络设备信息

pcap_if_t是一个interface数据结构,表明网络接口的信息。网络接口就是interface,就是我们用来上网的设备,一般为网卡,还有一些虚拟网卡也算作这样的接口。它的结构如下: struct pcap_if { struct pcap_if *next; char *name; char *descr...