aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips/image
diff options
context:
space:
mode:
authorMikhail Zhilkin <csharper2005@gmail.com>2023-11-12 07:58:26 +0000
committerHauke Mehrtens <hauke@hauke-m.de>2023-11-25 01:11:18 +0100
commit1b091311aafc59db576a51b3d2b5febaac45d522 (patch)
treeb3f970e636c68f368bdb699d8183cee1e437513c /target/linux/ramips/image
parent25bab2b8bc1aff2b7e877865c5def74aa63daefe (diff)
downloadupstream-1b091311aafc59db576a51b3d2b5febaac45d522.tar.gz
upstream-1b091311aafc59db576a51b3d2b5febaac45d522.tar.bz2
upstream-1b091311aafc59db576a51b3d2b5febaac45d522.zip
ramips: add support for Sercomm CPJ routers
This commit adds support for following wireless routers: - Rostelecom RT-FL-1 (Serсomm RT-FL-1) - Rostelecom S1010 (Serсomm S1010.RT) The devices are almost identical and the only difference is one bit in the factory image PID (thanks to Maximilian Weinmann <x1@disroot.org> (@MaxS0niX) for the info and idea to make one PR for two devices at once). Devices specification --------------------- SoC: MediaTek MT7620A, MIPS RAM: 64 MB Flash: 16 MB SPI NOR Wireless 2.4: MT7620 (b/g/n, 2x2) Wireless 5: MT7612EN (a/n/ac, 2x2) Ethernet: 5xFE (WAN, LAN1-4) BootLoader: U-Boot Buttons: 2 (wps, reset) LEDs: 1 amber and 1 green status GPIO leds 5 green ethernet GPIO leds 1 green GPIO 2.4 GHz WLAN led 1 green PHY 5 GHz WLAN led 1 green unmanaged power led USB ports: No Power: 12 VDC, 1 A Connector: Barrel OEM easy installation --------------------- 1. Remove all dots from the factory image filename (except the dot before file extension) 2. Upload and update the firmware via the original web interface 3. Wait until green status led stops blinking (can take several minutes) 4. Login to OpenWrt initramsfs. It's recommended to make a backup of the mtd partitions at this point. 4. Perform sysupgrade using the following command (or use Luci): sysupgrade -n sysupgrade.bin 5. Wait until green status les stops blinking (can take several minutes) 6. Mission acomplished Return to Stock --------------- Option 1. Restore firmware Slot1 from a backup (firmware2.bin): cd /tmp mtd -e Firmware2 write firmware2.bin Firmware2 printf 1 | dd bs=1 seek=$((0x18007)) count=1 of=/dev/mtdblock2 reboot Option 2. Decrypt, ungzip and split stock firmware image into the parts, take Slot1 parts (kernel2.bin, rootfs2.bin) and write them: cd /tmp mtd -e Kernel2 write kernel2.bin Kernel2 mtd -e RootFS2 write rootfs2.bin RootFS2 printf 1 | dd bs=1 seek=$((0x18007)) count=1 of=/dev/mtdblock2 reboot More about stock firmware decryption: Link: https://github.com/Psychotropos/sercomm_fwutils/ Debricking ---------- Use sercomm-recovery tool. You can use "ALL" mtd partition backup as a recovery image. Link: https://github.com/danitool/sercomm-recovery MAC addresses ------------- +---------+-------------------+-----------+ | | MAC | Algorithm | +---------+-------------------+-----------+ | label | 48:3e:xx:xx:xx:1e | label | | LAN | 48:3e:xx:xx:xx:1e | label | | WAN | 48:3e:xx:xx:xx:28 | label+10 | | WLAN 2g | 48:3e:xx:xx:xx:20 | label+2 | | WLAN 5g | 48:3e:xx:xx:xx:24 | label+6 | +---------+-------------------+-----------+ Co-authored-by: Vadzim Vabishchevich <bestmc2009@gmail.com> Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Diffstat (limited to 'target/linux/ramips/image')
-rw-r--r--target/linux/ramips/image/common-sercomm.mk63
-rw-r--r--target/linux/ramips/image/mt7620.mk22
2 files changed, 85 insertions, 0 deletions
diff --git a/target/linux/ramips/image/common-sercomm.mk b/target/linux/ramips/image/common-sercomm.mk
index 182f2251ba7..09870109112 100644
--- a/target/linux/ramips/image/common-sercomm.mk
+++ b/target/linux/ramips/image/common-sercomm.mk
@@ -23,6 +23,35 @@ define Build/sercomm-crypto
rm -f $@.enc $@.key
endef
+define Build/sercomm-factory-cpj
+ dd bs=$$((0x1fff00)) count=1 if=$@ of=$@.kernel conv=notrunc \
+ 2>/dev/null
+ dd bs=$$((0x1fff00)) skip=1 if=$@ of=$@.rootfs1 conv=notrunc \
+ 2>/dev/null
+ cp $@.rootfs1 $@.rootfs2
+ $(TOPDIR)/scripts/sercomm-kernel-header.py \
+ --kernel-image $@.kernel \
+ --kernel-offset $(SERCOMM_KERNEL_OFFSET) \
+ --rootfs-image $@.rootfs1 \
+ --rootfs-offset $(SERCOMM_ROOTFS_OFFSET) \
+ --output-header $@.header1
+ $(TOPDIR)/scripts/sercomm-kernel-header.py \
+ --kernel-image $@.kernel \
+ --kernel-offset $(SERCOMM_KERNEL2_OFFSET) \
+ --rootfs-image $@.rootfs2 \
+ --rootfs-offset $(SERCOMM_ROOTFS2_OFFSET) \
+ --output-header $@.header2
+ cat $@.header1 $@.kernel > $@.kernel1
+ cat $@.header2 $@.kernel > $@.kernel2
+ rm $@.header1 $@.header2 $@.kernel
+ $(call Build/sercomm-part-tag-common,kernel $@.kernel1)
+ $(call Build/sercomm-part-tag-common,kernel2 $@.kernel2)
+ $(call Build/sercomm-part-tag-common,rootfs $@.rootfs1)
+ $(call Build/sercomm-part-tag-common,rootfs2 $@.rootfs2)
+ cat $@.kernel2 $@.rootfs2 $@.kernel1 $@.rootfs1 > $@
+ rm $@.kernel1 $@.rootfs1 $@.kernel2 $@.rootfs2
+endef
+
define Build/sercomm-factory-cqr
$(TOPDIR)/scripts/sercomm-pid.py \
--hw-version $(SERCOMM_HWVER) \
@@ -117,12 +146,46 @@ define Build/sercomm-reset-slot1-chksum
dd of=$@ seek=$$((0x118)) bs=1 conv=notrunc 2>/dev/null
endef
+define Build/sercomm-sysupgrade-cpj
+ dd bs=$$((0x1fff00)) count=1 if=$@ of=$@.kernel conv=notrunc \
+ 2>/dev/null
+ dd bs=$$((0x1fff00)) skip=1 if=$@ of=$@.rootfs conv=notrunc \
+ 2>/dev/null
+ $(TOPDIR)/scripts/sercomm-kernel-header.py \
+ --kernel-image $@.kernel \
+ --kernel-offset $(SERCOMM_KERNEL_OFFSET) \
+ --rootfs-image $@.rootfs \
+ --rootfs-offset $(SERCOMM_ROOTFS_OFFSET) \
+ --output-header $@.header
+ cat $@.header $@.kernel $@.rootfs > $@
+ rm $@.header $@.kernel $@.rootfs
+endef
+
define Device/sercomm
$(Device/nand)
LOADER_TYPE := bin
IMAGES += factory.img
endef
+define Device/sercomm_cpj
+ SOC := mt7620a
+ DEVICE_VENDOR := Rostelecom
+ DEVICE_ALT0_VENDOR := Sercomm
+ IMAGE_SIZE := 7743k
+ SERCOMM_HWID := CPJ
+ SERCOMM_HWVER := 10000
+ SERCOMM_SWVER := 1001
+ SERCOMM_KERNEL_OFFSET := 0x70100
+ SERCOMM_ROOTFS_OFFSET := 0x270000
+ SERCOMM_KERNEL2_OFFSET := 0x800100
+ SERCOMM_ROOTFS2_OFFSET := 0xa00000
+ IMAGE/sysupgrade.bin := append-kernel | append-rootfs | \
+ sercomm-sysupgrade-cpj | pad-rootfs | check-size | \
+ append-metadata
+ ARTIFACTS := initramfs-factory.img
+ DEVICE_PACKAGES := kmod-mt76x2
+endef
+
define Device/sercomm_cxx_dxx
$(Device/sercomm)
KERNEL_SIZE := 6144k
diff --git a/target/linux/ramips/image/mt7620.mk b/target/linux/ramips/image/mt7620.mk
index f85f3c8521e..883aacabe06 100644
--- a/target/linux/ramips/image/mt7620.mk
+++ b/target/linux/ramips/image/mt7620.mk
@@ -2,6 +2,7 @@
# MT7620A Profiles
#
+include ./common-sercomm.mk
include ./common-tp-link.mk
DEVICE_VARS += DLINK_ROM_ID DLINK_FAMILY_MEMBER DLINK_FIRMWARE_SIZE DLINK_IMAGE_OFFSET
@@ -1102,6 +1103,27 @@ define Device/ravpower_rp-wd03
endef
TARGET_DEVICES += ravpower_rp-wd03
+define Device/rostelecom_rt-fl-1
+ $(Device/sercomm_cpj)
+ DEVICE_MODEL := RT-FL-1
+ DEVICE_ALT0_MODEL := RT-FL-1
+ ARTIFACT/initramfs-factory.img := \
+ append-image-stage initramfs-kernel.bin | check-size | \
+ sercomm-factory-cpj | gzip | sercomm-payload | \
+ sercomm-pid-setbit 0x11 | sercomm-crypto
+endef
+TARGET_DEVICES += rostelecom_rt-fl-1
+
+define Device/rostelecom_s1010
+ $(Device/sercomm_cpj)
+ DEVICE_MODEL := S1010
+ DEVICE_ALT0_MODEL := S1010.RT
+ ARTIFACT/initramfs-factory.img := \
+ append-image-stage initramfs-kernel.bin | check-size | \
+ sercomm-factory-cpj | gzip | sercomm-payload | sercomm-crypto
+endef
+TARGET_DEVICES += rostelecom_s1010
+
define Device/sanlinking_d240
SOC := mt7620a
IMAGE_SIZE := 16064k