[OpenWrt-Devel] [PATCH] apm821xx: switch MR24's initramfs to multi-image method

Christian Lamparter chunkeey at gmail.com
Wed Mar 21 13:44:34 EDT 2018


On Dienstag, 20. März 2018 23:19:06 CET Hauke Mehrtens wrote:
> On 03/18/2018 10:51 PM, Christian Lamparter wrote:
> > The recent change to switch to gcc 7.3 broke the image
> > generation code, as the kernel would no longer fit into
> > KERNEL_SIZE.
> > 
> > This patch fixes the issue by reworking the initramfs
> > creation and packaging, which will get rid of the
> > KERNEL_SIZE check in the process.
> > 
> > This new initramfs can be loaded through the MR24 U-boot
> > in the following way:
> > 
> > => setenv ipaddr 192.168.1.1
> > => setenv bootargs console=ttyS0,$baudrate
> > => tftpboot c00000 192.168.1.2:meraki_mr24-initramfs-kernel.bin
> > [...]
> > Load address: 0xc00000
> > Loading: ################################################ [...]
> > done
> >     Bytes transferred = 5952544 (5ad420 hex)
> >     => bootm $fileaddr
> >     \## Booting kernel from Legacy Image at 00c00000 ...
> >     ...
> > 
> > For more information and the latest flashing guide:
> > please visit the OpenWrt Wiki Page for the MR24:
> > <https://openwrt.org/toh/meraki/mr24#flashing>
> > 
> > Cc: Hauke Mehrtens <hauke at hauke-m.de>
> > Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
> > Signed-off-by: Chris Blake <chrisrblake93 at gmail.com>
> > ---
> >  target/linux/apm821xx/image/Makefile | 10 +++-------
> >  1 file changed, 3 insertions(+), 7 deletions(-)
> > 
> > diff --git a/target/linux/apm821xx/image/Makefile b/target/linux/apm821xx/image/Makefile
> > index 82a857a4d0..4e6b6e4995 100644
> > --- a/target/linux/apm821xx/image/Makefile
> > +++ b/target/linux/apm821xx/image/Makefile
> > @@ -75,13 +75,9 @@ define Device/meraki_mr24
> >    BLOCKSIZE := 63k
> >    IMAGES := sysupgrade.tar
> >    DTB_SIZE := 64512
> > -  KERNEL_SIZE := 1984k
> >    IMAGE_SIZE := 8191k
> >    KERNEL := kernel-bin | lzma | uImage lzma | MerakiAdd-dtb | MerakiNAND
> > -  KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux | lzma | uImage lzma | \
> > -		      check-size $$(KERNEL_SIZE) | \
> > -		      MerakiAdd-dtb | pad-to 2047k | MerakiAdd-initramfs | \
> > -		      MerakiNAND
> > +  KERNEL_INITRAMFS := kernel-bin | lzma | dtb | MuImage-initramfs lzma
> >    IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
> >    UBINIZE_OPTS := -E 5
> >    SUPPORTED_DEVICES += mr24
> > @@ -123,7 +119,7 @@ define Build/create-uImage-dtb
> >  	@mv $@.new $@
> >  endef
> >  
> > -define Build/wndr4700-specialImage
> > +define Build/MuImage-initramfs
> >  	rm -rf $@.fakerd $@.new
> >  
> >  	dd if=/dev/zero of=$@.fakerd bs=32 count=1 conv=sync
> > @@ -170,7 +166,7 @@ define Device/netgear_wndr4700
> >    KERNEL_SIZE := 1920k
> >    KERNEL := dtb | kernel-bin | lzma | uImage lzma | pad-offset $$(BLOCKSIZE) 64 | \
> >  	  append-uImage-fakeroot-hdr
> > -  KERNEL_INITRAMFS := kernel-bin | gzip | dtb | wndr4700-specialImage gzip
> > +  KERNEL_INITRAMFS := kernel-bin | gzip | dtb | MuImage-initramfs gzip
> >    IMAGE/factory.img := create-uImage-dtb | append-kernel | pad-to 2M | append-ubi | \
> >  		       netgear-dni | check-size $$$$(IMAGE_SIZE)
> >    IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
> > 
> 
> I test compiled this, but now I have the same problem on the wndr4700,
> the meraki_mr24 seams to be fine.
> 
> WARNING: Image file
> /home/hauke/openwrt/lede/build_dir/target-powerpc_464fp_musl/linux-apm821xx_nand/netgear_wndr4700-kernel.bin
> is too big
> 
> 
> later on it failes becasue
> /home/hauke/openwrt/lede/build_dir/target-powerpc_464fp_musl/linux-apm821xx_nand/netgear_wndr4700-kernel.bin
> does not exists.
the WNDR4700 will need its own patch then.
The KERNEL_SIZE restriction is due to the kernel partition size: 
<https://github.com/openwrt/openwrt/blob/master/target/linux/apm821xx/dts/netgear-wndr4700.dts#L182>
And these definitions are the same for netgear's original dts.

In theory, the size could be easily changed (since wndr4700's u-boot
does not care much about the NAND's partitioning. As it gets the size
from the kernel's uimage header). What this will break however is the
ability to sysupgrade directly from an existing installation.

As for shrinking the kernel by moving drivers into modules:
There is some potential.

1. The libATA + sata_dwc_460ex could be compiled as a module. 
This would be at the cost of ledtrig-disk. As this ledtrigger cannot
really be built as a module since the Kconfig option is a boolean.
The WNDR4700 has a dedicated hdd activity LED, so people will notice
this.

2. make the crypto4xx a module again.
This however would require to revert the following patch again:
|kernel: drop crypto-hw-ppc4xx
|If any of the ppc4xx targets are restored, this should be built into the
|kernel instead
|
|Signed-off-by: Felix Fietkau <nbd at nbd.name>
|
<https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=5b92dca09fb0414775c75f51b3ce8c99ad63292f>
(So, this requires an ACK/OK from Felix first.)

There are also a few more lesser things, like disabling
PM+SUSPEND+PPC4XX_CPM, SATA PMP, MTD LED trigger, LZO support,
and PCIEAER. And if the MX60(W) was converted like the MR24,
the CONFIG_RD_GZIP + CONFIG_ZLIB_* + CONFIG_DECOMPRESS_GZIP
could be disabled too.

Regards,
Christian
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list