openwrt/target/linux/ath79/image/nand.mk
Edward Chow 50f727b773 ath79: add support for Linksys EA4500 v3
Add support for the Linksys EA4500 v3 wireless router

Hardware
--------
SoC:    Qualcomm Atheros QCA9558
RAM:    128M DDR2 (Winbond W971GG6KB-25)
FLASH:  128M SPI-NAND (Spansion S34ML01G100TFI00)
WLAN:   QCA9558 3T3R 802.11 bgn
        QCA9580 3T3R 802.11 an
ETH:    Qualcomm Atheros QCA8337
UART:   115200 8n1, same as ea4500 v2
USB:	1 single USB 2.0 host port
BUTTON: Reset - WPS
LED:    1x system-LED
        LEDs besides the ethernet ports are controlled
        by the ethernet switch

MAC Address:
 use        address(sample 1)    source
 label      94:10:3e:xx:xx:6f   caldata@cal_macaddr
 lan        94:10:3e:xx:xx:6f   $label
 wan        94:10:3e:xx:xx:6f   $label
 WiFi4_2G   94:10:3e:xx:xx:70   caldata@cal_ath9k_soc
 WiFi4_5G   94:10:3e:xx:xx:71   caldata@cal_ath9k_pci

Installation from Serial Console
------------

1. Connect to the serial console. Power up the device and interrupt
   autoboot when prompted

2. Connect a TFTP server reachable at 192.168.1.0/24
   (e.g. 192.168.1.66) to the ethernet port. Serve the OpenWrt
   initramfs image as "openwrt.bin"

3. To test OpenWrt only, go to step 4 and never execute step 5;
   To install, auto_recovery should be disabled first, and boot_part
   should be set to 1 if its current value is not.

   ath> setenv auto_recovery no
   ath> setenv boot_part 1
   ath> saveenv

4. Boot the initramfs image using U-Boot

   ath> setenv serverip 192.168.1.66
   ath> tftpboot 0x84000000 openwrt.bin
   ath> bootm

5. Copy the OpenWrt sysupgrade image to the device using scp and
   install it like a normal upgrade (with no need to keeping config
   since no config from "previous OpenWRT installation" could be kept
   at all)

   # sysupgrade -n /path/to/openwrt/sysupgrade.bin

Note: Like many other routers produced by Linksys, it has a dual
      firmware flash layout, but because I do not know how to handle
      it, I decide to disable it for more usable space. (That is why
      the "auto_recovery" above should be disabled before installing
      OpenWRT.) If someone is interested in generating factory
      firmware image capable to flash from stock firmware, as well as
      restoring the dual firmware layout, commented-out layout for the
      original secondary partitions left in the device tree may be a
      useful hint.

Installation from Web Interface
------------

1. Login to the router via its web interface (default password: admin)

2. Find the firmware update interface under "Connectivity/Basic"

3. Choose the OpenWrt factory image and click "Start"

4. If the router still boots into the stock firmware, it means that
   the OpenWrt factory image has been installed to the secondary
   partitions and failed to boot (since OpenWrt on EA4500 v3 does not
   support dual boot yet), and the router switched back to the stock
   firmware on the primary partitions. You have to install a stock
   firmware (e.g. 3.1.6.172023, downloadable from
   https://www.linksys.com/support-article?articleNum=148385 ) first
   (to the secondary partitions) , and after that, install OpenWrt
   factory image (to the primary partitions). After successful
   installation of OpenWrt, auto_recovery will be automatically
   disabled and router will only boot from the primary partitions.

Signed-off-by: Edward Chow <equu@openmail.cc>
2022-10-30 23:14:45 +01:00

423 lines
12 KiB
Makefile

define Build/dongwon-header
head -c 4 $@ > $@.tmp
head -c 8 /dev/zero >> $@.tmp
tail -c +9 $@ >> $@.tmp
( \
header_crc="$$(head -c 68 $@.tmp | gzip -c | \
tail -c 8 | od -An -N4 -tx4 --endian little | tr -d ' \n')"; \
printf "$$(echo $$header_crc | sed 's/../\\x&/g')" | \
dd of=$@.tmp bs=4 count=1 seek=1 conv=notrunc \
)
mv $@.tmp $@
endef
# attention: only zlib compression is allowed for the boot fs
define Build/zyxel-buildkerneljffs
mkdir -p $@.tmp/boot
cp $@ $@.tmp/boot/vmlinux.lzma.uImage
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 \
--big-endian --squash-uids -v -e 128KiB -q -f -n -x lzma -x rtime \
-o $@ \
-d $@.tmp
rm -rf $@.tmp
endef
define Build/zyxel-factory
let \
maxsize="$(subst k,* 1024,$(RAS_ROOTFS_SIZE))"; \
let size="$$(stat -c%s $@)"; \
if [ $$size -lt $$maxsize ]; then \
$(STAGING_DIR_HOST)/bin/mkrasimage \
-b $(RAS_BOARD) \
-v $(RAS_VERSION) \
-r $@ \
-s $$maxsize \
-o $@.new \
-l 131072 \
&& mv $@.new $@ ; \
fi
endef
define Device/8dev_rambutan
SOC := qca9557
DEVICE_VENDOR := 8devices
DEVICE_MODEL := Rambutan
DEVICE_PACKAGES := kmod-usb2
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_SIZE := 4096k
KERNEL_IN_UBI := 1
IMAGES := factory.bin sysupgrade.tar
IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
IMAGE/factory.bin := append-ubi
endef
TARGET_DEVICES += 8dev_rambutan
define Device/aerohive_hiveap-121
SOC := ar9344
DEVICE_VENDOR := Aerohive
DEVICE_MODEL := HiveAP 121
DEVICE_PACKAGES := kmod-usb2
BLOCKSIZE := 128k
PAGESIZE := 2048
IMAGE_SIZE := 116m
KERNEL_SIZE := 5120k
UBINIZE_OPTS := -E 5
SUPPORTED_DEVICES += hiveap-121
IMAGES += factory.bin
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
TARGET_DEVICES += aerohive_hiveap-121
define Device/domywifi_dw33d
SOC := qca9558
DEVICE_VENDOR := DomyWifi
DEVICE_MODEL := DW33D
DEVICE_PACKAGES := kmod-usb2 kmod-usb-storage kmod-usb-ledtrig-usbport \
kmod-ath10k-ct ath10k-firmware-qca988x-ct
KERNEL_SIZE := 5120k
IMAGE_SIZE := 98304k
BLOCKSIZE := 128k
PAGESIZE := 2048
UBINIZE_OPTS := -E 5
IMAGES += factory.bin
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
check-size
endef
TARGET_DEVICES += domywifi_dw33d
define Device/dongwon_dw02-412h
SOC := qca9557
DEVICE_VENDOR := Dongwon T&I
DEVICE_MODEL := DW02-412H
DEVICE_ALT0_VENDOR := KT
DEVICE_ALT0_MODEL := GiGA WiFi home
DEVICE_PACKAGES := kmod-usb2 kmod-ath10k-ct ath10k-firmware-qca988x-ct
KERNEL_SIZE := 8192k
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL := $$(KERNEL) | dongwon-header
KERNEL_INITRAMFS := $$(KERNEL)
UBINIZE_OPTS := -E 5
IMAGES += factory.img
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
define Device/dongwon_dw02-412h-64m
$(Device/dongwon_dw02-412h)
DEVICE_VARIANT := (64M)
DEVICE_ALT0_VARIANT := (64M)
IMAGE_SIZE := 49152k
endef
TARGET_DEVICES += dongwon_dw02-412h-64m
define Device/dongwon_dw02-412h-128m
$(Device/dongwon_dw02-412h)
DEVICE_VARIANT := (128M)
DEVICE_ALT0_VARIANT := (128M)
IMAGE_SIZE := 114688k
endef
TARGET_DEVICES += dongwon_dw02-412h-128m
define Device/glinet_gl-ar300m-common-nand
SOC := qca9531
DEVICE_VENDOR := GL.iNet
DEVICE_MODEL := GL-AR300M
DEVICE_PACKAGES := kmod-usb2
KERNEL_SIZE := 4096k
IMAGE_SIZE := 16000k
PAGESIZE := 2048
VID_HDR_OFFSET := 2048
endef
define Device/glinet_gl-ar300m-nand
$(Device/glinet_gl-ar300m-common-nand)
DEVICE_VARIANT := NAND
BLOCKSIZE := 128k
IMAGES += factory.img
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
SUPPORTED_DEVICES += glinet,gl-ar300m-nor
endef
TARGET_DEVICES += glinet_gl-ar300m-nand
define Device/glinet_gl-ar300m-nor
$(Device/glinet_gl-ar300m-common-nand)
DEVICE_VARIANT := NOR
SUPPORTED_DEVICES += glinet,gl-ar300m-nand gl-ar300m
endef
TARGET_DEVICES += glinet_gl-ar300m-nor
define Device/glinet_gl-ar750s-common
SOC := qca9563
DEVICE_VENDOR := GL.iNet
DEVICE_MODEL := GL-AR750S
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9887-ct kmod-usb2 \
kmod-usb-storage block-mount
IMAGE_SIZE := 16000k
endef
define Device/glinet_gl-ar750s-nor-nand
$(Device/glinet_gl-ar750s-common)
DEVICE_VARIANT := NOR/NAND
KERNEL_SIZE := 4096k
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
SUPPORTED_DEVICES += glinet,gl-ar750s-nor
endef
TARGET_DEVICES += glinet_gl-ar750s-nor-nand
define Device/glinet_gl-ar750s-nor
$(Device/glinet_gl-ar750s-common)
DEVICE_VARIANT := NOR
SUPPORTED_DEVICES += gl-ar750s glinet,gl-ar750s glinet,gl-ar750s-nor-nand
endef
TARGET_DEVICES += glinet_gl-ar750s-nor
define Device/glinet_gl-e750
SOC := qca9531
DEVICE_VENDOR := GL.iNet
DEVICE_MODEL := GL-E750
DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9887-ct kmod-usb2
SUPPORTED_DEVICES += gl-e750
KERNEL_SIZE := 4096k
IMAGE_SIZE := 131072k
PAGESIZE := 2048
VID_HDR_OFFSET := 2048
BLOCKSIZE := 128k
IMAGES += factory.img
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
TARGET_DEVICES += glinet_gl-e750
define Device/glinet_gl-xe300
SOC := qca9531
DEVICE_VENDOR := GL.iNet
DEVICE_MODEL := GL-XE300
DEVICE_PACKAGES := kmod-usb2 block-mount kmod-usb-serial-ch341
KERNEL_SIZE := 4096k
IMAGE_SIZE := 131072k
PAGESIZE := 2048
VID_HDR_OFFSET := 2048
BLOCKSIZE := 128k
IMAGES += factory.img
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
TARGET_DEVICES += glinet_gl-xe300
define Device/linksys_ea4500-v3
SOC := qca9558
DEVICE_VENDOR := Linksys
DEVICE_MODEL := EA4500
DEVICE_VARIANT := v3
DEVICE_PACKAGES := kmod-usb2
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_SIZE := 4096k
IMAGE_SIZE := 81920k
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
LINKSYS_HWNAME := EA4500V3
IMAGES += factory.img
IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | \
append-ubi | check-size | linksys-image type=$$$$(LINKSYS_HWNAME)
UBINIZE_OPTS := -E 5
endef
TARGET_DEVICES += linksys_ea4500-v3
# fake rootfs is mandatory, pad-offset 129 equals (2 * uimage_header + 0xff)
define Device/netgear_ath79_nand
DEVICE_VENDOR := NETGEAR
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport
KERNEL_SIZE := 4096k
BLOCKSIZE := 128k
PAGESIZE := 2048
IMAGE_SIZE := 25600k
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 | check-size | append-metadata
UBINIZE_OPTS := -E 5
endef
define Device/netgear_pgzng1
SOC := ar9344
DEVICE_MODEL := PGZNG1
DEVICE_VENDOR := NETGEAR
DEVICE_ALT0_MODEL := Pulse Gateway
DEVICE_ALT0_VENDOR := ADT
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-i2c-gpio \
kmod-leds-pca955x kmod-rtc-isl1208 kmod-spi-dev
KERNEL_SIZE := 5120k
IMAGE_SIZE := 83968k
PAGESIZE := 2048
BLOCKSIZE := 128k
KERNEL := kernel-bin | append-dtb | lzma | uImage lzma
IMAGE/sysupgrade.bin := sysupgrade-tar | check-size | append-metadata
endef
TARGET_DEVICES += netgear_pgzng1
define Device/netgear_r6100
SOC := ar9344
DEVICE_MODEL := R6100
UIMAGE_MAGIC := 0x36303030
NETGEAR_BOARD_ID := R6100
NETGEAR_HW_ID := 29764434+0+128+128+2x2+2x2
$(Device/netgear_ath79_nand)
DEVICE_PACKAGES += kmod-ath10k-ct ath10k-firmware-qca988x-ct
endef
TARGET_DEVICES += netgear_r6100
define Device/netgear_wndr3700-v4
SOC := ar9344
DEVICE_MODEL := WNDR3700
DEVICE_VARIANT := v4
UIMAGE_MAGIC := 0x33373033
NETGEAR_BOARD_ID := WNDR3700v4
NETGEAR_HW_ID := 29763948+128+128
$(Device/netgear_ath79_nand)
endef
TARGET_DEVICES += netgear_wndr3700-v4
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)
endef
TARGET_DEVICES += netgear_wndr4300
define Device/netgear_wndr4300sw
SOC := ar9344
DEVICE_MODEL := WNDR4300SW
UIMAGE_MAGIC := 0x33373033
NETGEAR_BOARD_ID := WNDR4300SW
NETGEAR_HW_ID := 29763948+0+128+128+2x2+3x3
$(Device/netgear_ath79_nand)
endef
TARGET_DEVICES += netgear_wndr4300sw
define Device/netgear_wndr4300tn
SOC := ar9344
DEVICE_MODEL := WNDR4300TN
UIMAGE_MAGIC := 0x33373033
NETGEAR_BOARD_ID := WNDR4300TN
NETGEAR_HW_ID := 29763948+0+128+128+2x2+3x3
$(Device/netgear_ath79_nand)
endef
TARGET_DEVICES += netgear_wndr4300tn
define Device/netgear_wndr4300-v2
SOC := qca9563
DEVICE_MODEL := WNDR4300
DEVICE_VARIANT := v2
UIMAGE_MAGIC := 0x27051956
NETGEAR_BOARD_ID := WNDR4500series
NETGEAR_HW_ID := 29764821+2+128+128+3x3+3x3+5508012175
$(Device/netgear_ath79_nand)
endef
TARGET_DEVICES += netgear_wndr4300-v2
define Device/netgear_wndr4500-v3
SOC := qca9563
DEVICE_MODEL := WNDR4500
DEVICE_VARIANT := v3
UIMAGE_MAGIC := 0x27051956
NETGEAR_BOARD_ID := WNDR4500series
NETGEAR_HW_ID := 29764821+2+128+128+3x3+3x3+5508012173
$(Device/netgear_ath79_nand)
endef
TARGET_DEVICES += netgear_wndr4500-v3
define Device/zte_mf28x_common
SOC := qca9563
DEVICE_VENDOR := ZTE
DEVICE_PACKAGES := kmod-usb2 kmod-ath10k-ct
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_SIZE := 4096k
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
endef
define Device/zte_mf281
$(Device/zte_mf28x_common)
DEVICE_MODEL := MF281
KERNEL_SIZE := 6144k
IMAGE_SIZE := 29696k
IMAGES += factory.bin
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
check-size
DEVICE_PACKAGES += ath10k-firmware-qca9888-ct kmod-usb-net-rndis \
kmod-usb-acm comgt-ncm
endef
TARGET_DEVICES += zte_mf281
define Device/zte_mf286
$(Device/zte_mf28x_common)
DEVICE_MODEL := MF286
DEVICE_PACKAGES += ath10k-firmware-qca988x-ct kmod-usb-net-qmi-wwan \
kmod-usb-serial-option uqmi
endef
TARGET_DEVICES += zte_mf286
define Device/zte_mf286a
$(Device/zte_mf28x_common)
DEVICE_MODEL := MF286A
DEVICE_PACKAGES += ath10k-firmware-qca9888-ct kmod-usb-net-qmi-wwan \
kmod-usb-serial-option uqmi
endef
TARGET_DEVICES += zte_mf286a
define Device/zte_mf286r
$(Device/zte_mf28x_common)
DEVICE_MODEL := MF286R
DEVICE_PACKAGES += ath10k-firmware-qca9888-ct kmod-usb-net-rndis kmod-usb-acm \
comgt-ncm
endef
TARGET_DEVICES += zte_mf286r
define Device/zyxel_nbg6716
SOC := qca9558
DEVICE_VENDOR := ZyXEL
DEVICE_MODEL := NBG6716
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k-ct \
ath10k-firmware-qca988x-ct
RAS_BOARD := NBG6716
RAS_ROOTFS_SIZE := 29696k
RAS_VERSION := "OpenWrt Linux-$(LINUX_VERSION)"
KERNEL_SIZE := 4096k
BLOCKSIZE := 128k
PAGESIZE := 2048
LOADER_TYPE := bin
KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | uImage none | \
zyxel-buildkerneljffs | check-size 4096k
IMAGES := sysupgrade.tar sysupgrade-4M-Kernel.bin factory.bin
IMAGE/sysupgrade.tar/squashfs := append-rootfs | pad-to $$$$(BLOCKSIZE) | \
sysupgrade-tar rootfs=$$$$@ | append-metadata
IMAGE/sysupgrade-4M-Kernel.bin/squashfs := append-kernel | \
pad-to $$$$(KERNEL_SIZE) | append-ubi | pad-to 263192576 | gzip
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | \
zyxel-factory
UBINIZE_OPTS := -E 5
endef
TARGET_DEVICES += zyxel_nbg6716
define Device/zyxel_emg2926_q10a
$(Device/zyxel_nbg6716)
DEVICE_MODEL := EMG2926-Q10A
RAS_BOARD := AAVK-EMG2926Q10A
endef
TARGET_DEVICES += zyxel_emg2926_q10a