Awesome. However I'd like to somehow make for fully field-upgradable kernels for this device (how to do that?), and reserving 64k strikes me as too small to account for future growth.
On Thu, Aug 25, 2011 at 6:20 PM, Mark Mentovai <[email protected]> wrote: > This replaces the fixed flash layout currently used on the WNDR3700 > family with one whose mtd partition sizes are computed dynamically. > Rather than reserving 1MB for the kernel regardless of its actual space > requirements, this computes an appropriate size for the kernel, rounded > up to a 64kB erase block boundary. The space freed up by the kernel is > available for use by the on-flash rootfs. In current trunk builds, this > makes an extra 192kB available for user purposes. > > I've been using this patch since February when I first wrote it, and so > have others. Fixes https://dev.openwrt.org/ticket/8781. > > Signed-off-by: Mark Mentovai <[email protected]> > > --- > > Index: target/linux/ar71xx/image/Makefile > =================================================================== > --- target/linux/ar71xx/image/Makefile (revision 27926) > +++ target/linux/ar71xx/image/Makefile (working copy) > @@ -42,13 +42,13 @@ > > define PatchKernelLzma > cp $(KDIR)/vmlinux $(KDIR)/vmlinux-$(1) > - $(STAGING_DIR_HOST)/bin/patch-cmdline $(KDIR)/vmlinux-$(1) '$(strip > $(2))' > + $(STAGING_DIR_HOST)/bin/patch-cmdline $(KDIR)/vmlinux-$(1) "$(strip > $(2))" > $(call CompressLzma,$(KDIR)/vmlinux-$(1),$(KDIR)/vmlinux-$(1).bin.lzma) > endef > > define PatchKernelGzip > cp $(KDIR)/vmlinux $(KDIR)/vmlinux-$(1) > - $(STAGING_DIR_HOST)/bin/patch-cmdline $(KDIR)/vmlinux-$(1) '$(strip > $(2))' > + $(STAGING_DIR_HOST)/bin/patch-cmdline $(KDIR)/vmlinux-$(1) "$(strip > $(2))" > gzip -9 -c $(KDIR)/vmlinux-$(1) > $(KDIR)/vmlinux-$(1).bin.gz > endef > > @@ -287,29 +287,72 @@ > rm $(KDIR)/image.tmp > endef > > -define Image/Build/Netgear > - $(call MkuImageLzma,$(2),$(3) $($(4))) > - mkdir -p $(KDIR)/wndr3700/image > +define Image/Build/Netgear/Build_uImage > + $(call MkuImageLzma,$(1),$(2) $(3)) > + -rm -rf $(KDIR)/$(1) > + mkdir -p $(KDIR)/$(1)/image > $(STAGING_DIR_HOST)/bin/wndr3700 \ > - $(KDIR)/vmlinux-$(2).uImage \ > - $(KDIR)/wndr3700/image/uImage \ > - $(5) > + $(KDIR)/vmlinux-$(1).uImage \ > + $(KDIR)/$(1)/image/uImage \ > + $(4) > $(STAGING_DIR_HOST)/bin/mksquashfs-lzma \ > - $(KDIR)/wndr3700 $(KDIR)/vmlinux-$(2).uImage.squashfs.tmp \ > + $(KDIR)/$(1) $(KDIR)/vmlinux-$(1).uImage.squashfs.tmp \ > -nopad -noappend -root-owned -be > - -rm -rf $(KDIR)/wndr3700 > + -rm -rf $(KDIR)/$(1) > mkimage -A mips -O linux -T filesystem -C none \ > -a 0xbf070000 -e 0xbf070000 \ > -n 'MIPS OpenWrt Linux-$(LINUX_VERSION)' \ > - -d $(KDIR)/vmlinux-$(2).uImage.squashfs.tmp \ > - $(KDIR)/vmlinux-$(2).uImage.squashfs.tmp2 > + -d $(KDIR)/vmlinux-$(1).uImage.squashfs.tmp \ > + $(KDIR)/vmlinux-$(1).uImage.squashfs.tmp2 > $(STAGING_DIR_HOST)/bin/wndr3700 \ > - $(KDIR)/vmlinux-$(2).uImage.squashfs.tmp2 \ > - $(KDIR)/vmlinux-$(2).uImage.squashfs \ > - $(5) > - -rm -f $(KDIR)/vmlinux-$(2).uImage.squashfs.tmp* > + $(KDIR)/vmlinux-$(1).uImage.squashfs.tmp2 \ > + $(KDIR)/vmlinux-$(1).uImage.squashfs \ > + $(4) > + -rm -f $(KDIR)/vmlinux-$(1).uImage.squashfs.tmp* > +endef > + > +define Image/Build/Netgear/Estimate_uImage > + $(call Image/Build/Netgear/Build_uImage,$(1)_est,$(2),$(3),$(4)) > ( \ > - dd if=$(KDIR)/vmlinux-$(2).uImage.squashfs bs=1024k > conv=sync; \ > + set -e; \ > + kk=`echo '$(3)' | sed -e > 's/.*[:,]\([0-9]*\)k(kernel).*/\1/'`; \ > + rk=`echo '$(3)' | sed -e > 's/.*[:,]\([0-9]*\)k(rootfs).*/\1/'`; \ > + let 'tk = kk + rk'; \ > + s=`stat -c'%s' '$(KDIR)/vmlinux-$(1)_est.uImage.squashfs'`; \ > + c=`echo '$(3)' | wc -c`; \ > + let 'kk = (((s + c) / (64 * 1024) + 1) * 64)'; \ > + let 'rk = tk - kk'; \ > + echo '$(3)' | sed -e "s/[0-9]*k(kernel)/$$$${kk}k(kernel)/" \ > + -e "s/[0-9]*k(rootfs)/$$$${rk}k(rootfs)/" > > \ > + '$(KDIR)/$(1)_mtdparts'; \ > + let 'k = kk * 1024'; \ > + echo "$$$${k}" > '$(KDIR)/$(1)_kernel_maxsize'; \ > + let 'r = rk * 1024'; \ > + echo "$$$${r}" > '$(KDIR)/$(1)_rootfs_maxsize'; \ > + ) > + -rm -f $(KDIR)/vmlinux-$(1)_est \ > + $(KDIR)/vmlinux-$(1)_est.bin.lzma \ > + $(KDIR)/vmlinux-$(1)_est.uImage \ > + $(KDIR)/vmlinux-$(1)_est.uImage.squashfs > +endef > + > +define Image/Build/Netgear > + $(call Image/Build/Netgear/Estimate_uImage,$(2),$(3),$(4),$(5)) > + $(call Image/Build/Netgear/Build_uImage,$(2),$(3),`cat > $(KDIR)/$(2)_mtdparts`,$(5)) > + if [ `stat -c%s '$(KDIR)/vmlinux-$(2).uImage.squashfs'` -gt \ > + `cat '$(KDIR)/$(2)_kernel_maxsize'` ]; then \ > + echo "$(KDIR)/vmlinux-$(2).uImage.squashfs is too big" >& 2; > \ > + false; \ > + fi > + if [ `stat -c%s '$(KDIR)/root.$(1)'` -gt \ > + `cat '$(KDIR)/$(2)_rootfs_maxsize'` ]; then \ > + echo "$(KDIR)/root.$(1) is too big" >& 2; \ > + false; \ > + fi > + ( \ > + set -e; \ > + dd if=$(KDIR)/vmlinux-$(2).uImage.squashfs \ > + bs=`cat '$(KDIR)/$(2)_kernel_maxsize'` conv=sync; \ > dd if=$(KDIR)/root.$(1) bs=64k; \ > ) > $(call sysupname,$(1),$(2)) > for r in $(7) ; do \ > @@ -636,8 +679,8 @@ > wndr3700v2_cmdline=board=WNDR3700v2 console=ttyS0,115200 > wndr3700v2_mtdlayout=mtdparts=spi0.0:320k(u-boot)ro,128k(u-boot-env)ro,1024k(kernel),14848k(rootfs),64k(art)ro,15872k@0x70000(firmware) > define Image/Build/Profile/WNDR3700 > - $(call > Image/Build/Template/$(fs_64k)/$(1),Netgear,wndr3700,$(wndr3700_cmdline),wndr3700_mtdlayout,3700,WNDR3700,"" > NA,) > - $(call > Image/Build/Template/$(fs_64k)/$(1),Netgear,wndr3700v2,$(wndr3700v2_cmdline),wndr3700v2_mtdlayout,3701,WNDR3700v2,"",-H > 29763654+16+64) > + $(call > Image/Build/Template/$(fs_64k)/$(1),Netgear,wndr3700,$(wndr3700_cmdline),$(wndr3700_mtdlayout),3700,WNDR3700,"" > NA,) > + $(call > Image/Build/Template/$(fs_64k)/$(1),Netgear,wndr3700v2,$(wndr3700v2_cmdline),$(wndr3700v2_mtdlayout),3701,WNDR3700v2,"",-H > 29763654+16+64) > endef > > wr400n_cmdline=board=WRT400N console=ttyS0,115200 > _______________________________________________ > openwrt-devel mailing list > [email protected] > https://lists.openwrt.org/mailman/listinfo/openwrt-devel > -- Dave Täht SKYPE: davetaht US Tel: 1-239-829-5608 http://the-edge.blogspot.com _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
