How to compile mt76/mt7615 drivers on OpenWrt?

Recently I found that mt76/7615 project has finished a lot,so I want to try to build this on OpenWRT for phicomm K2P,which runs on linux 4.14.109. The default openwrt mt76 makefile just includes mt7603 mt76x2 etc.So how should I edit the default makefile to compile mt7615 drivers?

https://github.com/LorenzoBianconi/mt76/tree/mt7615 this is the link to mt76/7615 project

solved.This is the file content.

include $(TOPDIR)/rules.mk

PKG_NAME:=mt76
PKG_RELEASE=1

PKG_LICENSE:=GPLv2
PKG_LICENSE_FILES:=

PKG_SOURCE_URL:=https://github.com/MeIsReallyBa/mt76
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2019-04-08
PKG_SOURCE_VERSION:=879ca1466193153b5ee47e2789645a9b6c4404fc
PKG_MIRROR_HASH:=

PKG_MAINTAINER:=Felix Fietkau [nbd@nbd.name](mailto:nbd@nbd.name)
PKG_BUILD_PARALLEL:=1

PKG_CONFIG_DEPENDS += 
CONFIG_PACKAGE_kmod-mt76-usb 
CONFIG_PACKAGE_kmod-mt76x02-common 
CONFIG_PACKAGE_kmod-mt76x0-common 
CONFIG_PACKAGE_kmod-mt76x0u 
CONFIG_PACKAGE_kmod-mt76x2-common 
CONFIG_PACKAGE_kmod-mt76x2 
CONFIG_PACKAGE_kmod-mt76x2u 
CONFIG_PACKAGE_kmod-mt7615 
CONFIG_PACKAGE_kmod-mt7603

STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h

include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

define KernelPackage/mt76-default
SUBMENU:=Wireless Drivers
DEPENDS:= 
+kmod-mac80211 @!LINUX_3_18 
+@DRIVER_11AC_SUPPORT +@DRIVER_11N_SUPPORT +@DRIVER_11W_SUPPORT
endef

define KernelPackage/mt76
SUBMENU:=Wireless Drivers
TITLE:=MediaTek MT76x2/MT7603 wireless driver (metapackage)
DEPENDS:= 
+kmod-mt76-core +kmod-mt76x2 +kmod-mt7603
endef

define KernelPackage/mt76-core
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76xx wireless driver
HIDDEN:=1
FILES:=
$(PKG_BUILD_DIR)/mt76.ko
endef

define KernelPackage/mt76-usb
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76xx wireless driver USB support
DEPENDS += +kmod-usb-core +kmod-mt76-core
HIDDEN:=1
FILES:=
$(PKG_BUILD_DIR)/mt76-usb.ko
endef

define KernelPackage/mt76x02-usb
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x0/MT76x2 USB wireless driver common code
DEPENDS+=+kmod-mt76-usb +kmod-mt76x02-common
HIDDEN:=1
FILES:=$(PKG_BUILD_DIR)/mt76x02-usb.ko
endef

define KernelPackage/mt76x02-common
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x0/MT76x2 wireless driver common code
DEPENDS+=+kmod-mt76-core
HIDDEN:=1
FILES:=$(PKG_BUILD_DIR)/mt76x02-lib.ko
endef

define KernelPackage/mt76x0-common
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x0 wireless driver common code
DEPENDS+=+kmod-mt76x02-common
HIDDEN:=1
FILES:=$(PKG_BUILD_DIR)/mt76x0/mt76x0-common.ko
endef

define KernelPackage/mt76x0e
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x0E wireless driver
DEPENDS+=@PCI_SUPPORT +kmod-mt76x0-common
FILES:=
$(PKG_BUILD_DIR)/mt76x0/mt76x0e.ko
AUTOLOAD:=$(call AutoProbe,mt76x0e)
endef

define KernelPackage/mt76x0u
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x0U wireless driver
DEPENDS+=+kmod-mt76x0-common +kmod-mt76x02-usb
FILES:=
$(PKG_BUILD_DIR)/mt76x0/mt76x0u.ko
AUTOLOAD:=$(call AutoProbe,mt76x0u)
endef

define KernelPackage/mt76x2-common
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x2 wireless driver common code
DEPENDS+=+kmod-mt76-core +kmod-mt76x02-common
HIDDEN:=1
FILES:=$(PKG_BUILD_DIR)/mt76x2/mt76x2-common.ko
endef

define KernelPackage/mt76x2u
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x2U wireless driver
DEPENDS+=+kmod-mt76x2-common +kmod-mt76x02-usb
FILES:=
$(PKG_BUILD_DIR)/mt76x2/mt76x2u.ko
AUTOLOAD:=$(call AutoProbe,mt76x2u)
endef

define KernelPackage/mt76x2
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT76x2 wireless driver
DEPENDS+=@PCI_SUPPORT +kmod-mt76x2-common
FILES:=
$(PKG_BUILD_DIR)/mt76x2/mt76x2e.ko
AUTOLOAD:=$(call AutoProbe,mt76x2e)
endef

define KernelPackage/mt7615
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT7615 wireless driver
DEPENDS+=@PCI_SUPPORT +kmod-mt76-core
FILES:=
$(PKG_BUILD_DIR)/mt7615/mt7615e.ko
AUTOLOAD:=$(call AutoProbe,mt7615e)
endef

define KernelPackage/mt7603
$(KernelPackage/mt76-default)
TITLE:=MediaTek MT7603 wireless driver
DEPENDS+=@PCI_SUPPORT +kmod-mt76-core
FILES:=
$(PKG_BUILD_DIR)/mt7603/mt7603e.ko
AUTOLOAD:=$(call AutoProbe,mt7603e)
endef

NOSTDINC_FLAGS = 
-I$(PKG_BUILD_DIR) 
-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi 
-I$(STAGING_DIR)/usr/include/mac80211-backport 
-I$(STAGING_DIR)/usr/include/mac80211/uapi 
-I$(STAGING_DIR)/usr/include/mac80211 
-include backport/autoconf.h 
-include backport/backport.h

ifdef CONFIG_PACKAGE_MAC80211_MESH
NOSTDINC_FLAGS += -DCONFIG_MAC80211_MESH
endif

ifdef CONFIG_PACKAGE_kmod-mt76-usb
PKG_MAKE_FLAGS += CONFIG_MT76_USB=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x02-common
PKG_MAKE_FLAGS += CONFIG_MT76x02_LIB=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x02-usb
PKG_MAKE_FLAGS += CONFIG_MT76x02_USB=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x0-common
PKG_MAKE_FLAGS += CONFIG_MT76x0_COMMON=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x0e
PKG_MAKE_FLAGS += CONFIG_MT76x0E=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x0u
PKG_MAKE_FLAGS += CONFIG_MT76x0U=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x2-common
PKG_MAKE_FLAGS += CONFIG_MT76x2_COMMON=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x2
PKG_MAKE_FLAGS += CONFIG_MT76x2E=m
endif
ifdef CONFIG_PACKAGE_kmod-mt76x2u
PKG_MAKE_FLAGS += CONFIG_MT76x2U=m
endif
ifdef CONFIG_PACKAGE_kmod-mt7615
PKG_MAKE_FLAGS += CONFIG_MT7615E=m
endif
ifdef CONFIG_PACKAGE_kmod-mt7603
PKG_MAKE_FLAGS += CONFIG_MT7603E=m
endif

define Build/Compile
+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" 
$(KERNEL_MAKE_FLAGS) 
$(PKG_MAKE_FLAGS) 
SUBDIRS="$(PKG_BUILD_DIR)" 
NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" 
modules
endef

define Package/kmod-mt76/install
true
endef

define KernelPackage/mt76x0-common/install
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
cp 
$(PKG_BUILD_DIR)/firmware/mt7610e.bin 
$(1)/lib/firmware/mediatek
endef

define KernelPackage/mt76x2-common/install
$(INSTALL_DIR) $(1)/lib/firmware
cp 
$(PKG_BUILD_DIR)/firmware/mt7662_rom_patch.bin 
$(PKG_BUILD_DIR)/firmware/mt7662.bin 
$(1)/lib/firmware
endef

define KernelPackage/mt76x0u/install
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
ln -sf mt7610e.bin $(1)/lib/firmware/mediatek/mt7610u.bin
endef

define KernelPackage/mt76x2u/install
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
ln -sf ../mt7662.bin $(1)/lib/firmware/mediatek/mt7662u.bin
ln -sf ../mt7662_rom_patch.bin $(1)/lib/firmware/mediatek/mt7662u_rom_patch.bin
endef

define KernelPackage/mt7615/install
$(INSTALL_DIR) $(1)/lib/firmware
cp 
$(PKG_BUILD_DIR)/firmware/mt7615_rom_patch.bin 
$(PKG_BUILD_DIR)/firmware/mt7615_n9.bin 
$(PKG_BUILD_DIR)/firmware/mt7615_cr4.bin 
$(1)/lib/firmware
endef

define KernelPackage/mt7603/install
$(INSTALL_DIR) $(1)/lib/firmware
cp $(if $(CONFIG_TARGET_ramips_mt76x8), 
$(PKG_BUILD_DIR)/firmware/mt7628_e1.bin 
$(PKG_BUILD_DIR)/firmware/mt7628_e2.bin 
,
$(PKG_BUILD_DIR)/firmware/mt7603_e1.bin 
$(PKG_BUILD_DIR)/firmware/mt7603_e2.bin 
) 
$(1)/lib/firmware
endef

$(eval $(call KernelPackage,mt76-core))
$(eval $(call KernelPackage,mt76-usb))
$(eval $(call KernelPackage,mt76x02-usb))
$(eval $(call KernelPackage,mt76x02-common))
$(eval $(call KernelPackage,mt76x0-common))
$(eval $(call KernelPackage,mt76x0e))
$(eval $(call KernelPackage,mt76x0u))
$(eval $(call KernelPackage,mt76x2-common))
$(eval $(call KernelPackage,mt76x2u))
$(eval $(call KernelPackage,mt76x2))
$(eval $(call KernelPackage,mt7615))
$(eval $(call KernelPackage,mt7603))
$(eval $(call KernelPackage,mt76))

after complied the drivers how to use in current build.
can you teach me ?

Thanks

Good job :)! Is WiFi working on both 5ghz and 2.4ghz? How's performance and stability on both bands? Really curious about that device myself! Might be a nice upgrade over my current mt7602/mt7612 based router.

Sorry,It dint't work properly.I just could connet to it but no ip address.It seems that the driver didn’t read eeprom info

Is this a reference to https://lwn.net/ml/linux-wireless/cover.1553607739.git.ryder.lee@mediatek.com/ to add support for MediaTek MT7615 wireless chipsets? Which kernel version is that patch for?

It has been merged into mainline v5.2.

1 Like

I hope this is a dumb question. Does this mean all those 7615 devices are candidates for future openwrt support once it moves to a 5.1+ kernel?

Yes…

…and no, OpenWrt doesn't use the wireless subsystem of the base kernel, but employs backports instead, which are generally newer than the base kernel (e.g. 4.19 based backports instead of the 4.14 LTS kernel used by all OpenWrt targets at the moment).

The situation for mt76 in particular is a bit special as well, given that its primary author is an OpenWrt developer who is regularly updating the mt76 (semi-) independently of the backports provided wireless subsystem underneath.

In other words, it's even newer than the v4.19 based backports - but at this moment not (yet) new enough for mt7615 support.

In short, no mt7615 isn't supported in OpenWrt yet, but it's just a matter of time and very likely to happen (significantly) before OpenWrt switches to kernel v5.2. Don't expect the drivers to be top notch quality on day 1 though, it usually takes a while for new drivers to stabilize, for bugs to be found and performance to be tweaked.

Have you solved this problem?