Port MTK SDK to OpenWrt

举报
aiot_bigbear 发表于 2022/09/25 05:15:36 2022/09/25
【摘要】 Overview Tarball MediaTek_ApSoC_SDK_4300_20140916.tar.bz2, assuming this obsoletes MTK_Ralink_ApSoC_SDK_4210_20140326.tar.bz2, yes? Issues Do we reall...

Overview

Tarball MediaTek_ApSoC_SDK_4300_20140916.tar.bz2, assuming this obsoletes MTK_Ralink_ApSoC_SDK_4210_20140326.tar.bz2, yes?

Issues

  • Do we really not need to run make dep?

Installing toolchains

Unload MTK SDK tarball, install relevant toolchains under /opt:

  • buildroot-gcc342
  • buildroot-gcc463

Activate 3.10.14 kernel for MT7620

In config/mkconfig (line 107), change:

echo "elif [ \$CONFIG_DEFAULTS_RALINK_MT7620 = \"y\" ]; then"
echo " define_bool CONFIG_DEFAULTS_KERNEL_2_6_36 y"
echo " define_bool CONFIG_DEFAULTS_KERNEL_3_10_14 n"

to:

echo "elif [ \$CONFIG_DEFAULTS_RALINK_MT7620 = \"y\" ]; then"
echo " define_bool CONFIG_DEFAULTS_KERNEL_2_6_36 n"
echo " define_bool CONFIG_DEFAULTS_KERNEL_3_10_14 y"

Fix various Makefiles

Build errors of the form:

Makefile:376: *** mixed implicit and normal rules.  Stop.

are explained here, so you have to adjust a number of Makefiles to work with the newest version of make. Just fix the errors as you run across them.

Non-wifi build

Start with trying to build a basic image with no WiFi support yet (and no OpenWrt support), make dep generates diagnostics:

ralink/Kconfig:206:warning: 'RT_FIRST_CARD': number is invalid
ralink/Kconfig:207:warning: 'RT_FIRST_CARD': number is invalid
ralink/Kconfig:208:warning: 'RT_FIRST_CARD': number is invalid
ralink/Kconfig:221:warning: 'RT_SECOND_CARD': number is invalid
ralink/Kconfig:222:warning: 'RT_SECOND_CARD': number is invalid
ralink/Kconfig:223:warning: 'RT_SECOND_CARD': number is invalid
ralink/Kconfig:224:warning: 'RT_SECOND_CARD': number is invalid

because of config entries that are defined as "int" but have some non-int values:

config  RT_FIRST_CARD
        int
        depends on ! FIRST_IF_NONE
        default 2860 if FIRST_IF_RT2860
        default 7620 if FIRST_IF_MT7620
        default 7628 if FIRST_IF_MT7628
        default 3090 if FIRST_IF_RT3092
        default 5392 if FIRST_IF_RT5392
        default 5592 if FIRST_IF_RT5592
        default 3593 if FIRST_IF_RT3593
        default 7610 if FIRST_IF_MT7610E
        default 7612e if FIRST_IF_MT7612E
        default 7602e if FIRST_IF_MT7602E
        default 7603e if FIRST_IF_MT7603E

config  RT_SECOND_CARD
        int
        depends on ! SECOND_IF_NONE
        default 3090 if SECOND_IF_RT3092
        default 5392 if SECOND_IF_RT5392
        default 5592 if SECOND_IF_RT5592
        default 3593 if SECOND_IF_RT3593
        default 7610 if SECOND_IF_MT7610E
        default 8592 if SECOND_IF_RT8592
        default 3572 if SECOND_IF_RT3572
        default 5572 if SECOND_IF_RT5572
        default 7612e if SECOND_IF_MT7612E
        default 7612u if SECOND_IF_MT7612U
        default 7602e if SECOND_IF_MT7602E
        default 7603e if SECOND_IF_MT7603E

 

Obviously, those config selections shouldn't be defined as "int"; MediaTek should fix that, but it doesn't affect us -- this produces a successful build.

Adding OpenWrt Support

If you now try to add "OpenWrt Support", you get the build error:

... snip ...
make -C  libnvram
make[2]: Entering directory '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/lib/libnvram'
make[2]: *** No rule to make target '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/kernel_headers/include/linux/autoconf.h', needed by 'crc32.o'.  Stop.
make[2]: Leaving directory '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/lib/libnvram'
Makefile:369: recipe for target '_dir_libnvram' failed
make[1]: *** [_dir_libnvram] Error 2
make[1]: Leaving directory '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/lib'
Makefile:493: recipe for target 'lib_only' failed
make: *** [lib_only] Error 2

This seems odd since if you *don't* select "Support OpenWrt", that library appears to build just fine, so there's something in the selection of OpenWrt support that clearly changes the build environment.

Here's a snippet of the Makefile from that directory:

ifneq ($(KERNEL_HEADERS),)
LINUXDIR = $(KERNEL_HEADERS)
endif

... snip ...

OBJS    := crc32.o nvram_env.o flash_api.o
HEADERS := nvram_env.h nvram.h flash_api.h $(ROOTDIR)/$(LINUXDIR)/include/linux/autoconf.h

so an early setting of KERNEL_HEADERS can certainly screw things up.

From a completely fresh checkout of the SDK, we have this:

$ find . -name autoconf.h
./linux-3.10.14.x/include/generated/autoconf.h   <--- ????
./lib/libgdbm-1.8.3/autoconf.h
./lib/vstr-1.0.15/include/autoconf.h
$

Do a non-OpenWrt configure and build for MT7620A, and it all works (libnvram directory is compiled), and:

$ find . -name autoconf.h
./linux-3.10.14.x/include/linux/autoconf.h
./linux-3.10.14.x/include/uapi/linux/autoconf.h
./linux-3.10.14.x/include/generated/autoconf.h
./config/autoconf.h
./lib/libgdbm-1.8.3/autoconf.h
./lib/vstr-1.0.15/include/autoconf.h
./kernel_headers/include/linux/autoconf.h
./autoconf.h
./user/busybox/include/autoconf.h
$

After make clean:

$ find . -name autoconf.h
./linux-3.10.14.x/include/linux/autoconf.h
./linux-3.10.14.x/include/uapi/linux/autoconf.h
./linux-3.10.14.x/include/generated/autoconf.h
./config/autoconf.h
./lib/libgdbm-1.8.3/autoconf.h
./lib/vstr-1.0.15/include/autoconf.h
./autoconf.h
./user/busybox/include/autoconf.h
$

After doing another make (which should change nothing):

$ find . -name autoconf.h
./linux-3.10.14.x/include/linux/autoconf.h
./linux-3.10.14.x/include/uapi/linux/autoconf.h
./linux-3.10.14.x/include/generated/autoconf.h
./config/autoconf.h
./lib/libgdbm-1.8.3/autoconf.h
./lib/vstr-1.0.15/include/autoconf.h
./kernel_headers/include/linux/autoconf.h
./autoconf.h
./user/busybox/include/autoconf.h
$

One last time, make clean, add OpenWrt Support, save, and here's the kernel config file difference:

$ diff .config.old .config
5c5
< # CONFIG_SUPPORT_OPENWRT is not set
---
> CONFIG_SUPPORT_OPENWRT=y
31a32
> # CONFIG_RT2880_ROOTFS_IN_FLASH is not set
42c43
< # CONFIG_BOOT_RAW is not set
---
> CONFIG_BOOT_RAW=y
55d55
< CONFIG_BOOT_ELF32=y
604a605
> # CONFIG_MTD_SPLIT is not set
$

Nothing jumps out at me, so try to build and get earlier error:

make -C  libnvram
make[2]: Entering directory '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/lib/libnvram'
make[2]: *** No rule to make target '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/kernel_headers/include/linux/autoconf.h', needed by 'crc32.o'.  Stop.
make[2]: Leaving directory '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/lib/libnvram'
Makefile:369: recipe for target '_dir_libnvram' failed
make[1]: *** [_dir_libnvram] Error 2
make[1]: Leaving directory '/home/rpjday/flex/MTK_SDK/SDK/RT288x_SDK/source/lib'
Makefile:493: recipe for target 'lib_only' failed
make: *** [lib_only] Error 2

because this:

$ find . -name autoconf.h
./linux-3.10.14.x/include/linux/autoconf.h
./linux-3.10.14.x/include/uapi/linux/autoconf.h
./linux-3.10.14.x/include/generated/autoconf.h
./config/autoconf.h
./lib/libgdbm-1.8.3/autoconf.h
./lib/vstr-1.0.15/include/autoconf.h
./autoconf.h
./user/busybox/include/autoconf.h
$

In short, asking for OpenWrt support prevents autoconf.h from being placed in the kernel_headers directory. Oh, wait, here it is in the kernel source file include/uapi/linux/Kbuild:

ifndef CONFIG_SUPPORT_OPENWRT
header-y += autoconf.h
endif

What's the reason for that?

KERNEL_HEADERS

Under vendors/Ralink/MT7620/config/:

$ grep KERNEL_HEADERS *
2M_16M_config.uclibc0933-3.10.14.x:KERNEL_HEADERS="$(ROOTDIR)/kernel_headers/include"
2M_16M_config.uclibc-3.10.14.x:KERNEL_SOURCE="$(ROOTDIR)/$(KERNEL_HEADERS)"
4M_32M_config.uclibc0933-2.6.36.x:KERNEL_HEADERS="$(ROOTDIR)/$(LINUXDIR)/include"
4M_32M_config.uclibc0933-3.10.14.x:KERNEL_HEADERS="$(ROOTDIR)/kernel_headers/include"
4M_32M_config.uclibc-3.10.14.x:KERNEL_SOURCE="$(ROOTDIR)/$(KERNEL_HEADERS)"
8M_32M_voip_config.uclibc0933-2.6.36.x:KERNEL_HEADERS="$(ROOTDIR)/$(LINUXDIR)/include"
8M_32M_voip_config.uclibc0933-3.10.14.x:KERNEL_HEADERS="$(ROOTDIR)/kernel_headers/include"
8M_32M_voip_config.uclibc-3.10.14.x:KERNEL_SOURCE="$(ROOTDIR)/$(KERNEL_HEADERS)"
8M_64M_config.uclibc0933-3.10.14.x:KERNEL_HEADERS="$(ROOTDIR)/kernel_headers/include"
8M_64M_config.uclibc-3.10.14.x:KERNEL_SOURCE="$(ROOTDIR)/$(KERNEL_HEADERS)"
$

But under a 3.10 kernel, an external kernel headers seems unnecessary since all exported headers will be under include/uapi/ and various other uapi/ directories.

For now, cheap fix for include/uapi/linux/Kbuild:

# ifndef CONFIG_SUPPORT_OPENWRT
header-y += autoconf.h
# endif

but why was this done in the first place? (Need to clean and rebuild to take effect.)

ralink/Kconfig

Wireless selection

In MTK SDK, extra line at end of arch/mips/Kconfig:

source "ralink/Kconfig"

As for ralink/Kconfig (the only file in the top-level ralink directory), here are the source directives:

source "drivers/net/rt_rdm/Kconfig"
source "drivers/net/raeth/Kconfig"
#source "drivers/net/wireless/rt2860v2_ap/Kconfig"
#source "drivers/net/wireless/rt2860v2_sta/Kconfig"
#source "drivers/net/wireless/RTPCI_ap/Kconfig"
#source "drivers/net/wireless/RT3090_ap/Kconfig"
#source "drivers/net/wireless/RT5392_ap/Kconfig"
#source "drivers/net/wireless/RT5592_ap/Kconfig"
#source "drivers/net/wireless/RT3593_ap/Kconfig"
#source "drivers/net/wireless/RT3572_ap/Kconfig"
#source "drivers/net/wireless/RT5572_ap/Kconfig"
#source "drivers/net/wireless/iNIC/Kconfig"
#source "drivers/net/wireless/iNIC_RT305x/Kconfig"
#source "drivers/net/wireless/RT3680_ap/Kconfig"
#source "drivers/net/wireless/MT7610_ap/Kconfig"
#source "drivers/net/wireless/rlt_wifi/Kconfig"
source "drivers/usb/dwc_otg/Kconfig"
source "net/nat/hw_nat/Kconfig"

Here's the first mystery -- which selection for onboard 2.4G?

#############
# Wireless
#############
menuconfig WIFI_DRIVER
        bool "WiFi Driver Support"

if WIFI_DRIVER

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

        config FIRST_IF_RT2860
        bool "RT2860 for rt2860v2 wifi driver"
        select RTMP_MAC
        select RALINK_RT2860

        config FIRST_IF_MT7620
        bool "MT7620 for rlt_wifi wifi driver"  <--- typo, "rtl_wifi", no?
        select RTMP_MAC
        select RALINK_RT6352

 

It looks like we want the second one -- "RT6352" is apparently the CPU type. But that config symbol doesn't appear to be tested anywhere in the newer kernels:

grep -r RT6352 *
linux-2.6.21.x/include/asm-mips/rt2880/eureka_ep430.h:#elif defined(CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6352)
linux-2.6.21.x/include/asm-mips/rt2880/surfboardint.h:#elif defined (CONFIG_RALINK_RT3052) || defined (CONFIG_RALINK_RT3352) || defined (CONFIG_RALINK_RT2883) || defined (CONFIG_RALINK_RT5350) || defined (CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6352)
linux-2.6.21.x/include/asm-mips/rt2880/rt_mmap.h:#elif defined (CONFIG_RALINK_RT6855) || defined (CONFIG_RALINK_RT6352)
linux-2.6.36.x/ralink/Kconfig:	select RALINK_RT6352
linux-2.6.36.x/ralink/Kconfig:	select RALINK_RT6352
linux-3.10.14.x/ralink/Kconfig:	select RALINK_RT6352
linux-3.10.14.x/ralink/Kconfig:	select RALINK_RT6352
vendors/Ralink/MT7621/config/8M_16M_config.linux-2.6.36.x.MT7612-efuse-txbf:# CONFIG_RALINK_RT6352 is not set
vendors/Ralink/MT7621/config/8M_64M_config.linux-2.6.36.x:# CONFIG_RALINK_RT6352 is not set
vendors/Ralink/MT7621/config/128M_128M_config.linux-2.6.36.x:# CONFIG_RALINK_RT6352 is not set
vendors/Ralink/MT7621/config/8M_16M_config.linux-2.6.36.x.MT7612-efuse:# CONFIG_RALINK_RT6352 is not set
vendors/Ralink/MT7621/config/8M_16M_config.linux-2.6.36.x.txbf:# CONFIG_RALINK_RT6352 is not set
vendors/Ralink/MT7620/config/2M_16M_config.linux-2.6.36.x:CONFIG_RALINK_RT6352=y
vendors/Ralink/MT7620/config/8M_64M_config.linux-2.6.36.x:CONFIG_RALINK_RT6352=y
vendors/Ralink/MT7620/config/4M_32M_config.linux-2.6.36.x:CONFIG_RALINK_RT6352=y
vendors/Ralink/MT7620/config/8M_64M_config.linux-2.6.36.x.MT7530:CONFIG_RALINK_RT6352=y
$

 

Looking for RALINK_RT2860 is even worse:

$ grep -r RALINK_RT2860 *
linux-2.6.36.x/ralink/Kconfig:	select RALINK_RT2860
linux-3.10.14.x/ralink/Kconfig:	select RALINK_RT2860
$

And this, too:

linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
linux-3.10.14.x/ralink/Kconfig:	select RTMP_MAC
vendors/Ralink/MT7621/config/8M_16M_config.linux-2.6.36.x.MT7612-efuse-txbf:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7621/config/8M_64M_config.linux-2.6.36.x:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7621/config/128M_128M_config.linux-2.6.36.x:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7621/config/8M_16M_config.linux-2.6.36.x.MT7612-efuse:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7621/config/8M_16M_config.linux-2.6.36.x.txbf:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7628/config/8M_64M_config.linux-2.6.36.x:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7628/config/4M_32M_config.linux-2.6.36.x:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7628/config/2M_8M_config.linux-2.6.36.x:# CONFIG_RTMP_MAC is not set
vendors/Ralink/MT7620/config/2M_16M_config.linux-2.6.36.x:CONFIG_RTMP_MAC=y
vendors/Ralink/MT7620/config/8M_64M_config.linux-2.6.36.x:CONFIG_RTMP_MAC=y
vendors/Ralink/MT7620/config/4M_32M_config.linux-2.6.36.x:CONFIG_RTMP_MAC=y
vendors/Ralink/MT7620/config/8M_64M_config.linux-2.6.36.x.MT7530:CONFIG_RTMP_MAC=y

 

but lots of checking under 2.6.36 kernel under drivers/staging/rt2860.



from http://www.crashcourse.ca/wiki/index.php/OpenWrt_MTK_SDK

文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xushx_bigbear/article/details/47149243

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。