brcm63xx: add Livebox 1 firmware image generation
authorJonas Gorski <jogo@openwrt.org>
Wed, 25 Mar 2015 15:34:40 +0000 (15:34 +0000)
committerJonas Gorski <jogo@openwrt.org>
Wed, 25 Mar 2015 15:34:40 +0000 (15:34 +0000)
Currently there isn't images ready for flashing liveboxes boards. This
patch adds a script and the code to call it in the  bcm63xx images
builder makefile to generate the livebox 1 firmware.

I removed some lines to avoid generating unneded files in the bin/ dir
for this board. And added code to generate a squashed rootfs aligned to
64 kB since the current one in the /bin dir is 128 kB aligned and
doesn't work. Still no sysupgrade support for this board. Upgrading from
within openwrt can be done writing with mtd the kernel, and then the 64k
aligned rootfs.

Regards

Signed-off-by: Daniel Gonzalez <dgcbueu@gmail.com>
[jogo: use sed instead of a separate shell script for the boot script, make it
 respect the load address]
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 44982

target/linux/brcm63xx/image/Makefile
target/linux/brcm63xx/image/redbootscript.template [new file with mode: 0644]

index a2130f3bd2e8aa15601f8d9b790a914dae4a18b8..1913feb6469635a642ff831494f80bd5c2a79463 100755 (executable)
@@ -86,11 +86,33 @@ define Image/Build/ZYXCFEDTB
 endef
 
 define Image/Build/RedBootDTB
-       # Generate the image
+       # Prepare kernel and rootfs
        gzip -9 -c $(KDIR)/vmlinux-$(3) > $(KDIR)/vmlinux-$(3).bin.gz
-       $(STAGING_DIR_HOST)/bin/lzma e $(KDIR)/vmlinux-$(3) $(KDIR)/vmlinux-$(3).bin.l7
-       dd if=$(KDIR)/vmlinux-$(3).bin.l7 of=$(BIN_DIR)/openwrt-$(2)-vmlinux.lzma bs=65536 conv=sync
        dd if=$(KDIR)/vmlinux-$(3).bin.gz of=$(BIN_DIR)/openwrt-$(2)-vmlinux.gz bs=65536 conv=sync
+       dd if=$(KDIR)/root.squashfs of="$(BIN_DIR)/openwrt-$(2)-root.squashfs" bs=64k conv=sync
+       echo -ne \\xDE\\xAD\\xC0\\xDE >> "$(BIN_DIR)/openwrt-$(2)-root.squashfs"
+       # Generate the scripted image
+       $(CP) ./redbootscript.template $(BIN_DIR)/redbootscript
+       let \
+               kernellen="$$$$(stat -c%s $(BIN_DIR)/openwrt-$(2)-vmlinux.gz)" \
+               rootfsdatalen="$$$$(stat -c %s $(BIN_DIR)/openwrt-$(2)-root.squashfs)" \
+               rootfsaddr="0xBE430000 + kernellen" \
+               rootfslen="0xBEBF0000 - rootfsaddr" \
+               offset2="0x1000 + kernellen"; \
+               $(SED)  "s,%loadaddr,$(strip $(LOADADDR)),g" \
+                       -e "s,%kernellen,$$$$(printf '%#x' $$$$kernellen),g" \
+                       -e "s,%offset2,$$$$(printf '%#x' $$$$offset2),g" \
+                       -e "s,%rootfsdatalen,$$$$(printf '%#x' $$$$rootfsdatalen),g" \
+                       -e "s,%rootfsaddr,$$$$(printf '%#x' $$$$rootfsaddr),g" \
+                       -e "s,%rootfslen,$$$$(printf '%#x' $$$$rootfslen),g" \
+               "$(BIN_DIR)/redbootscript"
+
+       dd if="$(BIN_DIR)/redbootscript" of="$(BIN_DIR)/redbootscript.padded" bs=4096 conv=sync
+       cat \
+               "$(BIN_DIR)/redbootscript.padded" \
+               "$(BIN_DIR)/openwrt-$(2)-vmlinux.gz" \
+               "$(BIN_DIR)/openwrt-$(2)-root.squashfs" \
+               > "$(BIN_DIR)/openwrt-$(2)-redboot.bin"
 endef
 
 define Image/Build/HCSDTB
diff --git a/target/linux/brcm63xx/image/redbootscript.template b/target/linux/brcm63xx/image/redbootscript.template
new file mode 100644 (file)
index 0000000..a007c84
--- /dev/null
@@ -0,0 +1,15 @@
+fis init -f
+
+fconfig boot_script true
+fconfig boot_script_data
+fis load -b %loadaddr -d kernel
+exec -c "noinitrd" %loadaddr
+
+
+fconfig boot_script_timeout 20
+
+fis create -o 0x1000 -f 0xBE430000 -l %kernellen kernel
+
+fis create -o %offset2 -s %rootfsdatalen -f %rootfsaddr -l %rootfslen rootfs
+
+reset