Browse Source

bcm63xx: nand: support Sercomm firmwares

Add support for Sercomm factory firmwares (AES 256 CBC encrypted).

Signed-off-by: Álvaro Fernández Rojas <[email protected]>
Álvaro Fernández Rojas 5 years ago
parent
commit
f263a0f9ff
2 changed files with 67 additions and 0 deletions
  1. 58 0
      target/linux/bcm63xx/image/Makefile
  2. 9 0
      target/linux/bcm63xx/image/bcm63xx_nand.mk

+ 58 - 0
target/linux/bcm63xx/image/Makefile

@@ -223,6 +223,64 @@ define Build/cfe-part-tag
 	dd [email protected] >> $@
 endef
 
+define Build/cfe-sercomm-part
+	$(TOPDIR)/scripts/sercomm-partition-tag.py \
+		--input-file $@ \
+		--output-file [email protected]_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 [email protected]_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 [email protected] \
+		--part-name bootloader \
+		--part-version $(SERCOMM_VERSION)
+
+	mv [email protected]_rootfs $@
+	dd [email protected]_lib >> $@
+	dd [email protected] >> $@
+endef
+
+define Build/cfe-sercomm-load
+	mv $@ [email protected]
+	echo $(SERCOMM_PID) | xxd -p -r > $@
+	sha256sum [email protected] | awk '{ print $1 }' | xxd -p -r >> $@
+	dd [email protected] >> $@
+	rm -f [email protected]
+endef
+
+define Build/cfe-sercomm-crypto
+	$(TOPDIR)/scripts/sercomm-crypto.py \
+		--input-file $@ \
+		--key-file [email protected] \
+		--output-file [email protected] \
+		--version OpenWrt
+	$(STAGING_DIR_HOST)/bin/openssl enc -md md5 -aes-256-cbc \
+		-in $@ -out [email protected] \
+		-K `cat [email protected]` \
+		-iv 00000000000000000000000000000000
+	dd [email protected] >> [email protected]
+	mv [email protected] $@
+	rm -f [email protected] [email protected]
+endef
+
 define Build/cfe-old-bin
 	$(TOPDIR)/scripts/brcmImage.pl -t -p \
 		-o $@ -b $(CFE_BOARD_ID) -c $(CHIP_ID) \

+ 9 - 0
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)