mirror of
https://github.com/openwrt/openwrt.git
synced 2025-02-20 01:16:23 +00:00
bmips: Build U-Boot into the XG6846 target
It appears that the CFE boot loader found in the XG6846 cannot load kernels over a certain size, and the old relocate hack is not working. What to do? We can build a small U-Boot into the image, make CFE boot that, place the kernel immediately after U-Boot, and use U-Boot to boot the system instead. The compiled u-boot.bin becomes around ~300KB and with LZMA compression it will swiftly fit into 128KB, so we use two 64KB erase blocks right after the CFE to store an imagetag:ed U-Boot. Reviewed-by: Paul Donald <newtwen+github@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
f789454df1
commit
219018185e
@ -117,9 +117,10 @@
|
||||
};
|
||||
|
||||
partition@10000 {
|
||||
compatible = "brcm,bcm963xx-imagetag";
|
||||
compatible = "openwrt,uimage", "denx,uimage";
|
||||
reg = <0x010000 0xfe0000>;
|
||||
label = "firmware";
|
||||
openwrt,offset = <0x30000>;
|
||||
};
|
||||
|
||||
partition@ff0000 {
|
||||
|
@ -4,6 +4,7 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/image.mk
|
||||
|
||||
KERNEL_LOADADDR := 0x80010000 # RAM start + 64K
|
||||
UBOOT_ENTRY := 0x81c00000
|
||||
LOADER_ENTRY := 0x81000000 # RAM start + 16M, for relocate
|
||||
LZMA_TEXT_START := 0x82000000 # RAM start + 32M
|
||||
|
||||
@ -94,6 +95,21 @@ define Build/cfe-bin
|
||||
$(CFE_EXTRAS) $(1)
|
||||
endef
|
||||
|
||||
# Build a CFE image with just U-Boot
|
||||
define Build/cfe-bin-uboot
|
||||
cp $(STAGING_DIR_IMAGE)/$(DEVICE_NAME)-u-boot.bin $@
|
||||
$(call Build/lzma)
|
||||
mv $@ $@.uboot.lzma
|
||||
echo "dummy" > $@.dummyfs
|
||||
$(STAGING_DIR_HOST)/bin/imagetag -i $@.uboot.lzma -f $@.dummyfs \
|
||||
--output $@ --boardid $(CFE_BOARD_ID) --chipid $(CHIP_ID) \
|
||||
--entry $(UBOOT_ENTRY) --load-addr $(UBOOT_ENTRY) \
|
||||
--info1 "$(call ModelNameLimit16,$(DEVICE_NAME))" \
|
||||
$(CFE_EXTRAS) $(1)
|
||||
rm $@.uboot.lzma
|
||||
rm $@.dummyfs
|
||||
endef
|
||||
|
||||
define Build/cfe-jffs2
|
||||
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 \
|
||||
--big-endian \
|
||||
@ -284,6 +300,21 @@ define Device/bcm63xx-cfe-legacy
|
||||
KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma-cfe
|
||||
endef
|
||||
|
||||
# CFE images with U-Boot in front of the kernel, these will execute
|
||||
# U-Boot instead of the kernel and U-Boot will then proceed to load
|
||||
# the kernel. The reason to do this is that CFE is sometimes unable to
|
||||
# load big kernels even with the lzma loader tricks.
|
||||
define Device/bcm63xx-cfe-uboot
|
||||
$(Device/bcm63xx-cfe)
|
||||
KERNEL := kernel-bin | append-dtb | lzma | uImage lzma
|
||||
IMAGE/cfe.bin := cfe-bin-uboot | pad-to $$$$$$$$(($$(BLOCKSIZE))) | \
|
||||
append-kernel | pad-to $$$$$$$$(($$(BLOCKSIZE))) | \
|
||||
append-rootfs $$$$(if $$$$(FLASH_MB),--pad $$$$(shell expr $$$$(FLASH_MB) / 2))
|
||||
IMAGE/sysupgrade.bin := cfe-bin-uboot | pad-to $$$$$$$$(($$(BLOCKSIZE))) | \
|
||||
append-kernel | pad-to $$$$$$$$(($$(BLOCKSIZE))) | \
|
||||
append-rootfs | append-metadata
|
||||
endef
|
||||
|
||||
# CFE expects a single JFFS2 partition with cferam and kernel. However,
|
||||
# it's possible to fool CFE into properly loading both cferam and kernel
|
||||
# from two different JFFS2 partitions by adding dummy files (see
|
||||
|
@ -52,7 +52,7 @@ endef
|
||||
TARGET_DEVICES += innacomm_w3400v6
|
||||
|
||||
define Device/inteno_xg6846
|
||||
$(Device/bcm63xx-cfe-legacy)
|
||||
$(Device/bcm63xx-cfe-uboot)
|
||||
DEVICE_VENDOR := Inteno
|
||||
DEVICE_MODEL := XG6846
|
||||
CHIP_ID := 6328
|
||||
|
Loading…
x
Reference in New Issue
Block a user