Openwrt系统,路由或者IOT网关方面,市面上能供个人或者小团队甚至小企业 ,可玩性高的也就MT76xx系列路由芯片了,其中很大一部分原因主要在于MTK的WIFI驱动管控不是很严格,相对较容易获取其WIFI驱动源码。
目前市场上的MT76x8板子,带私有WIFI驱动且性能较好的,大多停留都在Openwrt 15.05分支,内核相对来说较低(其实完全够用)。
随着Openwrt与LEDE的战火停息,双方交好,跟谈恋爱一样,其发展甚快,kernel版本也上升到4.14。但是很可惜啊,WIFI 驱动跟不上,官网的MT76 开源驱动,改善虽有,但稳定性尤其是带宽较低,大概只有10Mb左右,稳定性在18.02上好像有比较大改善。
鉴于之前项目中用到过MTK私有驱动V.4.1.0.0版本,速率和稳定性还不错(其实也就是市面上使用15.05分支的一些板子所用到的驱动,典型的比如wrtnode,widora等团队),最近也稍稍有空,因此就考虑把驱动移植一把试试看。
首先要做的就是搞定Makefile中那一些乱七八糟的宏定义,说实话,MTK的宏使用的真有点过分(不过能有更好的办法么)
我们先看一下编译源码所用的Makefile什么样(由于太长,截取部分)
EXTRA_CFLAGS = -Idrivers/net/wireless/mt_wifi/include \
-Idrivers/net/wireless/mt_wifi/embedded/include \
-Idrivers/net/wireless/mt_wifi/ate/include
ifeq ($(CONFIG_SUPPORT_OPENWRT),y)
EXTRA_CFLAGS = -I$(src)/../src/include \
-I$(src)/../src/embedded/include \
-I$(src)/../src/ate/include
DRV_NAME = mt7628
SRC_DIR = ../src/embedded
obj-m += $(DRV_NAME).o
else
EXTRA_CFLAGS = -Idrivers/net/wireless/mt_wifi/include \
-Idrivers/net/wireless/mt_wifi/embedded/include \
-Idrivers/net/wireless/mt_wifi/ate/include
DRV_NAME = mt_wifi
SRC_DIR = ../mt_wifi/embedded
obj-$(CONFIG_MT_AP_SUPPORT) += $(DRV_NAME).o
endif
########################################################
# Common files
########################################################
cmm_objs := $(SRC_DIR)/common/crypt_md5.o\
$(SRC_DIR)/common/crypt_sha2.o\
$(SRC_DIR)/common/crypt_hmac.o\
$(SRC_DIR)/common/crypt_aes.o\
$(SRC_DIR)/common/crypt_arc4.o\
$(SRC_DIR)/common/mlme.o\
$(SRC_DIR)/common/cmm_wep.o\
$(SRC_DIR)/common/action.o\
ifeq ($(CONFIG_MT_MAC),y)
EXTRA_CFLAGS += -DMT_PS
spec_objs += $(SRC_DIR)/common/mt_ps.o
spec_objs += $(SRC_DIR)/common/mt_io.o
spec_objs += $(SRC_DIR)/tx_rx/txs.o
endif
########################################################
# AP feature related files
########################################################
ap_objs := $(SRC_DIR)/ap/ap.o\
$(SRC_DIR)/ap/ap_assoc.o\
$(SRC_DIR)/ap/ap_auth.o\
$(SRC_DIR)/ap/ap_connect.o\
$(SRC_DIR)/ap/ap_mlme.o\
$(SRC_DIR)/ap/ap_sanity.o\
$(SRC_DIR)/ap/ap_sync.o