aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorÁlvaro Fernández Rojas <noltari@gmail.com>2020-06-02 09:12:05 +0200
committerÁlvaro Fernández Rojas <noltari@gmail.com>2020-06-02 09:12:05 +0200
commitf263a0f9ff5c050312f676b6684396ea118a8884 (patch)
tree3334f4c49b25aee7ace266fcb8fc7f251f50681c
parent4b2fe12953e173df90a36326ae92486331594f4c (diff)
downloadupstream-f263a0f9ff5c050312f676b6684396ea118a8884.tar.gz
upstream-f263a0f9ff5c050312f676b6684396ea118a8884.tar.bz2
upstream-f263a0f9ff5c050312f676b6684396ea118a8884.zip
bcm63xx: nand: support Sercomm firmwares
Add support for Sercomm factory firmwares (AES 256 CBC encrypted). Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
-rw-r--r--target/linux/bcm63xx/image/Makefile58
-rw-r--r--target/linux/bcm63xx/image/bcm63xx_nand.mk9
2 files changed, 67 insertions, 0 deletions
diff --git a/target/linux/bcm63xx/image/Makefile b/target/linux/bcm63xx/image/Makefile
index 5fbe8ea470..fdeb100dd9 100644
--- a/target/linux/bcm63xx/image/Makefile
+++ b/target/linux/bcm63xx/image/Makefile
@@ -223,6 +223,64 @@ define Build/cfe-part-tag
dd if=$@.part >> $@
endef
+define Build/cfe-sercomm-part
+ $(TOPDIR)/scripts/sercomm-partition-tag.py \
+ --input-file $@ \
+ --output-file $@.kernel_rootfs \
+ --part-name kernel_rootfs \
+ --part-version OpenWrt \
+ --rootfs-version $(SERCOMM_VERSION)
+
+ rm -rf $@-rootfs_lib
+ mkdir -p $@-rootfs_lib
+ echo $(SERCOMM_VERSION) > $@-rootfs_lib/lib_ver
+ $(call Build/cfe-jffs2,$@-rootfs_lib)
+ $(call Build/pad-to,$(BLOCKSIZE))
+ $(TOPDIR)/scripts/sercomm-partition-tag.py \
+ --input-file $@ \
+ --output-file $@.rootfs_lib \
+ --part-name rootfs_lib \
+ --part-version $(SERCOMM_VERSION)
+
+ rm -rf $@-bootloader
+ mkdir -p $@-bootloader
+ cp $(KDIR)/bcm63xx-cfe/$(CFE_RAM_FILE) $@-bootloader/$(CFE_RAM_JFFS2_NAME)
+ $(call Build/cfe-jffs2,$@-bootloader)
+ $(call Build/pad-to,$(BLOCKSIZE))
+ $(TOPDIR)/scripts/sercomm-partition-tag.py \
+ --input-file $@ \
+ --output-file $@.bootloader \
+ --part-name bootloader \
+ --part-version $(SERCOMM_VERSION)
+
+ mv $@.kernel_rootfs $@
+ dd if=$@.rootfs_lib >> $@
+ dd if=$@.bootloader >> $@
+endef
+
+define Build/cfe-sercomm-load
+ mv $@ $@.ser
+ echo $(SERCOMM_PID) | xxd -p -r > $@
+ sha256sum $@.ser | awk '{ print $1 }' | xxd -p -r >> $@
+ dd if=$@.ser >> $@
+ rm -f $@.ser
+endef
+
+define Build/cfe-sercomm-crypto
+ $(TOPDIR)/scripts/sercomm-crypto.py \
+ --input-file $@ \
+ --key-file $@.key \
+ --output-file $@.ser \
+ --version OpenWrt
+ $(STAGING_DIR_HOST)/bin/openssl enc -md md5 -aes-256-cbc \
+ -in $@ -out $@.enc \
+ -K `cat $@.key` \
+ -iv 00000000000000000000000000000000
+ dd if=$@.enc >> $@.ser
+ mv $@.ser $@
+ rm -f $@.enc $@.key
+endef
+
define Build/cfe-old-bin
$(TOPDIR)/scripts/brcmImage.pl -t -p \
-o $@ -b $(CFE_BOARD_ID) -c $(CHIP_ID) \
diff --git a/target/linux/bcm63xx/image/bcm63xx_nand.mk b/target/linux/bcm63xx/image/bcm63xx_nand.mk
index 5483c73077..57a895f9db 100644
--- a/target/linux/bcm63xx/image/bcm63xx_nand.mk
+++ b/target/linux/bcm63xx/image/bcm63xx_nand.mk
@@ -7,6 +7,7 @@ DEVICE_VARS += CFE_RAM_FILE
DEVICE_VARS += CFE_RAM_JFFS2_NAME CFE_RAM_JFFS2_PAD
DEVICE_VARS += CFE_WFI_CHIP_ID CFE_WFI_FLASH_TYPE
DEVICE_VARS += CFE_WFI_FLAGS CFE_WFI_VERSION
+DEVICE_VARS += SERCOMM_PID SERCOMM_VERSION
# CFE expects a single JFFS2 partition with cferam and kernel. However,
# it's possible to fool CFE into properly loading both cferam and kernel
@@ -36,6 +37,14 @@ define Device/bcm63xx-nand
SUPPORTED_DEVICES := $(subst _,$(comma),$(1))
endef
+define Device/sercomm-nand
+ $(Device/bcm63xx-nand)
+ IMAGES += factory.img
+ IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | cfe-sercomm-part | gzip | cfe-sercomm-load | cfe-sercomm-crypto
+ SERCOM_PID :=
+ SERCOMM_VERSION :=
+endef
+
### Comtrend ###
define Device/comtrend_vr-3032u
$(Device/bcm63xx-nand)