分类目录归档:路由器

也玩路由器

TPLink WR941ND V2 openwrt的8m固件2203版源码修改

这个方法适用TPLink WR941ND V1/V2/V3和WR841ND V3路由器,22.03.0版本的openwrt。需要修改以下两个文件

1.target/linux/ath79/dts/ar9132_tplink_tl-wr941-v2.dts

&spi {
	status = "okay";

	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <25000000>;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			uboot: partition@0 {
				label = "u-boot";
				reg = <0x000000 0x20000>;
				read-only;
			};

			partition@20000 {
				compatible = "tplink,firmware";
				label = "firmware";
				reg = <0x020000 0x7d0000>;
			};

			art: partition@7f0000 {
				label = "art";
				reg = <0x7f0000 0x10000>;
				read-only;
			};
		};
	};
};

partition@20000下reg = <0x020000 0x3d0000>;改为reg = <0x020000 0x7d0000>;

art: partition@3f0000改为art: partition@7f0000

art: partition下reg = <0x3f0000 0x10000>;改为reg = <0x7f0000 0x10000>;

2.target/linux/ath79/image/tiny-tp-link.mk

define Device/tplink_tl-wr941-v2
  $(Device/tplink-8m)
  SOC := ar9132
  DEVICE_MODEL := TL-WR941ND
  DEVICE_VARIANT := v2/v3
  DEVICE_ALT0_VENDOR := TP-Link
  DEVICE_ALT0_MODEL := TL-WR941N
  DEVICE_ALT0_VARIANT := v2/v3
  TPLINK_HWID := 0x09410002
  TPLINK_HWREV := 2
  SUPPORTED_DEVICES += tl-wr941nd
endef
TARGET_DEVICES += tplink_tl-wr941-v2

$(Device/tplink-4m)改为$(Device/tplink-8m),注意一点,原本是4m的,不能改成4mlzma或者8mlzma,错误修改后bootloader加载内核时会报错。

然后正常编译就可以了,以前的18.06及以前的版本,如果编译出来的包没有超过3712kb,就可以不改flash定义,系统启动后会自动更新flash大小,2203版本的包编译出来有5m了,如果不改flash定义,启动到一半会失败,所以必须改。

openwrt的8m固件attitude_adjustment和trunck版源码修改

这个方法适用与2012年冬季之后的attitude_adjustment和trunck版的openwrt。

我这里是参考了一下之由在csdn上的一篇文章

==========================================================
trunk/tools/firmware-utils/src/mktplinkfw.c
static struct flash_layout layouts[] = {
{
.id = "4M",
.fw_max_len = 0x3c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x140000,
}, {
.id = "4Mlzma",
.fw_max_len = 0x3c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x100000,
}, {
.id = "8M",
.fw_max_len = 0x7c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x140000,
}, {
.id = "8Mlzma",
.fw_max_len = 0x7c0000,
.kernel_la = 0x80060000,
.kernel_ep = 0x80060000,
.rootfs_ofs = 0x100000,
}, {
/* terminating entry */
}
};

static struct board_info boards[] = {
{
.id = "TL-MR3020v1",
.hw_id = HWID_TL_MR3020_V1,
.hw_rev = 1,
.layout_id = "4Mlzma",
}, {
.id = "TL-MR3220v1",
.hw_id = HWID_TL_MR3220_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-MR3420v1",
.hw_id = HWID_TL_MR3420_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WA701Nv1",
.hw_id = HWID_TL_WA701N_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WA901NDv1",
.hw_id = HWID_TL_WA901ND_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WA901NDv2",
.hw_id = HWID_TL_WA901ND_V2,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR741NDv1",
.hw_id = HWID_TL_WR741ND_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR741NDv4",
.hw_id = HWID_TL_WR741ND_V4,
.hw_rev = 1,
.layout_id = "4Mlzma",
}, {
.id = "TL-WR740Nv1",
.hw_id = HWID_TL_WR740N_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR740Nv3",
.hw_id = HWID_TL_WR740N_V3,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR743NDv1",
.hw_id = HWID_TL_WR743ND_V1,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR841Nv1.5",
.hw_id = HWID_TL_WR841N_V1_5,
.hw_rev = 2,
.layout_id = "4M",
}, {
.id = "TL-WR841NDv3",
.hw_id = HWID_TL_WR841ND_V3,
.hw_rev = 3,
.layout_id = "4M",
}, {
.id = "TL-WR841NDv5",
.hw_id = HWID_TL_WR841ND_V5,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR841NDv7",
.hw_id = HWID_TL_WR841ND_V7,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR941NDv2",
.hw_id = HWID_TL_WR941ND_V2,
.hw_rev = 2,
.layout_id = "4M",
}, {
.id = "TL-WR941NDv4",
.hw_id = HWID_TL_WR941ND_V4,
.hw_rev = 1,
.layout_id = "4M",
}, {
.id = "TL-WR1043NDv1",
.hw_id = HWID_TL_WR1043ND_V1,
.hw_rev = 1,
.layout_id = "8M",
}, {
.id = "TL-WR2543Nv1",
.hw_id = HWID_TL_WR2543N_V1,
.hw_rev = 1,
.layout_id = "8Mlzma",
}, {
.id = "TL-WR703Nv1",
.hw_id = HWID_TL_WR703N_V1,
.hw_rev = 1,
.layout_id = "4Mlzma",//-->8Mlzma
}, {
/* terminating entry */
}
};

新版只用改fw的大小,分区表会自动认,不用像老版自己定义每个分区大小了。

比如8m flash就是把相应的.layout_id改了就可以了。

==========================================================

然后在打开./target/linux/ar71xx/image/Makefile

找到相应设备所在行,把4m改为8m,这里一定要把所有的相应型号设备的所有硬件设备的所在行都改了,比如编译wr941n就要把wr941 v2 v3 v4所在行都改了

 

$(eval $(call SingleProfile,TPLINK,$(fs_64kraw),TLWR941NV2,tl-wr941nd-v2,TL-WR941ND,ttyS0,115200,0x09410002,2,8M))
$(eval $(call SingleProfile,TPLINK,$(fs_64kraw),TLWR941NV3,tl-wr941nd-v3,TL-WR941ND,ttyS0,115200,0x09410002,2,8M))
$(eval $(call SingleProfile,TPLINK,$(fs_64kraw),TLWR941NV4,tl-wr941nd-v4,TL-WR741ND,ttyS0,115200,0x09410004,1,8M))

这样可以避免image too big的问题。