移植mtk闭源wifi驱动到openwrt

通常,从mtk拿到的闭源wifi驱动,解压后只有mt_wifi、mt_wifi_ap两个文件,参考https://github.com/hanwckf/mt7615/tree/master/MT7615_LinuxAP_V4.4.2.1_20170829
如果要移植到openwrt中使用,需要修改成openwrt package的方式,类似https://github.com/hanwckf/openwrt-mt7615,以mt7615作为例子,其他mt7628等都是一个套路

在mtk-openwrt-3.10.14中编译闭源wifi驱动

在mtk官方提供的mtk-openwrt-3.10.14中编译WiFi驱动,确保wifi驱动被打进linux kernel,这样就可以根据kernel里编译wifi驱动的Kconfig作为参考

创建package_mt7615

在openwrt/pacakge/下创建一个文件夹package_mt7615,并在其下创建两个空文件Config-mt7615.in、Makefile和两个文件夹files、src

deng@ubuntu:/work/work/openwrt1907/package/package_mt7615$ ls
Config-mt7615.in  files  Makefile  src

拷贝src源代码

从mtk获取到的wifi驱动源码,直接拷贝到src文件夹下

deng@ubuntu:/work/work/openwrt1907/package/package_mt7615/src$ ls
mt_wifi  mt_wifi_ap

修改Makefile

先直接将https://github.com/hanwckf/openwrt-mt7615/blob/master/Makefile拷贝过来

修改Config-mt7615.in

Config-mt7615.in的作用是为了在make menuconfig中可以看到wifi驱动的配置选项。
参考mtk提供的openwrt-3.10.14(mtk适配的openwrt),在linux kernel 中可以看到,mtk wifi driver的配置选项索引

deng@ubuntu:/work/mtk/linux-3.10.108$ cat ralink/Kconfig 
......
source "drivers/net/wireless/mtk/Kconfig"
......

deng@ubuntu:/work/mtk/linux-3.10.108$ cat drivers/net/wireless/mtk/Kconfig
......
menuconfig WIFI_MT7615E
    bool "MT7615E WiFi"
    default n
if WIFI_MT7615E
    source "drivers/net/wireless/mtk/mt7615/mt_wifi/embedded/Kconfig"
endif
......

deng@ubuntu:/work/mtk/linux-3.10.108$ cat drivers/net/wireless/mtk/Kconfig
......
    if MT7615E_WIFI_MODE_AP || MT7615E_WIFI_MODE_BOTH
        source "drivers/net/wireless/mtk/mt7615/mt_wifi_ap/Kconfig"
    endif
......

可见,config的配置是由

ralink/Kconfig-》
	drivers/net/wireless/mtk/Kconfig-》
		drivers/net/wireless/mtk/mt7615/mt_wifi/embedded/Kconfig -》
			drivers/net/wireless/mtk/mt7615/mt_wifi_ap/Kconfig

这四个Kconfig文件递归生成的,所以需要将这四个文件按照Kconfig(按照Kconfig的source “xxxx”)嵌套方式放进Config-mt7615.in中,这样就可以在opewnrt下make menuconfig出现与在mtk-openwrt-3.10.14中make kernel_menuconfig一样的config选项,进行配置wifi驱动选项
也可以参考https://github.com/hanwckf/openwrt-mt7615/blob/master/Config-mt7615.in

根据Config-mt7615.in的选项修改Makefile

由于Config-mt7615.in的配置,在make menuconfig中配置完wifi 驱动之后,各个config_xxxxx会被写进openwrt/.config中,此时我们需要将这些参数传进Makefile,通过cat Config-mt7615.in | grep "config " | awk '{print $2}'命令,可以将config参数全部提取出来

deng@ubuntu:/work/work/openwrt1907/package/package_mt7615$ cat Config-mt7615.in | grep "config " | awk '{print $2}'
HW_IPSEC
RALINK_HWCRYPTO
WIFI_DRIVER
SUPPORT_OPENWRT
MT7615E_CHIP_MT7615E
FIRST_IF_NONE
FIRST_IF_MT7615E
SECOND_IF_NONE
SECOND_IF_MT7615E
THIRD_IF_NONE
THIRD_IF_MT7615E
RT_FIRST_CARD
RT_SECOND_CARD
RT_THIRD_CARD
RT_FIRST_IF_RF_OFFSET
RT_SECOND_IF_RF_OFFSET
RT_THIRD_IF_RF_OFFSET
RT2860V2_2850
RALINK_RT5350_1T1R
RALINK_RT3050_1T1R
RALINK_RT3051_1T2R
RALINK_RT3052_2T2R
RALINK_RT3352_2T2R
RALINK_RT3662_2T2R
RALINK_RT3883_3T3R
RTDEV_MII
UNIQUE_WPS
WIFI_SKB_ALLOC_SELECT
WIFI_SLAB_ALLOC_SKB
WIFI_PAGE_ALLOC_SKB
WIFI_MT7615E
MT7615E_MT_WIFI
........

然后将这个配置写入到MakefilePKG_KCONFIG参数中,这样就可以在编译时将config_xxx宏传到每一个.c文件,这样就可以开始编译wifi驱动了

添加wifi的.dat文件

将相关的.dat或其他文件放进files文件夹,一同编译到ipk包中

deng@ubuntu:/work/work/openwrt1907/package/openwrt_mt7615/files$ tree
.
└── etc
    └── Wireless
        └── RT2860
            ├── RT2860_2G.dat
            └── RT2860_5G.dat

3 directories, 2 files

编译wifi驱动

make menuconfig可以看到mtk wifi 驱动选项
在这里插入图片描述
根据实际情况选择wifi选项,之后单独编译wifi驱动

deng@ubuntu:/work/work/openwrt1907$ make package/openwrt_mt7615/{clean,compile} V=s 

此时还会出现编译的报错问题,但是根据报错提示问题寻找解决方法即可。

例如:
src/mt_wifi_ap/Makefile中定义了CONFIG_SUPPORT_OPENWRT选项,需要把这个选项放到Makefile与Config-mt7615.in中默认配置成CONFIG_SUPPORT_OPENWRT=y

EXTRA_CFLAGS需要确保WIFI_DRV_PATH的目录正确,等

ifeq ($(CONFIG_SUPPORT_OPENWRT),y)
WIFI_DRV_PATH := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))/..
else
ifeq ($(CONFIG_DEFAULTS_KERNEL_4_4),y)
WIFI_DRV_PATH = drivers/net/wireless/mediatek
else
WIFI_DRV_PATH = drivers/net/wireless/mtk/mt7615
endif
endif

EXTRA_CFLAGS = -I$(WIFI_DRV_PATH)/mt_wifi/include \
				-I$(WIFI_DRV_PATH)/mt_wifi/embedded/include \
				-I$(WIFI_DRV_PATH)/mt_wifi/ate/include \
				-I$(WIFI_DRV_PATH)/mt_wifi/include/mcu

如果好遇到其他编译报错问题,请参考https://github.com/hanwckf/openwrt-mt7615中的代码或补丁进行修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值