sdio wifi 移植
介绍
简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。
而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门
这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3308的板子上去。
设备树得修改
我们使用的是sdio接口的,所以我们需要先在设备树内支持相关配置,在自己板子相关的dts中引用sdio和wireless
wireless-wlan {compatible = "wlan-platdata";rockchip,grf = <&grf>;wifi_chip_type = "rtl8822cs";sdio_vref = <1800>;WIFI,host_wake_irq = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;status = "okay";
};
&sdio {clock-frequency = <100000000>;clock-freq-min-max = <200000 100000000>;bus-width = <4>;max-frequency = <150000000>;cap-sd-highspeed;cap-sdio-irq;keep-power-in-suspend;supports-sdio;non-removable;mmc-pwrseq = <&sdio_pwrseq>;//sd-uhs-sdr104; //这句话需要屏蔽,不然会出错不上去num-slots = <1>;status = "okay";
};
rtl8822cs源码移植
移植源码包我们需要做以下步骤
(1)拷贝源码包到内核
将厂商提供的源码包放入内核内合适的地方,这里我放在kernel/drivers/net/wireless/rockchip_wlan/ 目录下并将其重命名为rtl8822cs
(2)修改kernel/drivers/net/wireless/rockchip_wlan/Makefile 将rtl8822cs加入
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_AP6XXX) += rkwifi/
obj-$(CONFIG_RTL8188EU) += rtl8188eu/
obj-$(CONFIG_RTL8188FU) += rtl8188fu/
obj-$(CONFIG_RTL8189ES) += rtl8189es/
obj-$(CONFIG_RTL8189FS) += rtl8189fs/
obj-$(CONFIG_RTL8723BS) += rtl8723bs/
obj-$(CONFIG_RTL8723BU) += rtl8723bu/
obj-$(CONFIG_RTL8723CS) += rtl8723cs/
obj-$(CONFIG_RTL8723DS) += rtl8723ds/
obj-$(CONFIG_RTL8822BE) += rtl8822be/
obj-$(CONFIG_SSV6051) += ssv6xxx/
obj-$(CONFIG_MVL88W8977) += mvl88w8977/
obj-$(CONFIG_WL_ROCKCHIP) += wifi_sys/rkwifi_sys_iface.o
obj-$(CONFIG_WL_ROCKCHIP) += rkwifi/rk_wifi_config.o
obj-$(CONFIG_CYW_BCMDHD) += cywdhd/
obj-$(CONFIG_RTL8822CS) += rtl8822cs/
(3)修改kernel/drivers/net/wireless/rockchip_wlan/Kconfig 将rtl8822cs加入配置
source "drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8188fu/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8189es/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8189fs/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723bs/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723bu/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723cs/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723ds/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8822be/Kconfig"
source "drivers/net/wireless/rockchip_wlan/mvl88w8977/Kconfig"
source "drivers/net/wireless/rockchip_wlan/ssv6xxx/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig"
(4)修改 drivers/net/wireless/rockchip_wlan/Kconfig/rtl8822cs 下的 Makefile 文件 将文件中的CONFIG_PLATFORM_I386_PC 的值修改为 n 将文件中的 ONFIG_PLATFORM_ARM_RK3188 的值修改为 y
这里说明下,由于这个Makefile内没有我这个rk3308芯片的支持,而我个人比较懒,所以这里使用的是rk3318的这个配置项
对rk3188相关的配置进行修改,主要是模块名,编译工具,和ARCH
(5)修改Kconfig
将源码内的kconfig修改为RTL8822CS,这里是厂商粗心写错成了RTL8822BS
(6)修改kernel/net/rfkill/rfkill-wlan.c 文件添加rtl8822cs相关
(7)修改kernel/include/linux/rfkill-wlan.h添加rtl8822cs相关配置
menuconfig 配置
(1)将移植的源码在内核配置中进行配置加载驱动
-> Device Drivers -> Network device support (NETDEVICES [=y]) -> Wireless LAN (WLAN [=y]) -> Rockchip Wireless LAN support (WL_ROCKCHIP [=y])
(2)配置内核支持wifi sdio
-> Networking support (NET [=y]) -> Wireless (WIRELESS [=y])
由于sdio wifi 设备的特性,它首先是个网络设备,其次是一个块设备,在内核启动阶段是靠mmc去扫描sdio设备的,我们还需要将mmc配置进去,而如何找到我们这个sdio设备的mmc源码呢,这里需要先去设备树内找到对sdio的描述
sdio: dwmmc@ff4a0000 {compatible = "rockchip,rk3308-dw-mshc", "rockchip,rk3288-dw-mshc"; reg = <0x0 0xff4a0000 0x0 0x4000>;max-frequency = <150000000>;bus-width = <4>;clocks = <&cru HCLK_SDIO>, <&cru SCLK_SDIO>,<&cru SCLK_SDIO_DRV>, <&cru SCLK_SDIO_SAMPLE>;clock-names = "biu", "ciu", "ciu-drv", "ciu-sample";fifo-depth = <0x100>;interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;pinctrl-names = "default";pinctrl-0 = <&sdio_bus4 &sdio_cmd &sdio_clk>;status = "disabled";
};
复制compatible 中的其中一个去grep看下那个源文件调用到了这个
$:~/NT31/kernel/drivers/mmc$ grep "rockchip,rk3308-dw-mshc" -nr
Binary file built-in.o matches
Binary file host/built-in.o matches
host/dw_mmc-rockchip.c:240: "rockchip,rk3308-dw-mshc"))
发现是dw_mmc-rockchip.c这个文件调用了,我们需要将这个文件配置进内核,不然不会有mmc去扫描sdio设备
-> Device Drivers -> MMC/SD/SDIO card support (MMC [=y])
比较关键的选项是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()函数找不到的错误。
编译烧录
基本上wifi就移植完了,整体编译烧录进板子看下情况,发现内核启动时mmc报了-84的错误
[ 0.818171] mmc0: error -84 whilst initialising SDIO card
[ 0.830958] mmc_host mmc0: Bus speed (slot 0) = 300000Hz (slot req 300000Hz, actual 300000HZ div = 0)
[ 0.851540] dwmmc_rockchip ff4a0000.dwmmc: card claims to support voltages below defined range
[ 0.860002] FtlGcRefreshBlock 0x173
[ 0.860017] FtlGcRefreshBlock 0x2a5
[ 0.864506] mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 50000000Hz, actual 50000000HZ div = 0)
查看发现84错误是提示时钟频率不对,在网上找了些资料都是说用最初的400k频率可以
&sdio {clock-frequency = <100000000>;clock-freq-min-max = <200000 100000000>;bus-width = <4>;max-frequency = <400000>; //修改频率为400kcap-sd-highspeed;cap-sdio-irq;keep-power-in-suspend;supports-sdio;non-removable;mmc-pwrseq = <&sdio_pwrseq>;//sd-uhs-sdr104; //这句话需要屏蔽,不然会出错不上去num-slots = <1>;status = "okay";
};
启动后发现mmc0: new high speed SDIO card at address 0001
扫描到设备了
如何查看sdio是否检测到设备
/ # ls /sys/bus/sdio/devices/
mmc0:0001:1
查看devices目录下是否有文件有就说明找到了设备
sdio wifi 移植相关推荐
- 关于AM335X移植SDIO WIFI的简易教程(转)
最近应一个朋友邀请,帮他移植了SDIO WIFI到3.2版本内核.因为之前已经成功移植了3.14内核,所以整个过程花了一个下午就完成了. 话不多说,先交待一下平台: CPU:TI AM3352 600 ...
- STM32F103驱动SDIO wifi Marvell8801/Marvell88w8801 介绍(十) ---- 移植TCP/IP协议栈LWIP
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- 自己实现SDIO wifi Marvell8801/Marvell88w8801驱动 介绍(一) ---- 芯片介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- android 5.0 wifi移植,android wifi移植
手动加载驱动 ####16th,Jul 驱动加载 modprobe libertas modprobe libertas_sdio 加载第二行时出错拉 # modprobe libertas_sdio ...
- STM32F103+SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- Marvell 8801/Marvell 88w8801 实现AP功能/实现热点功能
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- SDIO wifi Marvell8801/Marvell88w8801 介绍(三) ---- Marvell8801/Marvell88w8801寄存器介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- SDIO wifi Marvell8801/Marvell88w8801 介绍(五) ---- Marvell8801/Marvell88w8801 TLV
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- Marvell8801/Marvell88w8801命令/事件/数据格式
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- STM32F103驱动SDIO wifi Marvell8801/Marvell88w8801 介绍(十一) ---- 编写LWIP DHCP server
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
最新文章
- 体温高会折寿?温州大学学者发现体温比代谢率更会影响寿命,已在小鼠身上验证 | Nature子刊...
- 【FFmpeg】FFmpeg 帮助文档使用
- 杰尼亚签约第四范式 开启奢侈品行业智慧零售新思路
- (转)计算几何模板 - kuangbin
- 大话异步与并行(一)
- 被流氓360设置浏览器主页的解决办法(如果你也遇到了跟我一样的问题,不妨看一下是不是这个原因)...
- 计算机硬件知识考证题,计算机硬件知识题(答案)资料
- Xshell代理访问外网或者公司的内网
- OpenCV矩形检测
- Redis详解(五)——Redis多实例
- mysql基础之mariadb集群双主(主主)架构
- 国二mysql综合应用题答案_2017年9月全国计算机二级MySQL考试章节练习题
- 密码管理系统竞品分析报告
- oracle取字段第三位字符,oracle字符串根据分隔符号获取第几个元素
- linux下STM32开发环境搭建
- [Maven实战-许晓斌]-[第二章]-2.4设置HTTP代理
- 空中旋球计算机控制系统,自动乒乓球发球机设计及其控制系统的研究
- Windows11下如何免安装配置MySQL服务(mysql5.6.50.zip)? | 超级详细,建议收藏
- Webdriver - webdriver hangs when get or click
- HEXO+Github博客 更换新域名详解
热门文章
- 用java流复制文件不能复制全,少几十兆!!
- php简单的商城系统,DouPHP轻量级商城管理系统
- 戴尔sc系列存储阵列柜服务器,Dell存储Compellent SC4020
- 如何评估社交网络中信息内容的价值呢?
- 计算机应用基础0039答案,计算机应用基础-0039(贵州电大-课程号:5205004)参考资料.docx...
- 桌面增加了IE图标无法删除
- db2 jdbc 连接池_db2 jdbc连接数据库
- htc hd2刷android,真正的刷机之王! HTC HD2成功刷入安卓7.0
- 关于Linux性能调优之内存负载调优
- 德州仪器宣布收购12寸晶圆厂