diff --git a/target/linux/brcm63xx/image/Makefile b/target/linux/brcm63xx/image/Makefile index a2130f3bd2..1913feb646 100755 --- a/target/linux/brcm63xx/image/Makefile +++ b/target/linux/brcm63xx/image/Makefile @@ -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 index 0000000000..a007c849cf --- /dev/null +++ b/target/linux/brcm63xx/image/redbootscript.template @@ -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