由于新版源码删除了之前用于定义固件分区结构的
legacy.mk
,因此只能转而修改dts
等文件,从而达到修改固件大小的目的。
- 修改
./openwrt/target/linux/ath79/dts/ar9344_netgear_wndr4300.dts
为如下内容
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "ar9344_netgear_wndr_128m.dtsi"
#include "ar9344_netgear_wndr_wan.dtsi"
#include "ar9344_netgear_wndr_usb.dtsi"
/ {
compatible = "netgear,wndr4300", "qca,ar9344";
model = "Netgear WNDR4300";
};
- 将
./openwrt/target/linux/ath79/dts/ar9344_netgear_wndr.dtsi
文件拷贝一份,命名为ar9344_netgear_wndr_128m.dtsi
,修改其中的
ubiconcat0: partition@ac0000 {
label = "ubiconcat0";
reg = <0xac0000 0x1500000>;
};
partition@6c0000 {
label = "firmware";
reg = <0x6c0000 0x1900000>;
compatible = "netgear,uimage";
};
partition@1fc0000 {
label = "caldata_backup";
reg = <0x1fc0000 0x40000>;
read-only;
};
ubiconcat1: partition@2000000 {
label = "ubiconcat1";
reg = <0x2000000 0x6000000>;
};
为
partition@ac0000 {
label = "ubi";
reg = <0xac0000 0x7500000>;
};
partition@6c0000 {
label = "firmware";
reg = <0x6c0000 0x7900000>;
compatible = "netgear,uimage";
};
partition@7fc0000 {
label = "caldata_backup";
reg = <0x7fc0000 0x40000>;
read-only;
};
并删除
ubi-concat {
compatible = "mtd-concat";
devices = <&ubiconcat0 &ubiconcat1>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
ubi@ac0000 {
label = "ubi";
reg = <0x0 0x7500000>;
};
};
};
详细的改动分析如下图。
分区结构如下图。
- 修改
./openwrt/target/linux/ath79/image/nand.mk
文件,将原有配置改为128m
- 添加的配置
define Device/netgear_ath79_nand_128m
DEVICE_VENDOR := NETGEAR
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport
KERNEL_SIZE := 4096k
BLOCKSIZE := 128k
PAGESIZE := 2048
IMAGE_SIZE := 121m #修改处
KERNEL := kernel-bin | append-dtb | lzma -d20 | \
pad-offset $$(KERNEL_SIZE) 129 | uImage lzma | \
append-string -e '\xff' | \
append-uImage-fakehdr filesystem $$(UIMAGE_MAGIC)
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma -d20 | uImage lzma
IMAGES := sysupgrade.bin factory.img
IMAGE/factory.img := append-kernel | append-ubi | netgear-dni | \
check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata | \
check-size
UBINIZE_OPTS := -E 5
endef
- 修改的配置
define Device/netgear_wndr4300
SOC := ar9344
DEVICE_MODEL := WNDR4300
UIMAGE_MAGIC := 0x33373033
NETGEAR_BOARD_ID := WNDR4300
NETGEAR_HW_ID := 29763948+0+128+128+2x2+3x3
$(Device/netgear_ath79_nand_128m) #修改处
endef
TARGET_DEVICES += netgear_wndr4300
修改效果图