准备工作:
- 要移植驱动 , 必须找到原厂 SDK 的WIFI驱动, 代码虽非开源, 但在论坛里面大多能下载, 搜索mtk-openwrt-sdk-20170518-1443366e.tar 找到并下载, 博主这里就不提供了.
- 解压编译原厂SDK包, 编译MT7621 +MT7615E驱动,因为博主是以K2P 来移植, 添加了一个型号, 添加型号方法参考openwrt WIKI, 这里不过多介绍.
- 获取CC版本源代码git clone https://github.com/openwrt/chaos_calmer ,编译MT7621主芯片(这里选用相同的主要是作对比用,如果其他主芯片可以换).
开始移植
- 将原厂SDK $(TOPDIR)/package/ralink/ 目录拷贝到cc $(TOPDIR)/package/ 目录下,.
- 将原厂SDK $(TOPDIR)/dl/MT7615_LinuxAP_V4.4.1.2_20170514.tar.bz2 文件拷贝到cc $(TOPDIR)/dl/ 目录下
- 将 原厂SDK $(TOPDIR)/include/wifi.mk 文件拷贝到cc $(TOPDIR)/include/ 下, 对比SDK和cc $(TOPDIR)/include/kernel-default.mk文件将包含的wifi.mk 行复制到对应行, 如下, + 号行代表cc $(TOPDIR)/include/kernel-default.mk 文件中需要添加.
-
+include $(INCLUDE_DIR)/wifi.mk
KERNEL_MAKEOPTS := -C $(LINUX_DIR) \
HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \
CROSS_COMPILE="$(KERNEL_CROSS)" \
@@ -32,6 +32,7 @@ export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include
# defined in quilt.mk
Kernel/Patch:=$(Kernel/Patch/Default)
+WiFi/Patch:=$(WiFi/Patch/Default)
KERNEL_GIT_OPTS:=
ifneq ($(strip $(CONFIG_KERNEL_GIT_LOCAL_REPOSITORY)),"")
@@ -47,6 +48,7 @@ ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
define Kernel/Prepare/Default
xzcat $(DL_DIR)/$(LINUX_SOURCE) | $(TAR) -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
$(Kernel/Patch)
+ $(call wifi-prepare)
touch $(LINUX_DIR)/.quilt_used
endef
else
- 上述步骤做完后, 会发现依然没有编译选项去编译MT7615E的WIFI驱动, 对比编译目录linux的内核文件, 没有Kconfig 配置目录,将SDK $(LINUX)/ralink/ 目录 拷贝出来,放在cc 的目录下,这个目录由你自己决定, 因为后面可以选择是补丁的形式放到内核,或者在kernel-default.mk 内核解压后以拷贝的方式放进去, 我这里是选择拷贝,代码写在wifi.mk里面方便管理.
下面的补丁文件以及rt_mmap.h, ralink-flash.c ralink-flash.h(编译时会报找不到头文件里面的内容,所以加入) ,用find 在SDK里面找.
直接用rt_mmap.h这个文件,依然提示会找不到 RALINK_SYSCTL_BASE, 因为在cc中没有定义CONFIG_RALINK_MT7621,所以需要添加,或者改成其他可以的宏定义即可.
也可以下载:
+ cp -f $(TOPDIR)/package/ramips/patch_file/1000-add-ramips-mt7615.patch $(TOPDIR)/target/linux/ramips/patches-3.18/
+ cp -f $(TOPDIR)/package/ramips/patch_file/1604-mt7615-buildin.patch $(TOPDIR)/target/linux/ramips/patches-3.18/
+ cp -rf $(TOPDIR)/package/ramips/ralink $(LINUX_DIR);
+ cp -f $(TOPDIR)/package/ramips/patch_file/ralink-flash* $(LINUX_DIR)/drivers/mtd/maps/
+ mkdir -p $(LINUX_DIR)/arch/mips/include/asm/rt2880
+ mkdir -p $(LINUX_DIR)/user_headers/include/asm/rt2880
+ cp -f $(TOPDIR)/package/ramips/patch_file/rt_mmap.h $(LINUX_DIR)/arch/mips/include/asm/rt2880/
+ cp -f $(TOPDIR)/package/ramips/patch_file/rt_mmap.h $(LINUX_DIR)/user_headers/include/asm/rt2880/
- 一个坑, 无法读取到eeprom 文件里面的mac地址, 还需要修改一个地方, MTK 在读取Factory 分区是写死的Factory,而cc默认这个分区是factory 小写f ,所以要改一下dts 对应或者修改驱动代码如下文件.
写在结尾