07. 运行Linux-5.4+Ubuntu20

158 阅读7分钟

联系邮箱:li_cloud6630@qq.com

如果你有一台配置比较高的MT7981,比如你的存储是snor+emmc或者emmc,你的内存1GB。那么在双核MT7981 1.3GHz主频下,单纯运行OpenWrt有一点点亏但不多。如果可以运行Ubuntu的话,相当于硬路由软吃,既可以发挥硬路由在硬件上的优势,又可以和Ubuntu的生态结合起来,从而起到一举两得的效果。

如果觉得MT7981性能还不够,可以运行MT7986,MT7988,步骤什么的都是一样的。

然后内核的配置选项可以多开一些,把能用得到的都编译到内核镜像中去就可以,当然在openwrt中我们不一定需要这么做,但是在运行其它系统时还是尽可能的全一些,比如网络功能,比如通用的驱动等等。

内核WIFI驱动移植

移植过程中注意,尽可能的不要去改动代码里面原生的一些CONFIG选项的名称,各个模块互相有依赖,修改后容易出现编译不过或者功能不全的情况。

移植WIFI驱动CONNINFRA

从build_dir目录中复制conninfra驱动到内核代码的drivers/net/wireless/mediatek/里面,然后目录里面有很多杂质要去了。

进入目录:

$ find ./ -name "*.o" | xargs rm
$ find ./ -name "*.ko" | xargs rm
$ rm -rf .built* .con* .dep_files ipkg-aarch64_cortex-a53/ modules.order Module.symvers.tmp .pkgdir/ .prepared_be70f257b2e0b236890547576296f53a_6664517399ebbbc92a37c5bb081b5c53*
$ rm conninfra.mod*

可以了,这样清爽了很多。在conninfra目录中已经包含makefile了,这样的话,我们需要添加一个Kconfig。在上层目录中的Makefile和Kconfig也需要添加上对应目录的编译。

conninfra的Kconfig

在package/mtk/drivers/conninfra/Makefile文件中有如下描述:

define KernelPackage/conninfra/config
if PACKAGE_kmod-conninfra
	config MTK_CONNINFRA_APSOC
	bool "Conninfra APSOC Only"
	default n

if MTK_CONNINFRA_APSOC
choice
	prompt "Choose APSOC Chip"

	config MTK_CONNINFRA_APSOC_MT7986
	bool "MT7986"

	config MTK_CONNINFRA_APSOC_MT7981
	bool "MT7981"
endchoice

	config CONNINFRA_EMI_SUPPORT
	bool "EMI Support"
	default n

	config FPGA_EARLY_PORTING
	bool "Only for FPGA Stage"
	default n

	config CONNINFRA_AUTO_UP
	bool "Conninfra Up by Self"
	default n
endif
endif
endef

我们Kconfig就是从这里改过来的。按照内核的格式改动后应该是这样的:

menuconfig CONNINFRA_SUPPORT
	tristate "MediaTek Filogic MT798x WIFI CONNINFRA"
	default n

config MTK_CONNINFRA_APSOC
    tristate "Conninfra APSOC Only"
	depends on CONNINFRA_SUPPORT
	default n

if MTK_CONNINFRA_APSOC
choice
	prompt "Choose APSOC Chip"

	config MTK_CONNINFRA_APSOC_MT7986
	bool "MT7986"

	config MTK_CONNINFRA_APSOC_MT7981
	bool "MT7981"
endchoice

	config CONNINFRA_EMI_SUPPORT
	bool "EMI Support"
	default n

	config FPGA_EARLY_PORTING
	bool "Only for FPGA Stage"
	default n

	config CONNINFRA_AUTO_UP
	bool "Conninfra Up by Self"
	default n

endif #MTK_CONNINFRA_APSOC


添加编译

在上层的Kconfig和Makefile中添加编译。

内核选项使能

这样的话,在执行menuconfig的时候,可以看到已经有了这个选项,而且选项里面跟OpenWrt是一样的。按照OpenWrt来选就可以。这里一定会出现很多很多的错误。

编译conninfra

正常编译内核即可。

[ERROR 1] ring.h: No such file or directory

  AR      drivers/net/wireless/mediatek/conninfra/built-in.a
  CC [M]  drivers/net/wireless/mediatek/conninfra/base/ring.o
drivers/net/wireless/mediatek/conninfra/base/ring.c:13:10: fatal error: ring.h: No such file or directory
   13 | #include "ring.h"
      |          ^~~~~~~~
compilation terminated.
make[5]: *** [scripts/Makefile.build:262: drivers/net/wireless/mediatek/conninfra/base/ring.o] Error 1
make[4]: *** [scripts/Makefile.build:497: drivers/net/wireless/mediatek/conninfra] Error 2
make[3]: *** [scripts/Makefile.build:497: drivers/net/wireless/mediatek] Error 2
make[2]: *** [scripts/Makefile.build:497: drivers/net/wireless] Error 2
make[1]: *** [scripts/Makefile.build:497: drivers/net] Error 2
make: *** [Makefile:1750: drivers] Error 2

首先ring.h在base/include下面,找不到只能说明Makefile写的不对。我们修改的时候尽可能的以增量式的方式来适配,尽可能的不要出现大改动。

ring.h的头文件路径声明在这里:

###############################################################################
# common_main
###############################################################################
ccflags-y += \
	-I$(SUBDIRS)/include \
	-I$(SUBDIRS)/base/include \
	-I$(SUBDIRS)/core/include \
	-I$(SUBDIRS)/conf/include \
	-I$(SUBDIRS)/platform/include

这里用了一个SUBDIRS的变量,在linux中该变量是不存在的。我们在上面给它赋值。

SUBDIRS := $(abs_srctree)/drivers/net/wireless/mediatek/conninfra

重新编译内核发现直接就成功了,那么看来这个模块还是很简单的就能移植上。

 LD      vmlinux
  SORTEX  vmlinux
  SYSMAP  System.map
  Building modules, stage 2.
  MODPOST 40 modules
  CC [M]  drivers/net/wireless/mediatek/conninfra/conninfra.mod.o
  LD [M]  drivers/net/wireless/mediatek/conninfra/conninfra.ko
  OBJCOPY arch/arm64/boot/Image
  GZIP    arch/arm64/boot/Image.gz
编译warp

跟上面的一样,先准备好代码,复制到目录里面。上层目录的Makefile和Kconfig不再说明,按照上面的添加方式加上就行了。

然后发现已经有Kconfig了但是不全,我们不用那个。使用package/mtk/drivers/warp/config.in并且改造一下:

menuconfig WARP_SUPPORT
        tristate "WARP Driver Support"
        default n
        
if WARP_SUPPORT
config WARP_VERSION
	int "WARP Driver HW Version Support"
	range 1 3
	default 1 if TARGET_mediatek_mt7622
	default 2 if TARGET_mediatek_mt7986
	default 3 if TARGET_mediatek_mt7988

config WARP_DBG_SUPPORT
	bool "WARP Driver Debug Info Support"
	default y

config WED_HW_RRO_SUPPORT
	bool "WED HW RRO Support"
	default y

config MTK_MEMORY_SHRINK
	bool "Memory Shrink"
	default n

config WARP_MEMORY_LEAK_DBG
	bool "Memory leak debug"
	depends on !MTK_MEMORY_SHRINK && WARP_DBG_SUPPORT
	default y

config WARP_CHIPSET
	string "WARP target chipset"
	default mt7988
	help
	For colgin: colgin, for panther: mt7986, for jaguar: mt7988

config WARP_WO_EMBEDDED_LOAD
	bool "Emebedded MCU firmware support"
	default n
	help
	Once enabled, firmware download flow try embedded version once externel version being invalid.

endif #WARP_SUPPORT


这样就看着跟op是一样的了。保存退出,编译一下看看。

[ERROR 1] fatal error: warp_cfg.h: No such file or directory

估计跟上面的错误是一样的,Makefile中添加:

PKG_BUILD_DIR := $(abs_srctree)/drivers/net/wireless/mediatek/warp/

然后编译成功了,又出现错误了。

[ERROR 2] undefined

ERROR: "warp_get_wo_emi_node" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_wo_set_apsrc_idle" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_bus_set_hw" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_fwdl_reset" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_wo_pc_lr_cr_dump" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_wo_reset" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "bus_setup" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_wed_rro_init" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_get_wo_ilm_node" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_eint_ctrl_hw" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_wdma_int_sel" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_whole_chip_wo_reset" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_fwdl_get_wo_heartbeat" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_bus_msi_set" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_get_dts_idx" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_fwdl_write_start_address" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
ERROR: "warp_get_pcie_slot" [drivers/net/wireless/mediatek/warp/mtk_warp.ko] undefined!
make[1]: *** [scripts/Makefile.modpost:93: __modpost] Error 1
make: *** [Makefile:1340: modules] Error 2

应该是哪个文件没编译进去。查一下warp_get_wo_emi_node这个吧。因为我们编译的是mt7981,然后敏锐的发现在类似warp_mt7981.c文件中得到了定义。这么看的话,是这个文件没有参与编译。在Makefle中有如下描述:

但是上面有:

这里是带引号的字符串。

上面的判断加上引号就可以了。

成了。

编译mt_wifi

这个是最复杂,最难的一个。

老样子,复制过去,先处理代码。代码中没有Makefifle,Kconfig,新建这两个文件。

然后Kconfig也是按照package/mtk/drivers/mt_wifi/config.in来,不过看下面的规则,需要处理一下,把MTK_去掉。

里面还有一些跟KMOD相关的,也要替换成对应的内核的CONFIG。

太长了,修改完如下所示:

menuconfig MT_WIFI_SUPPORT
	tristate "MTK wifi AP driver"
	default n

config SUPPORT_OPENWRT
	bool
	default y
	depends on MT_WIFI_SUPPORT

config WIFI_DRIVER
	bool
	default y
	depends on MT_WIFI_SUPPORT
	select WIFI_MT_MAC
	select MT_MAC
	#select FIRST_IF_MT7615E
	#select CHIP_MT7622
	#select CHIP_MT7626
	#select SECOND_IF_MT7615E
	#select THIRD_IF_MT7615E
	#select CHIP_MT7615E

if WIFI_DRIVER

choice
	prompt "Choose First WiFi Interface"
	config FIRST_IF_NONE
	bool "None"

	config FIRST_IF_MT7615E
	bool "MT7615E"
	select WIFI_MT_MAC
	select MT_MAC
	select CHIP_MT7615E

	config FIRST_IF_MT7622
	bool "MT7622"
	select WIFI_MT_MAC
	select MT_MAC
	select CHIP_MT7622

	config FIRST_IF_MT7626
	bool "MT7626"
	select WIFI_MT_MAC
	select MT_MAC
	select CHIP_MT7626

	config FIRST_IF_AXE
        bool "MT6867"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_AXE

	config FIRST_IF_MT7915
        bool "MT7915"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7915

	config FIRST_IF_MT7986
        bool "MT7986"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7986
	
	config FIRST_IF_MT7916
        bool "MT7916"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7916

        config FIRST_IF_MT7981
        bool "MT7981"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7981

endchoice

choice
	prompt "Choose Second WiFi Interface"
	config SECOND_IF_NONE
	bool "None"

	config SECOND_IF_MT7615E
	bool "MT7615E"
	select WIFI_MT_MAC
	select CHIP_MT7615E
	select MULTI_INF_SUPPORT

	config SECOND_IF_AXE
	bool "MT6867"
	select WIFI_MT_MAC
	select MT_MAC
	select CHIP_AXE

	config SECOND_IF_MT7915
        bool "MT7915"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7915
	
	config SECOND_IF_MT7916
        bool "MT7916"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7916

endchoice

choice
	prompt "Choose Third WiFi Interface"
	config THIRD_IF_NONE
	bool "None"

	config THIRD_IF_MT7615E
	bool "MT7615E"
	select WIFI_MT_MAC
	select CHIP_MT7615E
	select MULTI_INF_SUPPORT

	config THIRD_IF_MT7915
        bool "MT7915"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7915
	select MULTI_INF_SUPPORT

    config THIRD_IF_MT7916
        bool "MT7916"
        select WIFI_MT_MAC
        select MT_MAC
        select CHIP_MT7916
	select MULTI_INF_SUPPORT
	
endchoice

config  RT_FIRST_CARD
        int
        depends on ! FIRST_IF_NONE
	default 7615 if FIRST_IF_MT7615E
        default 7622 if FIRST_IF_MT7622
        default 7626 if FIRST_IF_MT7626
        default 6867 if FIRST_IF_AXE

config  RT_SECOND_CARD
        int
        depends on ! SECOND_IF_NONE
        default 7615 if SECOND_IF_MT7615E
        default 6867 if SECOND_IF_AXE

config  RT_THIRD_CARD
        int
        depends on ! THIRD_IF_NONE
        default 7615 if THIRD_IF_MT7615E

config  RT_FIRST_IF_RF_OFFSET
        hex
        depends on ! FIRST_IF_NONE
        default 0xc0000

config  RT_SECOND_IF_RF_OFFSET
        hex
        depends on ! SECOND_IF_NONE
        default 0xc8000

config  RT_THIRD_IF_RF_OFFSET
        hex
        depends on ! THIRD_IF_NONE
        default 0xd0000

config MT_WIFI
	tristate "MT WIFI Driver"
	select WIFI_BASIC_FUNC if MT_WIFI

config MT_WIFI_PATH
	string
	depends on MT_WIFI
	default "mt_wifi"

if MT_WIFI
choice
	prompt "MT_WIFI DRIVER VERSION"
	default MT_WIFI_DRIVER_VERSION_7672

	config MT_WIFI_DRIVER_VERSION_7661
	bool "7.6.6.1"

	config MT_WIFI_DRIVER_VERSION_7672
	bool "7.6.7.2"
endchoice

choice
	prompt "MT7916 custom WACPU firmware"
	depends on CHIP_MT7916
	default MT_WIFI_MT7916_20240823

	config MT_WIFI_MT7916_DEFAULT_FIRMWARE
	bool "default firmware"

	config MT_WIFI_MT7916_20221208
	bool "mt7916-fw-20221208"

	config MT_WIFI_MT7916_20240823
	bool "mt7916-fw-20240823"
endchoice

choice
	prompt "MT7981 custom WACPU firmware"
	depends on CHIP_MT7981
	default MT_WIFI_MT7981_20240823

	config MT_WIFI_MT7981_DEFAULT_FIRMWARE
	bool "default firmware"

	config MT_WIFI_MT7981_20230306
	bool "mt7981-fw-20230306"

	config MT_WIFI_MT7981_20230330
	bool "mt7981-fw-20230330"

	config MT_WIFI_MT7981_20230411
	bool "mt7981-fw-20230411"

	config MT_WIFI_MT7981_20230717
	bool "mt7981-fw-20230717"

	config MT_WIFI_MT7981_20231024
	bool "mt7981-fw-20231024"

	config MT_WIFI_MT7981_20240823
	bool "mt7981-fw-20240823"
endchoice

choice
	prompt "MT7986 custom WACPU firmware"
	depends on CHIP_MT7986
	default MT_WIFI_MT7986_20240823

	config MT_WIFI_MT7986_DEFAULT_FIRMWARE
	bool "default firmware"

	config MT_WIFI_MT7986_20221208
	bool "mt7986-fw-20221208"

	config MT_WIFI_MT7986_20230421
	bool "mt7986-fw-20230421"

	config MT_WIFI_MT7986_20230808
	bool "mt7986-fw-20230808"

	config MT_WIFI_MT7986_20231024
	bool "mt7986-fw-20231024"

	config MT_WIFI_MT7986_20240823
	bool "mt7986-fw-20240823"
endchoice

config MT_WIFI_FIRMWARE_PATH_MT7916
	string
	default mt7916-fw-20221208 if MT_WIFI_MT7916_20221208
	default mt7916-fw-20240823 if MT_WIFI_MT7916_20240823

config MT_WIFI_FIRMWARE_PATH_MT7981
	string
	default mt7981-fw-20230306 if MT_WIFI_MT7981_20230306
	default mt7981-fw-20230330 if MT_WIFI_MT7981_20230330
	default mt7981-fw-20230411 if MT_WIFI_MT7981_20230411
	default mt7981-fw-20230717 if MT_WIFI_MT7981_20230717
	default mt7981-fw-20231024 if MT_WIFI_MT7981_20231024
	default mt7981-fw-20240823 if MT_WIFI_MT7981_20240823

config MT_WIFI_FIRMWARE_PATH_MT7986
	string
	default mt7986-fw-20221208 if MT_WIFI_MT7986_20221208
	default mt7986-fw-20230421 if MT_WIFI_MT7986_20230421
	default mt7986-fw-20230808 if MT_WIFI_MT7986_20230808
	default mt7986-fw-20231024 if MT_WIFI_MT7986_20231024
	default mt7986-fw-20240823 if MT_WIFI_MT7986_20240823

config FW_NEW_API_PATCH
	bool
	depends on MT_WIFI_DRIVER_VERSION_7661
	default y if !(MT_WIFI_MT7981_DEFAULT_FIRMWARE || MT_WIFI_MT7986_DEFAULT_FIRMWARE)

menu "WiFi Generic Feature Options"
choice
	prompt "EEPROM Type of 1st Card"
	depends on ! FIRST_IF_NONE

	config FIRST_IF_EEPROM_FLASH
	bool "FLASH"
	
	config FIRST_IF_EEPROM_PROM
	bool "EEPROM"

	config FIRST_IF_EEPROM_EFUSE
	bool "EFUSE"

endchoice

config RT_FIRST_CARD_EEPROM
	string
	depends on ! FIRST_IF_NONE
	default "prom" if FIRST_IF_EEPROM_PROM
	default "efuse" if FIRST_IF_EEPROM_EFUSE
	default "flash" if FIRST_IF_EEPROM_FLASH

choice
	prompt "EEPROM Type of 2nd Card"
	depends on ! SECOND_IF_NONE

	config SECOND_IF_EEPROM_FLASH
	bool "FLASH"

	config SECOND_IF_EEPROM_PROM
	bool "EEPROM"

	config SECOND_IF_EEPROM_EFUSE
	bool "EFUSE"

endchoice

config RT_SECOND_CARD_EEPROM
	string
	depends on ! SECOND_IF_NONE
	default "prom" if SECOND_IF_EEPROM_PROM
	default "efuse" if SECOND_IF_EEPROM_EFUSE
	default "flash" if SECOND_IF_EEPROM_FLASH

choice
		prompt "EEPROM Type of 3th Card"
		depends on ! THIRD_IF_NONE

		config THIRD_IF_EEPROM_FLASH
		bool "FLASH"

		config THIRD_IF_EEPROM_PROM
		bool "EEPROM"

		config THIRD_IF_EEPROM_EFUSE
		bool "EFUSE"

endchoice

config RT_THIRD_CARD_EEPROM
		string
		depends on ! THIRD_IF_NONE
		default "prom" if THIRD_IF_EEPROM_PROM
		default "efuse" if THIRD_IF_EEPROM_EFUSE
		default "flash" if THIRD_IF_EEPROM_FLASH
	
config MULTI_INF_SUPPORT
	bool
	default y if !FIRST_IF_NONE && !SECOND_IF_NONE

config WIFI_BASIC_FUNC
	bool "Basic Functions"
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV

config DOT11_N_SUPPORT
	bool "802.11n support"
	default y

config DOT11_VHT_AC
	bool "802.11AC support"
	depends on WIFI_DRIVER
	depends on DOT11_N_SUPPORT
	default y

config DOT11_HE_AX
	bool "802.11AX support"
	depends on WIFI_DRIVER
	depends on DOT11_VHT_AC
	depends on CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config CFG_SUPPORT_FALCON_MURU
	bool "MURU support"
	depends on WIFI_DRIVER
	depends on DOT11_VHT_AC
	depends on CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config CFG_SUPPORT_FALCON_TXCMD_DBG
	bool "TXCMD DBG support"
	depends on WIFI_DRIVER
	depends on DOT11_VHT_AC
	depends on CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config CFG_SUPPORT_FALCON_SR
	bool "SR(Spatial Reuse) support"
	depends on WIFI_DRIVER
	depends on CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config CFG_SUPPORT_FALCON_PP
	bool "PP(Preamble Puncture) support"
	depends on WIFI_DRIVER
	depends on CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config WIFI_TWT_SUPPORT
	bool "TWT(Target Wake Time) support"
	depends on WIFI_DRIVER
	depends on DOT11_HE_AX
	depends on CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config G_BAND_256QAM_SUPPORT
	bool "2.4G 256QAM support"
	depends on WIFI_DRIVER
	depends on DOT11_VHT_AC
        default y

config BRCM_256QAM_SUPPORT
	bool "BRCM 2.4G 256QAM support"
	depends on WIFI_DRIVER
	depends on G_BAND_256QAM_SUPPORT
	default n

config VHT_TXBF_2G_EPIGRAM_IE_SUPPORT
    bool "BRCM 2.4G VHT Sounding support"
	depends on WIFI_DRIVER
	default n
		
config TPC_SUPPORT
	bool "802.11h TPC Support"
	depends on WIFI_DRIVER
	default y

config ICAP_SUPPORT
	bool "ICAP Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default y

config SPECTRUM_SUPPORT
	bool "Wifi Spectrum Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default y

config PHY_ICS_SUPPORT
	bool "PHY ICS Support"
	depends on WIFI_DRIVER
	depends on CHIP_MT7986 || CHIP_MT7916
	default y

config BACKGROUND_SCAN_SUPPORT
	bool "Background Scan Support"
	depends on WIFI_DRIVER
	default y

config SMART_CARRIER_SENSE_SUPPORT
	bool "Smart Carrier Sense Support"
	depends on WIFI_DRIVER
	default y

config THERMAL_PROTECT_SUPPORT
        bool "THERMAL PROTECT SUPPORT"
        depends on WIFI_DRIVER && SMART_CARRIER_SENSE_SUPPORT
        default n

config SCS_FW_OFFLOAD
        bool "SCS FW OFFLOAD Support"
        depends on WIFI_DRIVER && SMART_CARRIER_SENSE_SUPPORT
        default n

config MT_DFS_SUPPORT
	bool "Dynamic Frequency Selection Support"
	depends on WIFI_DRIVER
	default y
	
config OFFCHANNEL_SCAN_FEATURE
	bool "Channel Quality Monitor"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default n

#config WFA_VHT_R2_PF
#	bool "WFA VHT R2 Plugfest"
#	depends on DOT11_VHT_AC
#	default n

config HDR_TRANS_TX_SUPPORT
	bool "Tx Header Translation"
	depends on CHIP_MT7615E || CHIP_MT7622 || CHIP_MT7626 || CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config HDR_TRANS_RX_SUPPORT
	bool "Rx Header Translation"
	depends on CHIP_MT7615E || CHIP_MT7622 || CHIP_MT7626 || CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	default y

config DBDC_MODE
	bool "dbdc mode support"
	depends on CHIP_MT7615E || CHIP_MT7626 || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	select MULTI_PROFILE_SUPPORT
	select DEFAULT_5G_PROFILE
	default y

config MULTI_PROFILE_SUPPORT
        bool "Multi Profile Support"
        depends on DBDC_MODE
        default y

config DEFAULT_5G_PROFILE
	bool "5G default profile for DBDC"
	depends on DBDC_MODE
#	depends on MULTI_PROFILE_SUPPORT
	default y

config WSC_INCLUDED
	bool "WSC (WiFi Simple Config)"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
	default y

config WSC_V2_SUPPORT
	bool "WSC V2(WiFi Simple Config Version 2.0)"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
	default y

config DOT11W_PMF_SUPPORT
	bool "PMF"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
	default y

config TXBF_SUPPORT
	bool "Tx Bean Forming Support"
	depends on WIFI_DRIVER
	default y

config FAST_NAT_SUPPORT
       bool "Fast-NAT support"
#       depends on RA_HW_NAT_WIFI
       default n

config WHNAT_SUPPORT
	tristate "Wifi Hardware NAT support"
	depends on CHIP_MT7615E || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	depends on WLAN_HOOK
	depends on FAST_NAT_SUPPORT
	depends on NET_MEDIATEK_HNAT
	default n

config WARP_V2
	bool "Warp driver version 2 support"
	depends on WARP_SUPPORT && WHNAT_SUPPORT
	default n

config WIFI_SKB_USES_SLAB
	bool "WiFi SKB allocation by SLAB"
	depends on WIFI_DRIVER
	default n

#config LLTD_SUPPORT
#	bool "LLTD (Link Layer Topology Discovery Protocol)"
#	depends on WIFI_DRIVER
#	depends on MT_AP_SUPPORT
#	default n

#config QOS_DLS_SUPPORT
#	bool "802.11e DLS ((Direct-Link Setup) Support"
#	depends on WIFI_DRIVER
#	depends on MT_AP_SUPPORT
#	default n

#config WAPI_SUPPORT
#	bool "WAPI Support"
#	depends on WIFI_DRIVER
#	default n

config FTM_SUPPORT
	bool "FTM Support"
	depends on WIFI_DRIVER
	select PASSPOINT_R2
	default n

#config CARRIER_DETECTION_SUPPORT
#	bool "Carrier Detect"
#	depends on WIFI_DRIVER
#	default n

config IGMP_SNOOP_SUPPORT
	bool "IGMP snooping"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default y

config MEMORY_SHRINK
	bool "Memory Shrink"
	depends on WIFI_DRIVER
	default n

config MEMORY_SHRINK_AGGRESS
	bool "Memory Shrink Aggressive"
	depends on MEMORY_SHRINK
	default n

config RPS_EFFICIENCY
	bool "RPS Efficiency"
	depends on WIFI_DRIVER && CHIP_MT7626
	default n

#config BLOCK_NET_IF
#	bool "NETIF Block"
#	depends on WIFI_DRIVER
#	depends on MT_AP_SUPPORT
#	default n
#	help
#	Support Net interface block while Tx-Sw queue full

#config RATE_ADAPTION
#	bool "New Rate Adaptation support"
#	depends on WIFI_DRIVER
#	default y

#config NEW_RATE_ADAPT_SUPPORT
#	bool "Intelligent Rate Adaption"
#	depends on WIFI_DRIVER && RATE_ADAPTION
#	default y

#config AGS_SUPPORT
#	bool "Adaptive Group Switching"
#	depends on WIFI_DRIVER && RATE_ADAPTION
#	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
#	default n

#config RATE_ADAPT_AGBS_SUPPORT
#	bool "Adaptive AGBS Mode"
#	depends on WIFI_DRIVER && RATE_ADAPTION
#	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
#	default y

#config IDS_SUPPORT
#	bool "IDS (Intrusion Detection System) Support"
#	depends on WIFI_DRIVER
#	depends on MT_AP_SUPPORT
#	default n

#config WIFI_WORK_QUEUE
#	bool "Work Queue"
#	depends on WIFI_DRIVER
#	default n

#config WIFI_SKB_RECYCLE
#	bool "SKB Recycle(Linux)"
#	depends on WIFI_DRIVER
#	depends on MT_AP_SUPPORT
#	default n

config RTMP_FLASH_SUPPORT
	bool "Flash Support"
	depends on WIFI_DRIVER
	default y

config PRE_CAL_TRX_SET1_SUPPORT
	bool "Calibration To Flash/BinFile Support"
	depends on WIFI_DRIVER
	default y

config RLM_CAL_CACHE_SUPPORT
	bool "RlmCalibrationCache Support"
	depends on WIFI_DRIVER
	default y

config PRE_CAL_TRX_SET2_SUPPORT
	bool "Pre-calibration to Flash Support"
	depends on WIFI_DRIVER
	default y

config CAL_BIN_FILE_SUPPORT
	bool "Calibration to BinFile Support"
	depends on WIFI_DRIVER
	default y

config RF_LOCKDOWN_SUPPORT
	bool "RF Lockdown Support"
	depends on WIFI_DRIVER
	default n	

config LINK_TEST_SUPPORT
	bool "Link Test Support"
	depends on WIFI_DRIVER
	default n

#config LED_CONTROL_SUPPORT
#	bool "LED Support"
#	depends on WIFI_DRIVER
#	depends on MT_AP_SUPPORT
#	default n

config ATE_SUPPORT
	bool "ATE/QA Support"
	depends on WIFI_DRIVER
	default y

config WLAN_SERVICE
        bool "Wlan Service Library Support"
        depends on WIFI_DRIVER
        default n

#config MEMORY_OPTIMIZATION
#	bool "Memory Optimization"
#	depends on WIFI_DRIVER
#	default n

config PASSPOINT_R2
	bool "Passpoint Release-2 Support"
	depends on WIFI_DRIVER
	select DOT11W_PMF_SUPPORT
	depends on MT_AP_SUPPORT
	default n

config MBO_SUPPORT
        bool "MBO Support"
        depends on WIFI_DRIVER
        select INTERWORKING
        select WNM_SUPPORT
        select DOT11K_RRM_SUPPORT
        select DOT11R_FT_SUPPORT
        select DOT11W_PMF_SUPPORT
        default n

config OCE_SUPPORT
	bool "Optimized Connectivity Experience Support"
	depends on MT_AP_SUPPORT
	depends on MBO_SUPPORT
	depends on CHIP_MT7915 || CHIP_MT7986
	default y

config WTBL_TDD_SUPPORT
	bool "S/W WTBL TDD SWAP Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	depends on CHIP_MT7915 || CHIP_MT7916 || CHIP_MT7986 || CHIP_MT7981
	default n

config SW_CONNECT_SUPPORT
	bool "Pure S/W STA Increase Connection Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	depends on CHIP_MT7915 || CHIP_MT7916 || CHIP_MT7986 || CHIP_MT7981
	default n

config MAP_SUPPORT
        bool "MAP Support"
        depends on WIFI_DRIVER
        select INTERWORKING
        select WNM_SUPPORT
        select DOT11K_RRM_SUPPORT
        select DOT11R_FT_SUPPORT
        select DOT11W_PMF_SUPPORT
        default n

config MAP_R2_VER_SUPPORT
        bool "Multi-AP R2 version support"
        depends on MAP_SUPPORT
        default n

config MAP_R3_VER_SUPPORT
        bool "Multi-AP R3 version support"
        depends on MAP_SUPPORT
        depends on MAP_R2_VER_SUPPORT
        default n

config MAP_R2_6E_SUPPORT
	bool "Multi-AP R2 6E support"
        depends on MAP_SUPPORT
        default n

config MAP_R3_6E_SUPPORT
	bool "Multi-AP R3 6E support"
        depends on MAP_SUPPORT
        depends on MAP_R2_6E_SUPPORT
        default n

#config TRACE_TCP_PKT
#	   bool "TCP DATA/ACK packets trace log"
#	   depends on WIFI_DRIVER
#	   default n

config UAPSD
	bool "UAPSD support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
	default y

config TCP_RACK_SUPPORT
	bool "TCP Reduced ACK  support"
	depends on WIFI_DRIVER
	default n

#### PA_LNA_Type choice

config RED_SUPPORT
        bool "RED(Random Early Drop) support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT || MT_STA_SUPPORT
        default y

config FQ_SCH_SUPPORT
        bool "Fair Queueing support"
        depends on WIFI_DRIVER
        depends on MT_AP_SUPPORT && VOW_SUPPORT
        depends on CHIP_MT7622
        default y

config CTXD_MEM_CPY_SUPPORT
	bool "CTXD(sw mode) support"
	depends on WIFI_DRIVER
	default n

config CTXD_SCATTER_AND_GATHER_SUPPORT
        bool "CTXD(hw mode) support"
        depends on WIFI_DRIVER
        default n

config FDB_SUPPORT
       bool "FW Debug Port"
       depends on WIFI_DRIVER
       default n

choice
        prompt "PA LNA Type of 1st Card"
		depends on ! FIRST_IF_NONE
		
		config FIRST_IF_EPAELNA
		bool "ePAeLNA"
		config FIRST_IF_IPAILNA
		bool "iPAiLNA"		
		config FIRST_IF_IPAELNA
		bool "iPAeLNA"
#		config FIRST_IF_EPAILNA
#		bool "ePAiLNA"
endchoice
choice
        prompt "PA LNA Type of 2nd Card"
		depends on ! SECOND_IF_NONE
		
		config SECOND_IF_EPAELNA
		bool "ePAeLNA"
		config SECOND_IF_IPAILNA
		bool "iPAiLNA"		
		config SECOND_IF_IPAELNA
		bool "iPAeLNA"
#		config SECOND_IF_EPAILNA
#		bool "ePAiLNA"
endchoice
choice
        prompt "PA LNA Type of 3rd Card"
		depends on ! THIRD_IF_NONE
		
		config THIRD_IF_EPAELNA
		bool "ePAeLNA"
		config THIRD_IF_IPAILNA
		bool "iPAiLNA"		
		config THIRD_IF_IPAELNA
		bool "iPAeLNA"
#		config THIRD_IF_EPAILNA
#		bool "ePAiLNA"
endchoice
#### PA_LNA_Type choice END 

config WIFI_FW_BIN_LOAD
       depends on CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
       bool "load wifi fw with bin file"
       default n

config WIFI_SKU_TYPE
       depends on CHIP_MT7986
       string "Panther SKU Type : AX6000 or AX7800 or SADBDC"
       default "AX6000"

config WIFI_ADIE_TYPE
       depends on CHIP_MT7986
       string "Panther ADIE Type : mt7975 or mt7976"
       default "mt7976"

#
# Section for chip architectures
#
# "RLT MAC Support"
config RLT_MAC
	bool
	depends on WIFI_DRIVER
	default n

config RLT_BBP
	bool

config RLT_RF
	bool

# "RTMP MAC Support"
config RTMP_MAC
	bool
	depends on WIFI_DRIVER
	default n

config RTMP_BBP
	bool

config RTMP_RF
	bool

#
# Section for interfaces
#
config RTMP_PCI_SUPPORT
	bool

config RTMP_USB_SUPPORT
	bool

config RTMP_RBUS_SUPPORT
	bool

endmenu

menu "WiFi Operation Modes"
choice
	prompt "Main Mode"
	default WIFI_MODE_AP

	config WIFI_MODE_AP
		tristate "AP"
		select MT_AP_SUPPORT

	config WIFI_MODE_STA
		tristate "STA"
		select MT_STA_SUPPORT

	config WIFI_MODE_BOTH
		tristate "APSTA"
		select MT_AP_SUPPORT
		select MT_STA_SUPPORT
endchoice


config MT_AP_SUPPORT
	tristate "Ralink RT2860 802.11n AP support"
#	depends on NET_RADIO
	select WIRELESS_EXT
	select WEXT_SPY
	select WEXT_PRIV

config WDS_SUPPORT
	bool "WDS"
	depends on MT_AP_SUPPORT
	default y

config MBSS_SUPPORT
	bool "MBSSID"
	depends on MT_AP_SUPPORT
	default y

#config NEW_MBSSID_MODE
#	bool "New MBSSID MODE"
#	depends on MT_AP_SUPPORT && MBSS_SUPPORT
#	depends on RALINK_RT3883 || RALINK_RT3352 || RALINK_RT5350 || RALINK_RT6352 || RALINK_MT7620
#	default y

#config ENHANCE_NEW_MBSSID_MODE
#	bool "Enhanced MBSSID mode"
#	depends on NEW_MBSSID_MODE
#	default y

config APCLI_SUPPORT
	bool "AP-Client Support"
	depends on MT_AP_SUPPORT
	default y

config APCLI_CERT_SUPPORT
	bool "AP-Client TGn Cert Support"
	depends on MT_AP_SUPPORT
	depends on APCLI_SUPPORT
        default n

config MAC_REPEATER_SUPPORT
	bool "MAC Repeater Support"
	depends on MT_AP_SUPPORT
	depends on APCLI_SUPPORT
	depends on RALINK_RT6352 || RALINK_MT7620 || RALINK_MT7603E || MT_AP_SUPPORT
	default y

config APCLI_CONNECTION_TRIAL
        bool "Trial Connection"
        depends on MT_AP_SUPPORT
        depends on APCLI_SUPPORT
        default n

config MWDS
    bool "Mixed WDS(MWDS)"
    depends on MT_AP_SUPPORT
    select APCLI_SUPPORT
    default n

config WIFI_SYSDVT
    bool "Wifi System DVT tool Support"
    depends on MT_AP_SUPPORT
    default n

config MUMIMO_SUPPORT
        bool "MU-MIMO Support"
        depends on WIFI_DRIVER
        select MU_RA_SUPPORT
        default y

config MU_RA_SUPPORT
  	bool "MU-RGA Support"
  	depends on MUMIMO_SUPPORT

config DOT11R_FT_SUPPORT
	bool "802.11r Fast BSS Transition"
	depends on MT_AP_SUPPORT
	default n

config DOT11K_RRM_SUPPORT
	bool "802.11k Radio Resource Management"
	depends on MT_AP_SUPPORT
	default n

config ENTERPRISE_AP_SUPPORT
	bool "Enterprise AP Support"
	depends on MT_AP_SUPPORT
	default n

config MLME_MULTI_QUEUE_SUPPORT
	bool "Mlme MultiQueue Support"
	depends on MT_AP_SUPPORT
	default n

config WIFI_EAP_FEATURE
	bool "EAP Feature"
	depends on WIFI_DRIVER
	default y

#VLAN
config VLAN_SUPPORT
	bool "VLAN Support"
	depends on MT_AP_SUPPORT
	depends on WIFI_EAP_FEATURE
	default n

#Sniffer
config SNIFFER_SUPPORT
	bool "SNIFFER"
	depends on MT_AP_SUPPORT
	depends on WIFI_EAP_FEATURE
	default n

#Highpriority frame rate specific
config HIGHPRI_RATE_SPECIFIC
	bool "Highpriority frame rate specific"
	depends on MT_AP_SUPPORT
	depends on WIFI_EAP_FEATURE
	default n

config SNIFFER_RADIOTAP_SUPPORT
	bool "SNIFFER_RADIOTAP"
	default y

config WF_RESET_SUPPORT
	bool "WIFI RESET"
	default n

#TxRx Statistic
config TXRX_STAT_SUPPORT
	bool "TxRx Stats Support"
	depends on WIFI_DRIVER && WIFI_EAP_FEATURE
	default n

#Antenna control
config ANTENNA_CONTROL_SUPPORT
	bool "Antenna Control"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#Mgmt Tx Power
config MGMT_TXPWR_CTRL
	bool "Mgmt TxPower Control"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#TxD based Mgmt Tx Power
config TXD_MGMT_TXPWR_CTRL
	bool "TxD based Mgmt TxPower Control"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#Channel Utilization
config CHUTIL_SUPPORT
	bool "Channel Utilization Support"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#Noise Floor
config NF_SUPPORT
	bool "Noise Floor Support"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#RA_PHY_RATE
config RA_PHY_RATE_SUPPORT
	bool "RA PHY RATE Support"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#AMPDU Config
config AMPDU_CONF_SUPPORT
	bool "AMPDU Config retry & agglimitSupport"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#ACK CTS Timeout
config ACK_CTS_TIMEOUT_SUPPORT
	bool "ACK CTS Timeout cck & ofdm Support"
	depends on MT_AP_SUPPORT && WIFI_EAP_FEATURE
	default n

#MBSS_DTIM_SUPPORT
config MBSS_DTIM_SUPPORT
	bool "MBSS DTIM SUPPORT"
	depends on MT_AP_SUPPORT
	default n

config RADIUS_MAC_AUTH_SUPPORT
    bool "RADIUS MAC Auth Support"
    depends on ENTERPRISE_AP_SUPPORT
    depends on CFG80211_SUPPORT
    default n

config ZERO_LOSS_CSA_SUPPORT
	bool "Zero Loss CSA Support"
	depends on MT_AP_SUPPORT
	default n

config DYNAMIC_VLAN_SUPPORT
	bool "Dynamic VLAN Support"
	depends on MT_AP_SUPPORT
	depends on ENTERPRISE_AP_SUPPORT
	default n

config CFG80211_SUPPORT
	bool "CFG80211"
	depends on MT_AP_SUPPORT
	default n

config IAP_VENDOR1_FEATURE_SUPPORT
	bool "IAP Vendor1 Feature enable"
	depends on ENTERPRISE_AP_SUPPORT
	default n

#CUSTOMISED HOSTAPD
config CUSTOMISED_HOSTAPD_SUPPORT
	bool "Customised Hostapd Support"
	depends on MT_AP_SUPPORT
	depends on CFG80211_SUPPORT
	default n

#HOSTAPD_MAP_SUPPORT
config HOSTAPD_MAP_SUPPORT
        bool "Hostapd MAP Support"
        depends on MT_AP_SUPPORT
        depends on CFG80211_SUPPORT
        default n

#HOSTAPD_WAPP_SUPPORT
config HOSTAPD_WAPP_SUPPORT
        bool "Hostapd WAPP Support"
        depends on MT_AP_SUPPORT
        depends on CFG80211_SUPPORT
        default n

#HOSTAPD_WPA3_SUPPORT
config HOSTAPD_WPA3_SUPPORT
        bool "Hostapd WPA3 Support"
        depends on MT_AP_SUPPORT
        depends on CFG80211_SUPPORT
        default n

#HOSTAPD_WPA3R3_SUPPORT
config HOSTAPD_WPA3R3_SUPPORT
        bool "Hostapd WPA3R3 Support"
        depends on HOSTAPD_WPA3_SUPPORT
        default n

#DBDC_ONE_BAND_SUPPORT
config DBDC_ONE_BAND_SUPPORT
        bool "Single Band DBDC Support"
        depends on MT_AP_SUPPORT
        default n

#APCLI STA
config APCLI_STA_SUPPORT
	bool "APCLI Supplicant Support"
	depends on APCLI_SUPPORT
	depends on CFG80211_SUPPORT
	default n

#WDS STA
config WDS_STA_SUPPORT
	bool "WDS STA Support"
	depends on APCLI_SUPPORT
	depends on CFG80211_SUPPORT
	default n

#WDS AP
config MBSS_AS_WDS_AP_SUPPORT
	bool "MBSS AS WDS AP Support"
	depends on MT_AP_SUPPORT
	depends on MBSS_SUPPORT
	default n

config DSCP_QOS_MAP_SUPPORT
	bool "Dscp Qos Mapping Support"
	depends on MT_AP_SUPPORT
	default n

config QOS_R1_SUPPORT
	bool "MTK QoS R1 support"
	default n

config DSCP_PRI_SUPPORT
	bool "Dscp Priority Mapping Support"
	depends on MT_AP_SUPPORT
	default n

config MIN_PHY_RATE_SUPPORT
        bool "Minimum PHY rate support"
        depends on MT_AP_SUPPORT
        default n

config FAST_UP_RATE_SUPPORT
        bool "Fast UP rate support"
        depends on MT_AP_SUPPORT
        default n

config CON_WPS_SUPPORT
	bool "Concurrent WPS Support"
	depends on MT_AP_SUPPORT
	depends on APCLI_SUPPORT
	depends on WSC_INCLUDED
	depends on WSC_V2_SUPPORT
#	depends on MULTI_INF_SUPPORT
	default n

#config LLTD_SUPPORT
#	bool "LLTD (Link Layer Topology Discovery Protocol)"
#	depends on MT_AP_SUPPORT

#config COC_SUPPORT
#	bool "CoC Support"
#	depends on MT_AP_SUPPORT
#	default n

#config  RT2860V2_SNMP
#	bool "Net-SNMP Support"
#	depends on MT_AP_SUPPORT

config MCAST_RATE_SPECIFIC
	bool "User specific tx rate of mcast pkt"
	depends on MT_AP_SUPPORT
	default y

#config EXT_BUILD_CHANNEL_LIST
#	bool "Extension Channel List"
#	depends on MT_AP_SUPPORT

#config AUTO_CH_SELECT_ENHANCE
#	bool "Auto Channel Selection Enhancement"
#	depends on MT_AP_SUPPORT

config VOW_SUPPORT
	bool "MediaAir(VOW) support"
	depends on MT_AP_SUPPORT
	default y

#config AIRPLAY_SUPPORT
#	bool "AIRPLAY Support"
#	depends on MT_AP_SUPPORT
#	default n

config BAND_STEERING
	bool "Band Steering"
	depends on MT_AP_SUPPORT
	default y

config LED_CONTROL_SUPPORT
	bool "LED Control Support"
	default n

config WLAN_HOOK
       bool "WLAN hook Support"
       depends on WIFI_DRIVER
       default n

config RADIUS_ACCOUNTING_SUPPORT
	bool "Radius Accounting Support"
	depends on MT_AP_SUPPORT
	default n

config GREENAP_SUPPORT
	bool "GreenAP Support"
	depends on MT_AP_SUPPORT
	default y

config WIFI_CSI_CN_INFO_SUPPORT
	bool "CSI CN Info Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default n

config 6G_AFC_SUPPORT
	bool "6G Band AFC Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default n

config DFS_SLAVE_SUPPORT
	bool "DFS-Slave Support"
	depends on WIFI_DRIVER
	depends on MT_AP_SUPPORT
	default n

config VENDOR_FEATURE11_SUPPORT
        bool "Vendor11 Feature Enable"
        depends on WIFI_DRIVER
        depends on MT_AP_SUPPORT
        default n

config PCIE_ASPM_DYM_CTRL_SUPPORT
	bool "Pcie Aspm Dynamic Control Support"
	depends on MT_AP_SUPPORT
	default y

config COEX_SUPPORT
	bool "Coex Support"
	depends on MT_AP_SUPPORT
	default n

config EASY_SETUP_SUPPORT
	bool "Whole Home Coverage - Easy Setup"
	depends on MT_AP_SUPPORT
	default n   

config EVENT_NOTIFIER_SUPPORT
	bool "Whole Home Coverage - Event Notifier"
	depends on MT_AP_SUPPORT
	default n

config AIR_MONITOR
        bool "Air Monitor"
        depends on MT_AP_SUPPORT
        default n

config WNM_SUPPORT
        bool "802.11v WNM Support"
        depends on MT_AP_SUPPORT
        default n

config INTERWORKING
        bool "802.11u Interworking"
        depends on MT_AP_SUPPORT
        default n

#config ROAMING_ENHANCE_SUPPORT
#	bool "Roaming Enhance Support"
#	depends on MT_AP_SUPPORT
#	depends on APCLI_SUPPORT
#	default n

config LINUX_NET_TXQ_SUPPORT
	bool "NET TX Queue Support"
	default n

#config WIFI_FWD_SUPPORT
#        bool "WiFi Forwarding Support"
#        default n

config  WPA3_SUPPORT
        bool "WPA3 Support"
        depends on MT_AP_SUPPORT
        default n

config  OWE_SUPPORT
        bool "Enhanced Open Support"
        depends on MT_AP_SUPPORT
        default n

config  SINGLE_SKU
        bool "Single SKU Support"
        depends on MT_AP_SUPPORT
        default n

config PROFILING_SUPPORT
        bool "WIFI Profiling Support"
        default n

config 6G_SUPPORT
        bool "WIFI 6G Support"
        default n
        help
          Supporting 6GHz Wi-Fi

config BSSMGR_CROSS_MODULE_SUPPORT
        bool "WIFI 6G BSS Manager Cross Module Support"
        depends on 6G_SUPPORT
        default n
        help
          Supporting 6GHz Wi-Fi BSS Manager Cross Module

endmenu

endif

config WIFI_MT_MAC
	bool
	default y
	depends on MT_WIFI
	
if WIFI_RLT_MAC
	config RLT_MAC
	bool
	default y
endif

if WIFI_RTMP_MAC
	config RTMP_MAC
		bool
		default y
endif

if WIFI_MT_MAC
	config MT_MAC
		bool
		default y

	config CHIP_MT7603E
		bool
		default n

	config CHIP_MT7615E
		bool
		default n

	config CHIP_MT7622
		bool
		default n

	config CHIP_MT7663E
		bool
		default n

	config CHIP_MT7626
		bool
		default n
	config CHIP_AXE
		bool
		default n
	config CHIP_MT7915
		bool
		default n
	config CHIP_MT7986
		bool
		default n
	config CHIP_MT7916
		bool
		default n
	config CHIP_MT7981
		bool
		default n
endif

if CHIP_MT7615E || CHIP_MT7622 || CHIP_MT7626 || CHIP_AXE || CHIP_MT7915 || CHIP_MT7986 || CHIP_MT7916 || CHIP_MT7981
	config MT_MAC
		bool
		default y
		select RATE_ADAPTION
		select RATE_ADAPT_AGBS_SUPPORT
		select DOT11_N_SUPPORT
		select DOT11_VHT_AC
		select HDR_TRANS_TX_SUPPORT
		select HDR_TRANS_RX_SUPPORT
endif

endif #WIFI_DRIVER#



然后添加Makefile的内容:

obj-$(CONFIG_MT_WIFI_SUPPORT) += mt_wifi_ap/

上层编译目录模仿之前的添加即可,不再列举。

然后对照着openwrt把选项选中,一定要认真,选项太多了。

后面太多了不列举了。选好后开始编译。

好了,编译完成了。

生成模块

执行命令生成内核镜像:

$ mkimage -f mt798x-kernel.its vmlinuz-dtb.img

执行安装模块命令,等待备用。

$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=`pwd`/build-modules/

后面等我们做完文件系统后,再把目录里面的驱动加到系统里面去。

Ubuntu文件系统制作

首先安装以下包

sudo apt-get install qemu qemu-user-static debootstrap
制作基础文件系统

新建个目录,就叫arm64_ubuntu20吧。然后进入目录,执行:

$ sudo debootstrap --arch arm64 focal . https://mirrors.aliyun.com/ubuntu-ports/

运行完成后,chroot到目录,再安装一些其它必须包:

$ sudo chroot .
# apt-get install systemd systemd-sysv udev wget net-tools iputils-ping isc-dhcp-client libxml2-dev libnl-genl-3-dev libreadline-dev libtinfo-dev sudo vim apt-utils

CTRL+D退出。

准备固件和配置

然后把配置和固件拷贝过来:

$ sudo cp -rf ../../mt798x-workspace/openwrt/build_dir/target-aarch64_cortex-a53_musl/root.orig-mediatek/etc/wireless/ 
etc/
$ sudo cp -rf ../../mt798x-workspace/openwrt/build_dir/target-aarch64_cortex-a53_musl/root.orig-mediatek/lib/firmware/ lib/
安装内核及驱动

然后再把我们刚才编译的驱动和内核镜像拷贝过来:

$ sudo cp ../../mt798x-workspace/mt798x-linux/linux-5.4.281/vmlinuz-dtb.img ./
$ sudo cp -rf ../../mt798x-workspace/mt798x-linux/linux-5.4.281/build-modules/lib/modules/ lib/

这样一个完整的文件系统就做好了。

$ ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  vmlinuz-dtb.img
修改密码

然后还有个最关键的一步,继续chroot到系统,然后执行:

# passwd root
New password: 
Retype new password: 
passwd: password updated successfully

密码自己设置。

制作能挂载EMMC的引导固件

现在我们既然使用了spi-nor+emmc的这种方式,传统的spi-nor的固件无法满足我们的要求,那么这时候我们需要重新定制固件。因为FIP分区大小有改变,也无法在Uboot烧写,所以后面烧写第一次是在ram中烧写的,或者去救援模式烧写。后面直接在uboot中更新即可。

制作固件

在u-boot下新建配置文件mt7981_spim_nor_emmc_rfb_defconfig,然后内容如下:

CONFIG_ARM=y
CONFIG_SYS_HAS_NONCACHED_MEMORY=y
CONFIG_POSITION_INDEPENDENT=y
CONFIG_ARCH_MEDIATEK=y
CONFIG_TEXT_BASE=0x41e00000
CONFIG_SYS_MALLOC_F_LEN=0x4000
CONFIG_NR_DRAM_BANKS=1
CONFIG_ENV_SIZE=0x10000
CONFIG_ENV_OFFSET=0x0
CONFIG_DEFAULT_DEVICE_TREE="mt7981-spim-nor-emmc-rfb"
CONFIG_SYS_PROMPT="MT7981> "
CONFIG_TARGET_MT7981=y
CONFIG_DEBUG_UART_BASE=0x11002000
CONFIG_DEBUG_UART_CLOCK=40000000
CONFIG_SYS_LOAD_ADDR=0x46000000
CONFIG_PCI=y
CONFIG_DEBUG_UART=y
CONFIG_MEDIATEK_BOOTMENU=y
CONFIG_MTK_UPGRADE_BL2_VERIFY=y
CONFIG_MTK_UPGRADE_FIP_VERIFY=y
CONFIG_AUTOBOOT_MENU_SHOW=y
CONFIG_AUTOBOOT_MENU_MTK_SHOW=y
CONFIG_DEFAULT_FDT_FILE="mt7981-spim-nor-emmc-rfb"
CONFIG_LOGLEVEL=7
CONFIG_LOG=y
CONFIG_SYS_CBSIZE=512
CONFIG_SYS_PBSIZE=1049
# CONFIG_BOOTM_NETBSD is not set
# CONFIG_BOOTM_PLAN9 is not set
# CONFIG_BOOTM_RTEMS is not set
# CONFIG_BOOTM_VXWORKS is not set
# CONFIG_CMD_ELF is not set
# CONFIG_CMD_UNLZ4 is not set
# CONFIG_CMD_UNZIP is not set
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_GPIO=y
CONFIG_CMD_PWM=y
CONFIG_CMD_MTD=y
CONFIG_CMD_PCI=y
CONFIG_CMD_SF_TEST=y
CONFIG_CMD_PING=y
CONFIG_MTDIDS_DEFAULT="nor0=nor0"
CONFIG_MTDPARTS_DEFAULT="nor0:256k(bl2),64k(u-boot-env),704k(factory),2048k(fip)"
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MTD=y
CONFIG_ENV_MTD_NAME="u-boot-env"
CONFIG_ENV_SIZE_REDUND=0x10000
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_USE_IPADDR=y
CONFIG_IPADDR="192.168.1.1"
CONFIG_USE_NETMASK=y
CONFIG_NETMASK="255.255.255.0"
CONFIG_USE_SERVERIP=y
CONFIG_SERVERIP="192.168.1.2"
CONFIG_PROT_TCP=y
CONFIG_REGMAP=y
CONFIG_SYSCON=y
CONFIG_CLK=y
CONFIG_SYS_I2C_MTK=y
CONFIG_CMD_GPT=y
CONFIG_CMD_GPT_RENAME=y
CONFIG_CMD_LSBLK=y
CONFIG_MMC=y
CONFIG_CMD_MMC=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_SMC=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_PARTITION_TYPE_GUID=y
CONFIG_MMC_HS200_SUPPORT=y
CONFIG_MMC_MTK=y
CONFIG_DM_MTD=y
CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
CONFIG_SPI_FLASH_EON=y
CONFIG_SPI_FLASH_GIGADEVICE=y
CONFIG_SPI_FLASH_ISSI=y
CONFIG_SPI_FLASH_MACRONIX=y
CONFIG_SPI_FLASH_SPANSION=y
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_SPI_FLASH_XMC=y
CONFIG_SPI_FLASH_XTX=y
CONFIG_SPI_FLASH_MTD=y
CONFIG_PHY_FIXED=y
CONFIG_MEDIATEK_ETH=y
CONFIG_PCIE_MEDIATEK=y
CONFIG_PINCTRL=y
CONFIG_PINCONF=y
CONFIG_PINCTRL_MT7981=y
CONFIG_POWER_DOMAIN=y
CONFIG_MTK_POWER_DOMAIN=y
CONFIG_DM_PWM=y
CONFIG_PWM_MTK=y
CONFIG_DM_SERIAL=y
CONFIG_MTK_SERIAL=y
CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_MTK_SPIM=y
CONFIG_HEXDUMP=y
CONFIG_FAT_WRITE=y
CONFIG_LMB_MAX_REGIONS=64

然后新建设备树mt7981-spim-nor-emmc-rfb.dts,内容如下:

// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2022 MediaTek Inc.
 * Author: Sam Shih <sam.shih@mediatek.com>
 */

/dts-v1/;
#include "mt7981.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	model = "mt7981-rfb";
	compatible = "mediatek,mt7981", "mediatek,mt7981-rfb";
	chosen {
		stdout-path = &uart0;
		tick-timer = &timer0;
	};

	memory@40000000 {
		device_type = "memory";
		reg = <0x40000000 0x10000000>;
	};

	bl2_verify {
		bl2_compatible = "spim-nor";
	};
};

&uart0 {
	status = "okay";
};

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart1_pins>;
	status = "disabled";
};

&eth {
	status = "okay";
	mediatek,gmac-id = <0>;
	phy-mode = "2500base-x";
	mediatek,switch = "mt7531";
	reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>;

	fixed-link {
		speed = <2500>;
		full-duplex;
	};
};

&pinctrl {
	spic_pins: spi1-pins-func-1 {
		mux {
			function = "spi";
			groups = "spi1_1";
		};
	};

	spi2_flash_pins: spi2-spi2-pins {
		mux {
			function = "spi";
			groups = "spi2", "spi2_wp_hold";
		};

		conf-pu {
			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
			drive-strength = <MTK_DRIVE_8mA>;
			bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
		};

		conf-pd {
			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
			drive-strength = <MTK_DRIVE_8mA>;
			bias-pull-down = <MTK_PUPD_SET_R1R0_00>;
		};
	};

	uart1_pins: spi1-pins-func-3 {
		mux {
			function = "uart";
			groups = "uart1_2";
		};
	};

	/* pin15 as pwm0 */
	one_pwm_pins: one-pwm-pins {
		mux {
			function = "pwm";
			groups = "pwm0_1";
		};
	};

	/* pin15 as pwm0 and pin14 as pwm1 */
	two_pwm_pins: two-pwm-pins {
		mux {
			function = "pwm";
			groups = "pwm0_1", "pwm1_0";
		};
	};

	/* pin15 as pwm0, pin14 as pwm1, pin7 as pwm2 */
	three_pwm_pins: three-pwm-pins {
		mux {
			function = "pwm";
			groups = "pwm0_1", "pwm1_0", "pwm2";
		};
	};

	mmc0_pins_default: mmc0default {
		mux {
			function = "flash";
			groups =  "emmc_45";
		};
		conf-cmd-dat {
			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO",
				"SPI0_CS",  "SPI0_HOLD", "SPI0_WP",
				"SPI1_CLK", "SPI1_MOSI", "SPI1_MISO";
			input-enable;
			drive-strength = <MTK_DRIVE_4mA>;
			bias-pull-up = <MTK_PUPD_SET_R1R0_01>;
		};
		conf-clk {
			pins = "SPI1_CS";
			drive-strength = <MTK_DRIVE_6mA>;
			bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
		};
		conf-rst {
			pins = "PWM0";
			drive-strength = <MTK_DRIVE_4mA>;
			bias-pull-up = <MTK_PUPD_SET_R1R0_01>;
		};
	};
};

&spi2 {
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&spi2_flash_pins>;
	status = "okay";
	must_tx;
	enhance_timing;
	dma_ext;
	ipm_design;
	support_quad;
	tick_dly = <2>;
	sample_sel = <0>;

	spi_nor@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <52000000>;
	};
};

&pwm {
	pinctrl-names = "default";
	pinctrl-0 = <&two_pwm_pins>;
	status = "okay";
};

&watchdog {
	status = "disabled";
};

&mmc0 {
	pinctrl-names = "default";
	pinctrl-0 = <&mmc0_pins_default>;
	bus-width = <8>;
	max-frequency = <52000000>;
	cap-mmc-highspeed;
	cap-mmc-hw-reset;
	vmmc-supply = <&reg_3p3v>;
	non-removable;
	status = "okay";
};


然后atf的配置,我是针对gr100的,配置如下:

# _PLAT_MT7622 is not set
# _PLAT_MT7629 is not set
_PLAT_MT7981=y
# _PLAT_MT7986 is not set
# _PLAT_MT7988 is not set
PLAT="mt7981"
_SUPPORTS_DDR4=y
# _DRAM_DDR3 is not set
_DRAM_DDR4=y
DRAM_USE_DDR4=1
_SUPPORTS_DDR3_256MB=y
_SUPPORTS_DDR3_512MB=y
_SUPPORTS_DDR4_512MB=y
_SUPPORTS_DDR4_1GB=y
_SUPPORTS_DDR3_FREQ=y
_SUPPORTS_DDR3_1866=y
_SUPPORTS_DDR3_2133=y
_DEFAULT_DDR3_2133=y
_SUPPORTS_DRAM_DEBUG_LOG=y

#
# Advanced DRAM configurations
#
_DRAM_SIZE_AUTO=y
# _DRAM_SIZE_512MB is not set
# _DRAM_SIZE_1GB is not set
_MT7981_BOARD_BGA=y
BOARD_BGA=1
# _DRAM_DEBUG_LOG is not set
# end of Advanced DRAM configurations

_SUPPORTS_BOOT_DEVICE_SPIM_NAND=y
_SUPPORTS_BOOT_DEVICE_EMMC_SD=y
_DEFAULT_BOOT_DEVICE_SPIM_NAND=y
_BOOT_DEVICE_SPI_NOR=y
# _BOOT_DEVICE_SNFI_NAND is not set
# _BOOT_DEVICE_SPIM_NAND is not set
# _BOOT_DEVICE_EMMC is not set
# _BOOT_DEVICE_SD is not set
# _BOOT_DEVICE_RAM is not set

#
# Advanced boot device configuration
#
_BROM_NAND_HEADER_HSM=y
_DEFAULT_NAND_NMBM=y
# _ENABLE_OVERRIDE_FIP_BASE is not set
# _ENABLE_OVERRIDE_FIP_SIZE is not set
# end of Advanced boot device configuration

BOOT_DEVICE="nor"

#
# Platform configurations
#
_SUPPORTS_EMERG_MEM_DUMP=y
# _ENABLE_EMERG_MEM_DUMP is not set
# _ENABLE_JTAG is not set
# end of Platform configurations

_BUILD_FIP=y
BL33="../uboot-mtk-20230718-09eda825/u-boot.bin"

#
# Advanced build configurations
#
# _ENABLE_BL2_COMPRESS is not set
# _ENABLE_FIP_COMPRESS is not set
# _USE_MKIMAGE is not set
# end of Advanced build configurations

_SUPPORTS_AR_V2=y
# _ENABLE_SBC is not set
CROSS_COMPILE="/usr/bin/aarch64-linux-gnu-"
# _LOG_LEVEL_NONE is not set
# _LOG_LEVEL_ERROR is not set
# _LOG_LEVEL_NOTICE is not set
_LOG_LEVEL_WARNING=y
# _LOG_LEVEL_INFO is not set
# _LOG_LEVEL_VERBOSE is not set
LOG_LEVEL=30

然后就可以编译出支持emmc的bl2.img和fip.bin了。

修改设备树

因为修改了snor的分区和大小,所以内核设备树这块也要相应的进行修改。

修改后编译出来ram镜像。

烧写固件

启动刚才编译的ram固件,然后会发现分区大小已经改过来了:

$ cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00040000 00010000 "BL2"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 000b0000 00010000 "Factory"
mtd3: 00200000 00010000 "FIP"

所以这时候直接烧写刚才编译好的固件就可以。

$ wget http://192.168.100.166/bl2.img
$ wget http://192.168.100.166/fip.bin
$ flash_erase /dev/mtd0 0 0
$ flash_erase /dev/mtd3 0 0
$ flashcp -v bl2.img /dev/mtd0
$ flashcp -v fip.bin /dev/mtd3

重启,然后测试下uboot:

烧写到设备

还记得上一节我们演示了如何加载FDT文件启动ram系统吧,现在这就派上用场了。

系统打包

这个没啥,就是把文件系统打成一个压缩包。

加载ram启动

启动到这里就可以了。

EMMC分区

其实分一个区就可以了。我之前喜欢用sfdisk分区。但是一个分区没那么个必要,直接fdisk手动分了。当然如果里面有其它分区的话,记得删除掉。

分区

格式化

烧写系统
$ mount /dev/mmcblk0p1 /mnt/
$ cd /mnt
$ wget http://192.168.100.166/arm64_ubuntu20.tar.gz
$ tar zxvf arm64_ubuntu20.tar.gz -C ./ > /dev/null && sync

等待命令执行结束。

启动Ubuntu

启动系统

因为Uboot还没有集成启动Ubuntu的选项,这时候我们手动输入命令启动。首先进入Uboot命令行,然后依此输入以下内容:

> setenv bootargs console=ttyS0,115200n1 loglevel=8 earlycon=uart8250,mmio32,0x11002000 root=/dev/mmcblk0p1 noinitrd rw rootfstype=ext4 rootdelay=5
> ext4load mmc 0:1 46000000 vmlinuz-dtb.img
> bootm 46000000#gr100

然后系统就跑起来了。

测试wifi

因为我有些工具还没有安装,所以wifi驱动没有自动加载。

比如可以装一个pciutils:

手动加载测试一下:

# modprobe conninfra
# modprobe mtk_warp
# modprobe mtk_warp_proxy
# modprobe mt_wifi

然后ip a可以看到ra0已经出现了。

# ip link set ra0 up
# ip link set rax0 up

然后可以看到WIFI起来了。

截止到此。我们在MT7981上成功的运行起来了Ubuntu20。