openwrt/target/linux/realtek/image/rtl838x.mk
Luiz Angelo Daros de Luca 1005dc0a64 realtek: add DGS-1210-28 factory image
DGS-1210 switches support dual image, with each image composed of a
kernel and a rootfs partition. For image1, kernel and rootfs are in
sequence. The current OpenWrt image (written using a serial console),
uses those partitions together as the firmware partition, ignoring the
partition division. The current OEM u-boot fails to validate image1 but
it will only trigger firmware recovery if both image1 and image2 fail,
and it does not switch the boot image in case one of them fails the
check.

The OEM factory image is composed of concatenated blocks of data, each
one prefixed with a 0x40-byte cameo header. A normal OEM firmware will
have two of these blocks (kernel, rootfs). The OEM firmware only checks
the header before writing unconditionally the data (except the header)
to the correspoding partition.

The OpenWrt factory image mimics the OEM image by cutting the
kernel+rootfs firmware at the exact size of the OEM kernel partition
and packing it as "the kernel partition" and the rest of the kernel and
the rootfs as "the rootfs partition". It will only work if written to
image1 because image2 has a sysinfo partition between kernel2 and
rootfs2, cutting the kernel code in the middle.

Steps to install:

1) switch to image2 (containing an OEM image), using web or these CLI
   commands:
   - config firmware image_id 2 boot_up
   - reboot
2) flash the factory_image1.bin to image1. OEM web (v6.30.016)
   is crashing for any upload (ssh keys, firmware), even applying OEM
   firmwares. These CLI commands can upload a new firmware to the other
   image location (not used to boot):
   - download firmware_fromTFTP <tftpserver> factory_image1.bin
   - config firmware image_id 1 boot_up
   - reboot

To debrick the device, you'll need serial access. If you want to
recover to an OpenWrt, you can replay the serial installation
instructions. For returning to the original firmware, press ESC during
the boot to trigger the emergency firmware recovery procedure. After
that, use D-Link Network Assistant v2.0.2.4 to flash a new firmware.

The device documentation does describe that holding RESET for 12s
trigger the firmware recovery. However, the latest shipped U-Boot
"2011.12.(2.1.5.67086)-Candidate1" from "Aug 24 2021 - 17:33:09" cannot
trigger that from a cold boot. In fact, any U-Boot procedure that relies
on the RESET button, like reset settings, will only work if started from
a running original firmware. That, in practice, cancels the benefit of
having two images and a firmware recovery procedure (if you are not
consider dual-booting OpenWrt).

Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
2022-06-28 22:20:09 +02:00

208 lines
4.8 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0-only
define Device/allnet_all-sg8208m
SOC := rtl8382
IMAGE_SIZE := 7168k
DEVICE_VENDOR := ALLNET
DEVICE_MODEL := ALL-SG8208M
UIMAGE_MAGIC := 0x00000006
UIMAGE_NAME := 2.2.2.0
endef
TARGET_DEVICES += allnet_all-sg8208m
define Device/d-link_dgs-1210
SOC := rtl8382
IMAGE_SIZE := 13824k
DEVICE_VENDOR := D-Link
DLINK_KERNEL_PART_SIZE := 1572864
endef
define Device/d-link_dgs-1210-10p
$(Device/d-link_dgs-1210)
DEVICE_MODEL := DGS-1210-10P
DEVICE_PACKAGES += lua-rs232
endef
TARGET_DEVICES += d-link_dgs-1210-10p
define Device/d-link_dgs-1210-16
$(Device/d-link_dgs-1210)
DEVICE_MODEL := DGS-1210-16
endef
TARGET_DEVICES += d-link_dgs-1210-16
define Device/d-link_dgs-1210-20
$(Device/d-link_dgs-1210)
DEVICE_MODEL := DGS-1210-20
endef
TARGET_DEVICES += d-link_dgs-1210-20
define Device/d-link_dgs-1210-28
$(Device/d-link_dgs-1210)
DEVICE_MODEL := DGS-1210-28
CAMEO_KERNEL_PART := 2
CAMEO_ROOTFS_PART := 3
CAMEO_CUSTOMER_SIGNATURE := 2
CAMEO_BOARD_VERSION := 32
IMAGES += factory_image1.bin
IMAGE/factory_image1.bin := append-kernel | pad-to 64k | \
append-rootfs | pad-rootfs | pad-to 16 | check-size | dlink-headers
endef
TARGET_DEVICES += d-link_dgs-1210-28
# The "IMG-" uImage name allows flashing the iniramfs from the vendor Web UI.
# Avoided for sysupgrade, as the vendor FW would do an incomplete flash.
define Device/engenius_ews2910p
SOC := rtl8380
IMAGE_SIZE := 8192k
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := EWP2910P
UIMAGE_MAGIC := 0x03802910
KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | \
uImage gzip -n 'IMG-0.00.00-c0.0.00'
endef
TARGET_DEVICES += engenius_ews2910p
define Device/inaba_aml2-17gp
SOC := rtl8382
IMAGE_SIZE := 13504k
DEVICE_VENDOR := INABA
DEVICE_MODEL := Abaniact AML2-17GP
UIMAGE_MAGIC := 0x83800000
endef
TARGET_DEVICES += inaba_aml2-17gp
define Device/iodata_bsh-g24mb
SOC := rtl8382
IMAGE_SIZE := 13696k
DEVICE_VENDOR := I-O DATA
DEVICE_MODEL := BSH-G24MB
UIMAGE_MAGIC := 0x83800013
endef
TARGET_DEVICES += iodata_bsh-g24mb
define Device/netgear_gs108t-v3
$(Device/netgear_nge)
DEVICE_MODEL := GS108T
DEVICE_VARIANT := v3
endef
TARGET_DEVICES += netgear_gs108t-v3
define Device/netgear_gs110tpp-v1
$(Device/netgear_nge)
DEVICE_MODEL := GS110TPP
DEVICE_VARIANT := v1
endef
TARGET_DEVICES += netgear_gs110tpp-v1
define Device/netgear_gs308t-v1
$(Device/netgear_nge)
DEVICE_MODEL := GS308T
DEVICE_VARIANT := v1
UIMAGE_MAGIC := 0x4e474335
endef
TARGET_DEVICES += netgear_gs308t-v1
define Device/netgear_gs310tp-v1
$(Device/netgear_nge)
DEVICE_MODEL := GS310TP
DEVICE_VARIANT := v1
UIMAGE_MAGIC := 0x4e474335
DEVICE_PACKAGES += lua-rs232
endef
TARGET_DEVICES += netgear_gs310tp-v1
define Device/panasonic_m8eg-pn28080k
SOC := rtl8380
IMAGE_SIZE := 16384k
DEVICE_VENDOR := Panasonic
DEVICE_MODEL := Switch-M8eG
DEVICE_VARIANT := PN28080K
DEVICE_PACKAGES := kmod-i2c-mux-pca954x
endef
TARGET_DEVICES += panasonic_m8eg-pn28080k
define Device/zyxel_gs1900
SOC := rtl8380
IMAGE_SIZE := 6976k
DEVICE_VENDOR := ZyXEL
UIMAGE_MAGIC := 0x83800000
KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | zyxel-vers | \
uImage gzip
endef
define Device/zyxel_gs1900-10hp
$(Device/zyxel_gs1900)
DEVICE_MODEL := GS1900-10HP
ZYXEL_VERS := AAZI
endef
TARGET_DEVICES += zyxel_gs1900-10hp
define Device/zyxel_gs1900-16
$(Device/zyxel_gs1900)
SOC := rtl8382
DEVICE_MODEL := GS1900-16
ZYXEL_VERS := AAHJ
endef
TARGET_DEVICES += zyxel_gs1900-16
define Device/zyxel_gs1900-8
$(Device/zyxel_gs1900)
DEVICE_MODEL := GS1900-8
ZYXEL_VERS := AAHH
endef
TARGET_DEVICES += zyxel_gs1900-8
define Device/zyxel_gs1900-8hp-v1
$(Device/zyxel_gs1900)
DEVICE_MODEL := GS1900-8HP
DEVICE_VARIANT := v1
ZYXEL_VERS := AAHI
DEVICE_PACKAGES += lua-rs232
endef
TARGET_DEVICES += zyxel_gs1900-8hp-v1
define Device/zyxel_gs1900-8hp-v2
$(Device/zyxel_gs1900)
DEVICE_MODEL := GS1900-8HP
DEVICE_VARIANT := v2
ZYXEL_VERS := AAHI
DEVICE_PACKAGES += lua-rs232
endef
TARGET_DEVICES += zyxel_gs1900-8hp-v2
define Device/zyxel_gs1900-24-v1
$(Device/zyxel_gs1900)
SOC := rtl8382
DEVICE_MODEL := GS1900-24
DEVICE_VARIANT := v1
ZYXEL_VERS := AAHL
endef
TARGET_DEVICES += zyxel_gs1900-24-v1
define Device/zyxel_gs1900-24e
$(Device/zyxel_gs1900)
SOC := rtl8382
DEVICE_MODEL := GS1900-24E
ZYXEL_VERS := AAHK
endef
TARGET_DEVICES += zyxel_gs1900-24e
define Device/zyxel_gs1900-24hp-v1
$(Device/zyxel_gs1900)
SOC := rtl8382
DEVICE_MODEL := GS1900-24HP
DEVICE_VARIANT := v1
ZYXEL_VERS := AAHM
endef
TARGET_DEVICES += zyxel_gs1900-24hp-v1
define Device/zyxel_gs1900-24hp-v2
$(Device/zyxel_gs1900)
SOC := rtl8382
DEVICE_MODEL := GS1900-24HP
DEVICE_VARIANT := v2
ZYXEL_VERS := ABTP
endef
TARGET_DEVICES += zyxel_gs1900-24hp-v2