From 8f80e98934c5bb973caad880bd17fddf709046a3 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 2 Apr 2005 12:12:58 +0000 Subject: [PATCH] lzma loader patch from oleg, great thanks good work, saves another 300 kb flashmemory SVN-Revision: 513 --- openwrt/README | 6 +- openwrt/package/Config.in | 1 + openwrt/package/Makefile | 1 + .../brcm-boards/bcm947xx/compressed/Makefile | 71 +------------------ .../arch/mips/brcm-boards/bcm947xx/setup.c | 3 +- openwrt/package/linux/linux.mk | 2 +- openwrt/package/openwrt/jffs2root.c | 11 ++- openwrt/target/Makefile | 16 ++++- openwrt/target/jffs2/Makefile | 8 +-- openwrt/target/squashfs-lzma/Makefile | 4 +- .../target/squashfs-lzma/squashfslzmaroot.mk | 10 +-- 11 files changed, 45 insertions(+), 88 deletions(-) diff --git a/openwrt/README b/openwrt/README index 7db8637a2f..ee704de653 100644 --- a/openwrt/README +++ b/openwrt/README @@ -11,8 +11,10 @@ the kernel and all choosen applications. You can use scripts/flash.sh for remotely updating your embedded system via tftp. -Be happy.. +The buildroot system is documented in docs/buildroot-documentation.html. + +Sunshine! Your OpenWrt Project - http://www.openwrt.org + http://openwrt.org diff --git a/openwrt/package/Config.in b/openwrt/package/Config.in index 3f5afce1b7..8b46c15f1d 100644 --- a/openwrt/package/Config.in +++ b/openwrt/package/Config.in @@ -3,6 +3,7 @@ menu "OpenWrt Package Selection" comment "The default set" +source "package/loader/Config.in" source "package/busybox/Config.in" source "package/dnsmasq/Config.in" source "package/iptables/Config.in" diff --git a/openwrt/package/Makefile b/openwrt/package/Makefile index 66080a84e6..429741d39d 100644 --- a/openwrt/package/Makefile +++ b/openwrt/package/Makefile @@ -19,6 +19,7 @@ package-$(BR2_PACKAGE_IPTABLES) += iptables package-$(BR2_PACKAGE_IPROUTE2) += iproute2 package-$(BR2_PACKAGE_LCD4LINUX) += lcd4linux package-$(BR2_PACKAGE_LIBELF) += libelf +package-$(BR2_PACKAGE_LOADER) += loader package-$(BR2_PACKAGE_LZO) += lzo package-$(BR2_PACKAGE_MATRIXSSL) += matrixssl package-$(BR2_PACKAGE_MICROPERL) += microperl diff --git a/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/compressed/Makefile b/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/compressed/Makefile index 4004653268..ead9d07439 100644 --- a/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/compressed/Makefile +++ b/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/compressed/Makefile @@ -11,40 +11,11 @@ # # $Id$ # -# Copyright 2004 Manuel Novoa III -# Modified to support bzip'd kernels. -# Of course, it would be better to integrate bunzip capability into CFE. -# - -# Link at 3 MB offset in RAM -#TEXT_START ?= 0x80300000 -TEXT_START ?= 0x80001000 -BZ_MEM_TOP := 0x81000000 -BZ_TEXT_START := BZ_MEM_TOP-0x4000 -BZ_STACK_TOP := BZ_TEXT_START-4 OBJCOPY := $(CROSS_COMPILE)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S - -SRCBASE := $(TOPDIR)/../.. -VPATH := $(SRCBASE)/shared -ASFLAGS += -D__ASSEMBLY__ -I$(SRCBASE)/include -DLOADADDR=$(LOADADDR) -ASFLAGS += -DBZ_MEM_TOP=$(BZ_MEM_TOP) -ASFLAGS += -DBZ_TEXT_START=$(BZ_TEXT_START) -ASFLAGS += -DBZ_STACK_TOP=$(BZ_STACK_TOP) -CFLAGS += -I$(SRCBASE)/include -DLOADADDR=$(LOADADDR) -CFLAGS += -DBZ_MEM_TOP=$(BZ_MEM_TOP) -CFLAGS += -DBZ_TEXT_START=$(BZ_TEXT_START) -CFLAGS += -DBZ_STACK_TOP=$(BZ_STACK_TOP) -ifdef CONFIG_MCOUNT -CFLAGS := $(subst -pg,,$(CFLAGS)) -endif -CFLAGS += -ffunction-sections $(call check_gcc, -fvtable-gc, ) -SEDFLAGS := s/BZ_TEXT_START/$(BZ_TEXT_START)/;s/BZ_MEM_TOP/$(BZ_MEM_TOP)/;s/TEXT_START/$(TEXT_START)/ - SYSTEM ?= $(TOPDIR)/vmlinux -OBJECTS := head.o data.o -all: bzImage vmlinuz +all: vmlinuz # Don't build dependencies, this may die if $(CC) isn't gcc dep: @@ -53,48 +24,10 @@ dep: vmlinuz: piggy gzip -c9 $< > $@ -# Our bzImage is a gzip'd binary that decompresses and runs -# the appended bzip'd kernel. -bzImage: bzLoaderImage.gz piggz - cat bzLoaderImage.gz piggz > $@ - -bzLoaderImage.gz: bzLoaderImage - gzip -nc9 $< > $@ - -bzLoaderImage: bzLoader - $(OBJCOPY) $< $@ - -bzLoader: vmlinux.lds $(OBJECTS) - $(LD) -static --gc-sections -no-warn-mismatch -T vmlinux.lds -o $@ $(OBJECTS) - -vmlinux.lds: vmlinux.lds.in Makefile - @sed "$(SEDFLAGS)" < $< > $@ - -piggz: piggy - bzip2 -c9 $< > $@ - piggy: $(SYSTEM) $(OBJCOPY) $< $@ -data.o: data.lds data.image - $(LD) -no-warn-mismatch -T data.lds -r -o $@ -b binary data.image -b elf32-tradlittlemips - -data.lds: - @echo "SECTIONS { .data : { code_start = .; *(.data) code_stop = .; }}" > $@ - -data.image: decompress_bunzip2.image - $(OBJCOPY) $< $@ - -decompress_bunzip2.image: decompress_bunzip2.lds decompress_bunzip2.o - $(LD) -static --gc-sections -no-warn-mismatch -T decompress_bunzip2.lds -o $@ decompress_bunzip2.o - -decompress_bunzip2.lds: decompress_bunzip2.lds.in Makefile - @sed "$(SEDFLAGS)" < $< > $@ - mrproper: clean clean: - rm -f vmlinux vmlinuz piggz piggy *.lds *.o \ - bzLoader bzLoaderImage bzLoaderImage.gz bzImage \ - data.lds data.image \ - decompress_bunzip2.lds decompress_bunzip2.image + rm -f vmlinuz piggy diff --git a/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/setup.c b/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/setup.c index e1b0050a45..2132c00837 100644 --- a/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/setup.c +++ b/openwrt/package/linux/kernel-source/arch/mips/brcm-boards/bcm947xx/setup.c @@ -195,7 +195,8 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) /* found a TRX header */ if (le32_to_cpu(trx->magic) == TRX_MAGIC) { - part->offset = le32_to_cpu(trx->offsets[1]); + part->offset = le32_to_cpu(trx->offsets[2]) ? : + le32_to_cpu(trx->offsets[1]); part->size = le32_to_cpu(trx->len); part->size -= part->offset; diff --git a/openwrt/package/linux/linux.mk b/openwrt/package/linux/linux.mk index 02cc3bb8ae..4284c38f00 100644 --- a/openwrt/package/linux/linux.mk +++ b/openwrt/package/linux/linux.mk @@ -25,7 +25,7 @@ LINUX_SOURCE=linux-$(LINUX_VERSION).tar.bz2 LINUX_KCONFIG=./linux.config LINUX_PATCHES=./kernel-patches LINUX_KERNEL_SOURCE=./kernel-source -LINUX_BINLOC=arch/$(LINUX_KARCH)/brcm-boards/bcm947xx/compressed/vmlinuz +LINUX_BINLOC=arch/$(LINUX_KARCH)/brcm-boards/bcm947xx/compressed/piggy # Used by pcmcia-cs and others LINUX_SOURCE_DIR=$(LINUX_DIR)-$(LINUX_VERSION) diff --git a/openwrt/package/openwrt/jffs2root.c b/openwrt/package/openwrt/jffs2root.c index e0cbfb94e0..d79532ea64 100644 --- a/openwrt/package/openwrt/jffs2root.c +++ b/openwrt/package/openwrt/jffs2root.c @@ -73,6 +73,8 @@ int main(int argc, char **argv) int fd; unsigned long len; struct trx_header *ptr; + unsigned offset; + if (((fd = open(FILENAME, O_RDWR)) < 0) || ((len = lseek(fd, 0, SEEK_END)) < 0) || ((ptr = (struct trx_header *) mmap(0, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1)) @@ -81,17 +83,20 @@ int main(int argc, char **argv) exit(-1); } + /* treat last partition as rootfs offset */ + offset = ptr->offsets[2] ? : ptr->offsets[1]; + if (argc > 1 && !strcmp(argv[1],"--move")) { - if (ptr->offsets[1] >= ptr->len) { + if (offset >= ptr->len) { printf("Partition already moved outside trx\n"); #if 0 - } else if (ptr->offsets[1] & 0x0001ffff) { + } else if (offset & 0x0001ffff) { printf("Partition does not start on a block boundary\n"); #endif } else { init_crc32(); //bzero((void *)((int)ptr + ptr->len), (size_t)(len - ptr->len)); - ptr->len = ptr->offsets[1]; + ptr->len = offset; ptr->crc32 = crc32buf((void *) &(ptr->flag_version), ptr->len - offsetof(struct trx_header, flag_version)); msync(ptr,len,MS_SYNC|MS_INVALIDATE); printf("Partition moved; please reboot\n"); diff --git a/openwrt/target/Makefile b/openwrt/target/Makefile index a17a80ffc1..c8baab5f7a 100644 --- a/openwrt/target/Makefile +++ b/openwrt/target/Makefile @@ -29,6 +29,20 @@ IMAGE_TARGETS += $(BIN_DIR)/openwrt-motorola-$(1).bin endif endef +# Enable loader and prepare kernel +ifeq ($(strip $(BR2_PACKAGE_LOADER)),y) +export LINUX_LOADER=$(BUILD_DIR)/lzmaldr +export LINUX_IMAGE=$(BUILD_DIR)/piggy.lzma +else +export LINUX_IMAGE=$(BUILD_DIR)/piggy.gz +endif + +$(BUILD_DIR)/piggy.lzma: $(LINUX_KERNEL) + cat $^ | $(BUILD_DIR)/lzma/lzma e -si -so -eos > $@ || (rm -f $@ && false) + +$(BUILD_DIR)/piggy.gz: $(LINUX_KERNEL) + cat $^ | gzip -c9 $^ > $@ || (rm -f $@ && false) + TARGET_DIRS:= TARGET_FS:= IMAGE_TARGETS:= @@ -70,7 +84,7 @@ $(BIN_DIR): mkdir -p $(BIN_DIR) compile: $(patsubst %,%-compile,$(TARGET_DIRS)) -install: utils-install $(patsubst %,%-install,$(TARGET_DIRS)) $(IMAGE_TARGETS) +install: utils-install lzma-install $(LINUX_IMAGE) $(patsubst %,%-install,$(TARGET_DIRS)) $(IMAGE_TARGETS) clean: $(patsubst %,%-clean,$(TARGET_DIRS)) image_clean image_clean: diff --git a/openwrt/target/jffs2/Makefile b/openwrt/target/jffs2/Makefile index ff63e6fc2a..ca61febf2e 100644 --- a/openwrt/target/jffs2/Makefile +++ b/openwrt/target/jffs2/Makefile @@ -12,14 +12,14 @@ clean: jffs2root-dirclean $(BIN_DIR)/openwrt-generic-jffs2-4MB.trx: $(MKFS_JFFS2) --pad --little-endian --squash -e 0x10000 \ -d $(TARGET_DIR) -o $(IMAGE)-4MB.jffs2 - PATH=$(TARGET_PATH) trx -o $@ \ - $(LINUX_KERNEL) -a 0x10000 $(IMAGE)-4MB.jffs2 + PATH=$(TARGET_PATH) trx -o $@ $(LINUX_LOADER) \ + $(LINUX_IMAGE) -a 0x10000 $(IMAGE)-4MB.jffs2 $(BIN_DIR)/openwrt-generic-jffs2-8MB.trx: $(MKFS_JFFS2) --pad --little-endian --squash -e 0x20000 \ -d $(TARGET_DIR) -o $(IMAGE)-8MB.jffs2 - PATH=$(TARGET_PATH) trx -o $@ \ - $(LINUX_KERNEL) -a 0x20000 $(IMAGE)-8MB.jffs2 + PATH=$(TARGET_PATH) trx -o $@ $(LINUX_LOADER) \ + $(LINUX_IMAGE) -a 0x20000 $(IMAGE)-8MB.jffs2 $(BIN_DIR)/openwrt-wrt54g-jffs2.bin: $(BIN_DIR)/openwrt-generic-jffs2-4MB.trx PATH=$(TARGET_PATH) addpattern -2 -i $< -o $@ -g diff --git a/openwrt/target/squashfs-lzma/Makefile b/openwrt/target/squashfs-lzma/Makefile index 6c709952e4..8e7e8e4792 100644 --- a/openwrt/target/squashfs-lzma/Makefile +++ b/openwrt/target/squashfs-lzma/Makefile @@ -11,6 +11,6 @@ clean: squashfslzmaroot-dirclean $(BIN_DIR)/openwrt-generic-squashfs.trx: @mkdir -p $(TARGET_DIR)/jffs $(SQUASHFSLZMA_DIR)/squashfs-tools/mksquashfs-lzma $(TARGET_DIR) $(IMAGE).squashfslzma -noappend -root-owned -le - PATH=$(TARGET_PATH) trx -o $@ \ - $(LINUX_KERNEL) $(IMAGE).squashfslzma + PATH=$(TARGET_PATH) trx -o $@ $(LINUX_LOADER) \ + $(LINUX_IMAGE) $(IMAGE).squashfslzma diff --git a/openwrt/target/squashfs-lzma/squashfslzmaroot.mk b/openwrt/target/squashfs-lzma/squashfslzmaroot.mk index 62b7dbb7b7..ca493d7782 100644 --- a/openwrt/target/squashfs-lzma/squashfslzmaroot.mk +++ b/openwrt/target/squashfs-lzma/squashfslzmaroot.mk @@ -4,20 +4,20 @@ # ############################################################# -SQUASHFSLZMA_DIR=$(BUILD_DIR)/squashfs2.1-r2-lzma -SQUASHFSLZMA_SOURCE=squashfs2.1-r2-lzma.tar.gz -SQUASHFSLZMA_SITE=http://openwrt.openbsd-geek.de +SQUASHFSLZMA_DIR=$(BUILD_DIR)/squashfs2.1-r2 +SQUASHFSLZMA_SOURCE=squashfs2.1-r2.tar.gz +SQUASHFSLZMA_SITE=http://mesh.dl.sourceforge.net/sourceforge/squashfs/ $(DL_DIR)/$(SQUASHFSLZMA_SOURCE): $(SCRIPT_DIR)/download.pl $(DL_DIR) $(SQUASHFSLZMA_SOURCE) x $(SQUASHFSLZMA_SITE) $(SQUASHFSLZMA_DIR)/.unpacked: $(DL_DIR)/$(SQUASHFSLZMA_SOURCE) zcat $(DL_DIR)/$(SQUASHFSLZMA_SOURCE) | tar -C $(BUILD_DIR) -xvf - + patch -d $(SQUASHFSLZMA_DIR) -p1 < squashfs2.0-tools-lzma.patch touch $(SQUASHFSLZMA_DIR)/.unpacked $(SQUASHFSLZMA_DIR)/squashfs-tools/mksquashfs: $(SQUASHFSLZMA_DIR)/.unpacked - $(MAKE) -C $(SQUASHFSLZMA_DIR)/lzma/SRC/7zip/Compress/LZMA_Lib - $(MAKE) -C $(SQUASHFSLZMA_DIR)/squashfs-tools mksquashfs-lzma + $(MAKE) -C $(SQUASHFSLZMA_DIR)/squashfs-tools mksquashfs-lzma LZMAPATH=$(BUILD_DIR)/lzma squashfslzma: $(SQUASHFSLZMA_DIR)/squashfs-tools/mksquashfs -- 2.25.1