bcm4908: start work on images for devices using U-Boot
authorRafał Miłecki <rafal@milecki.pl>
Wed, 3 Nov 2021 17:12:05 +0000 (18:12 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Mon, 8 Nov 2021 14:57:55 +0000 (15:57 +0100)
New BCM4908 family based routers will use U-Boot bootloader. That will
require using a totally different firmware format. Kernel has to be put
in a FIT image.

OpenWrt has some helpers for generating .its files but they don't fit
BCM4908 requirements and there is no simple way of extending any of
them. The best solution seems to be storing an .its template.

BCM4908 bootfs may:
1. contain extra binaries (other than kernel & DTB)
2. include multiple DTB files
3. store device specific U-Boot configurations with custom properties

Such setups are too complex to generate using shell script. Raw .its
file on the other hand seems quire clean & reasonable.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
target/linux/bcm4908/image/Makefile
target/linux/bcm4908/image/bootfs-generic.its [new file with mode: 0644]

index 426db4c5a67f63393ec659ae5376e6acc1968179..929e626e0eb76558893c8e9fc225994c2a424447 100644 (file)
@@ -6,6 +6,17 @@ include $(INCLUDE_DIR)/image.mk
 DEVICE_VARS += ASUS_PRODUCTID ASUS_BUILD_NO ASUS_FW_REV ASUS_EXT_NO
 DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_REGION
 
+define Image/Prepare
+       cp bootfs-generic.its $(KDIR)/
+endef
+
+define Build/bootfs
+       cat $@ | $(STAGING_DIR_HOST)/bin/lzma e -eos -si -so > $@.tmp
+       mv $@.tmp $@
+       sed -i "s=\$${kernel}=$@=" $(KDIR)/bootfs-generic.its
+       PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/bootfs-generic.its $(KDIR)/bootfs-generic.itb
+endef
+
 define Build/bcm4908asus
        $(STAGING_DIR_HOST)/bin/bcm4908asus create -i $@ \
                -p $(ASUS_PRODUCTID) -b $(ASUS_BUILD_NO) -f $(ASUS_FW_REV) \
diff --git a/target/linux/bcm4908/image/bootfs-generic.its b/target/linux/bcm4908/image/bootfs-generic.its
new file mode 100644 (file)
index 0000000..d2f19ed
--- /dev/null
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/dts-v1/;
+
+/ {
+       description = "OpenWrt bootfs image";
+       #address-cells = <1>;
+
+       images {
+               kernel {
+                       description = "Linux kernel";
+                       data = /incbin/("${kernel}");
+                       type = "kernel";
+                       os = "linux";
+                       arch = "arm64";
+                       compression = "lzma";
+                       load = <0x80000>;
+                       entry = <0x80000>;
+
+                       hash-1 {
+                               algo = "sha256";
+                       };
+               };
+       };
+};