Ronald G Minnich wrote:
> Jordan Crouse wrote:
> 
> > So if its cool with everybody,  I'll put this patch into my local patch
> > set, and await the LinuxBIOS patch with great anticipation.
> 
> yes. buildrom works now. we'll work with the lzma mods but not release 
> until it is solid.

Log follows:
[EMAIL PROTECTED]:/storage/olpc/buildrom> make
Cleaning unneeded libraries...
Building the initrd...
Building the ELF payload...
Bytes left in ROM: 95538
Building the uncompressed ELF payload...
Compressing the uncompressed ELF payload with lzma...
Bytes left in ROM: 245336
Building linuxbios...
Making the ROM...

Updated patch attached. This patch will build a lzma compressed ELF payload 
while still leaving the existing build unmodified. It will give you an estimate 
of how much more you can cram into the kernel and initrd before space runs out.

That only leaves the LinuxBIOS patch to be done.

Regards,
Carl-Daniel
-- 


Echte DSL-Flatrate dauerhaft für 0,- Euro*. Nur noch kurze Zeit!
"Feel free" mit GMX DSL: http://www.gmx.net/de/go/dsl
diff --git a/Config.mk b/Config.mk
index 854d933..b6bcdc9 100644
--- a/Config.mk
+++ b/Config.mk
@@ -26,6 +26,9 @@ # Say 'y' here to build uclibc as a shar
 # win if you selected more then one of the above)
 UCLIBC_DYNAMIC=y
 
+# say 'y' here to build a full rom image with lzma compression
+LZMA_PACKAGE=y
+
 # say 'y' here to build a full rom image (minus the vsa)
 LINUXBIOS_PACKAGE=y
 
@@ -59,6 +62,10 @@ ifeq ($(INITRD_KEXEC_TOOLS),y)
 INITRD_PACKAGES += kexec-tools
 endif
 
+ifeq ($(LZMA_PACKAGE), y)
+TARGETS += lzma
+endif
+
 ifeq ($(LINUXBIOS_PACKAGE), y)
 TARGETS += linuxbios
 endif
diff --git a/Makefile b/Makefile
index 13c11e7..2bd8535 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,10 @@ include Vars.mk
 
 PKGLIST=uclibc kernel $(INITRD_PACKAGES)
 
+ifeq ($(LZMA_PACKAGE),y)
+PKGLIST += lzma
+endif
+
 ifeq ($(LINUXBIOS_PACKAGE),y)
 PKGLIST += linuxbios
 endif
@@ -13,10 +17,11 @@ PKG_distclean=$(patsubst %, %-distclean,
 
 all: $(TARGETS)
 
-payload: $(OUTPUT_DIR)/olpc-payload.elf
+payload: $(OUTPUT_DIR)/olpc-payload.elf $(OUTPUT_DIR)/olpc-payload-uncompressed.elf.lzma
 initrd: $(OUTPUT_DIR)/initrd
+initrd.uncompressed: $(OUTPUT_DIR)/initrd.uncompressed
 
-$(OUTPUT_DIR)/initrd: uclibc $(INITRD_PACKAGES)
+$(OUTPUT_DIR)/initrd.uncompressed: uclibc $(INITRD_PACKAGES)
 	@ cp -af $(SKELETON_DIR)/* $(INITRD_DIR)
 	@ chmod 0755 $(INITRD_DIR)/linuxrc
 
@@ -28,7 +33,10 @@ initrd: $(OUTPUT_DIR)/initrd
 
 	@ echo "Building the initrd..."
 	@ install -d $(OUTPUT_DIR)
-	@ cd $(INITRD_DIR); find . | cpio -o -H newc 2> /dev/null | gzip -9 > $@
+	@ cd $(INITRD_DIR); find . | cpio -o -H newc 2> /dev/null > $@
+
+$(OUTPUT_DIR)/initrd: initrd.uncompressed
+	@ gzip -9 -c -n $(OUTPUT_DIR)/initrd.uncompressed > $@
 
 # Note that we refuse to continue if the ELF image is too big
 
@@ -44,6 +52,22 @@ # Note that we refuse to continue if the
 	  if [ $$delta -lt 0 ]; then echo "ERROR! ERROR! ERROR!"; \
 	  echo "The ELF image $@ is too big!"; exit -1; fi)
 
+$(OUTPUT_DIR)/olpc-payload-uncompressed.elf: kernel initrd.uncompressed mkelfimage
+	@ echo "Building the uncompressed ELF payload..."
+	@ rm -f $@
+	@ $(STAGING_DIR)/sbin/mkelfImage --command-line="$(COMMAND_LINE)" \
+	--ramdisk=$(OUTPUT_DIR)/initrd.uncompressed $(OUTPUT_DIR)/vmlinux $@
+
+$(OUTPUT_DIR)/olpc-payload-uncompressed.elf.lzma: $(OUTPUT_DIR)/olpc-payload-uncompressed.elf
+	@ echo "Compressing the uncompressed ELF payload with lzma..."
+	@ $(STAGING_DIR)/bin/lzma e $(OUTPUT_DIR)/olpc-payload-uncompressed.elf 2>/dev/null $@
+	@ chmod 0644 $@
+	@ ( size=`du -b $@ | cut -f1`; \
+	  delta=`expr 884736 - $$size`; \
+	  echo "Bytes left in ROM: $$delta"; \
+	  if [ $$delta -lt 0 ]; then echo "ERROR! ERROR! ERROR!"; \
+	  echo "The ELF image $@ is too big!"; exit -1; fi)
+
 clean: $(PKG_clean)
 	@ rm -rf $(INITRD_DIR) $(OUTPUT_DIR)
 
diff --git a/packages/kernel/kernel.mk b/packages/kernel/kernel.mk
index bb64419..73ed469 100644
--- a/packages/kernel/kernel.mk
+++ b/packages/kernel/kernel.mk
@@ -33,10 +33,14 @@ endif
 	@ install -d $(OUTPUT_DIR)
 	@ install -m 0644 $< $@ 
 
+$(OUTPUT_DIR)/vmlinux: $(KERNEL_SRC_DIR)/vmlinux
+	@ install -d $(OUTPUT_DIR)
+	@ install -m 0644 $< $@ 
+
 $(KERNEL_STAMP_DIR) $(KERNEL_LOG_DIR):
 	@ mkdir -p $@
 
-kernel: $(KERNEL_STAMP_DIR) $(KERNEL_LOG_DIR) $(OUTPUT_DIR)/bzImage
+kernel: $(KERNEL_STAMP_DIR) $(KERNEL_LOG_DIR) $(OUTPUT_DIR)/bzImage $(OUTPUT_DIR)/vmlinux
 
 kernel-clean:
 	@ echo "Cleaning kernel..."
diff --git a/packages/lzma/lzma.mk b/packages/lzma/lzma.mk
new file mode 100644
index 0000000..c5f0c5f
--- /dev/null
+++ b/packages/lzma/lzma.mk
@@ -0,0 +1,46 @@
+LZMA_URL=http://switch.dl.sourceforge.net/sourceforge/sevenzip
+LZMA_SOURCE=lzma443.tar.bz2
+LZMA_DIR=$(BUILD_DIR)/lzma
+LZMA_SRC_DIR=$(LZMA_DIR)/lzma-443
+LZMA_STAMP_DIR=$(LZMA_DIR)/stamps
+LZMA_LOG_DIR=$(LZMA_DIR)/logs
+
+ifeq ($(VERBOSE),y)
+LZMA_BUILD_LOG=/dev/stdout
+LZMA_CONFIG_LOG=/dev/stdout
+else
+LZMA_BUILD_LOG=$(LZMA_LOG_DIR)/build.log
+LZMA_CONFIG_LOG=$(LZMA_LOG_DIR)/config.log
+endif
+
+$(SOURCE_DIR)/$(LZMA_SOURCE):
+	@ mkdir -p $(SOURCE_DIR)
+	@ wget -P $(SOURCE_DIR) $(LZMA_URL)/$(LZMA_SOURCE)
+
+$(LZMA_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(LZMA_SOURCE)
+	@ mkdir -p $(LZMA_SRC_DIR)
+	@ tar -C $(LZMA_SRC_DIR) -jxf $(SOURCE_DIR)/$(LZMA_SOURCE)
+	@ touch $@	
+
+$(LZMA_SRC_DIR)/C/7zip/Compress/LZMA_Alone/lzma: $(LZMA_STAMP_DIR)/.unpacked
+	@ echo "Building lzma..."
+	@ ( export CC=$(HOST_CC); export CFLAGS=$(HOST_CFLAGS); \
+	  export LDFLAGS=$(HOST_LDFLAGS); unset LIBS; \
+	  cd $(LZMA_SRC_DIR)/C/7zip/Compress/LZMA_Alone; \
+	  $(MAKE) -C $(LZMA_SRC_DIR)/C/7zip/Compress/LZMA_Alone -f makefile.gcc > $(LZMA_BUILD_LOG) 2>&1 )
+
+$(STAGING_DIR)/bin/lzma: $(LZMA_SRC_DIR)/C/7zip/Compress/LZMA_Alone/lzma
+	@ install -d $(STAGING_DIR)/bin
+	@ install -m 0755 $< $@
+
+$(LZMA_STAMP_DIR) $(LZMA_LOG_DIR):
+	@ mkdir -p $@
+
+lzma: $(LZMA_STAMP_DIR) $(LZMA_LOG_DIR) $(STAGING_DIR)/bin/lzma
+
+lzma-clean:
+	@ $(MAKE) -C $(LZMA_SRC_DIR) clean > /dev/null 2>&1
+
+lzma-distclean:
+	@ rm -rf $(LZMA_DIR)/*
+
_______________________________________________
Devel mailing list
[email protected]
http://mailman.laptop.org/mailman/listinfo/devel

Reply via email to