当前位置: 代码迷 >> 综合 >> 关于mtk-openwrt-sdk-20160324-8f8e4f1e dts的调试过程
  详细解决方案

关于mtk-openwrt-sdk-20160324-8f8e4f1e dts的调试过程

热度:64   发布时间:2023-12-12 12:52:29.0

先说结论

MTK SDK 不使用 OpenWRT 官方的 dts 定义 ROM 布局,网卡布局。
正式宣告这套源码不支持dts模式
如果要折腾相关驱动,直接改内核文件,把关联的宏打开,menuconfig打不开,手动打开
它,这套源码很多地方耦合性差,所以需要细心一点把牵连的宏都开了。
最后因为是openwrt编译框架,所以改动的地方需要学习补丁制作的方法,把修改之处做成补丁。
补丁的制作方式 检索 “ quilt 工具”

调试过程

第一次开发openwrt,
从供应商拿到这个版本的sdk准备开发openwrt,
在折腾外部时钟的发现mtk一些坑
直接拿最新的openwrt源码什么编译问题都没有,
就是测试出来的wifi不稳定
于是不断的研究mtk这套源码,为啥wifi这么稳定,怎么移植到新的源码上。

下面是mtk-sdk的wifi效果

在这里插入图片描述

开源openwrt21的wifi效果

在这里插入图片描述

1.DTS功能

编译后发现dts文件怎么样都是不加载的,所以即便怎么修改都是没意义的.

1.1发现dts文件加载不了

经过删除和修改文件的方式,发现固件的结果和dts不关连。

1.2一个board加载dts文件的理论位置

在这里插入图片描述

1.3DTS加载的相关宏设置

后面发现DTS功能应该是 DTB DTC DEVICETREE DTS OF 。。。 等这几个宏没打开
在make menuconfig里面尝试打开dtb
发现找不到user_devicetree 这类的宏在什么地方打开
在这里插入图片描述

1.4config的配置文件的用途

经过仔细对比,大概率是在板子定义的 config3.10里面,它会在下载源码后,把这块配置加载到内核配置里面
但每次编译器会把最新config更新到这个文件里,所以如果要加载你想要的config配置,需要在编译器先把源码清掉。不然会被源码的配置反写到这里。
在这里插入图片描述

尝试将别的config3.10带有启动的这个宏配置文件进行加载,还是不生效

1.5通过编译日志发现dts文件加载被默认屏蔽掉

在这里插入图片描述

后面找到 被手动屏蔽掉的地方
在这里插入图片描述

打开还是不行

1.6dtc工具没有被编译

因为相关的宏没法打开,导致dtc工具没有被makefile 加载编译
直接找到dtc的mk文件强制打开它
在这里插入图片描述
在这里插入图片描述

1.7 DTB marker not found! DTB的标签没找到

在这里插入图片描述

这玩意来自于
在这里插入图片描述

1.8 关于OWRTDT补丁

网上找到一个补丁0103-MIPS-OWRTDT.patch
里面有描述这个dtb标志位怎么添加,可是这个补丁打不上,原因是内核版本不一致。
0103-MIPS-OWRTDT.patch

From c174d2250e402399ad7dbdd57d51883d8804bba0 Mon Sep 17 00:00:00 2001
From: John Crispin <blogic@openwrt.org>
Date: Mon, 15 Jul 2013 00:40:37 +0200
Subject: [PATCH 31/33] owrt: MIPS: add OWRTDTB secionSigned-off-by: John Crispin <blogic@openwrt.org>
---arch/mips/kernel/head.S   |    3 +++arch/mips/ralink/Makefile |    2 +-arch/mips/ralink/of.c     |    4 +++-3 files changed, 7 insertions(+), 2 deletions(-)--- a/arch/mips/kernel/head.S
+++ b/arch/mips/kernel/head.S
@@ -86,6 +86,9 @@ EXPORT(__image_cmdline).fill	0x400#endif /* CONFIG_IMAGE_CMDLINE_HACK */+	.ascii  "OWRTDTB:"
+	EXPORT(__image_dtb)
+	.fill   0x4000__REFNESTED(kernel_entry, 16, sp)			# kernel entry point
--- a/arch/mips/ralink/of.c
+++ b/arch/mips/ralink/of.c
@@ -66,6 +66,8 @@ static int __init early_init_dt_find_memreturn 0;}+extern struct boot_param_header __image_dtb;
+void __init plat_mem_setup(void){
    set_io_port_base(KSEG1);
@@ -74,7 +76,7 @@ void __init plat_mem_setup(void)* Load the builtin devicetree. This causes the chosen node to be* parsed resulting in our memory appearing*/
-	__dt_setup_arch(__dtb_start);
+	__dt_setup_arch(&__image_dtb);strlcpy(arcs_cmdline, boot_command_line, COMMAND_LINE_SIZE);

于是尝试对他进行手动修改

编译通过了,很开心,但内核没起来,但至少DTS文件是加载进去了

在这里插入图片描述

尝试把剩下的补丁也手动进去测试一下,
发现不行,后面的补丁都没打,因为从源码是上就没这个文件,所以可以认定这套源码本身不支持dts,
而且不是官方把一套支持dts 的源码改成他们的结构,而是这芯片的ralink源码本身就不支持这种操作。

在这里插入图片描述

1.9结论

参考https://www.cnblogs.com/JesseFang/p/6961970.html
参考https://blog.csdn.net/kinbo88/article/details/80089809

MTK SDK 不使用 OpenWRT 官方的 dts 定义 ROM 布局,网卡布局。
正式宣告这套源码不支持dts模式
吐了 妈的

现在还剩下:
1.找mtk更新支持dts的额源码
2.给这套源码换内核版本,找一个差不多的但是支持dts的
3.将wifi驱动移植到最新的代码