diff mbox series

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

Message ID 20180318215107.2545-1-chunkeey@gmail.com
State Accepted
Delegated to: Hauke Mehrtens
Headers show
Series [OpenWrt-Devel] apm821xx: switch MR24's initramfs to multi-image method | expand

Commit Message

Christian Lamparter March 18, 2018, 9:51 p.m. UTC
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@hauke-m.de>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Chris Blake <chrisrblake93@gmail.com>
---
 target/linux/apm821xx/image/Makefile | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

Comments

Hauke Mehrtens March 20, 2018, 10:19 p.m. UTC | #1
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@hauke-m.de>
> Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
> Signed-off-by: Chris Blake <chrisrblake93@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.

Hauke
Christian Lamparter March 21, 2018, 5:44 p.m. UTC | #2
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@hauke-m.de>
> > Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
> > Signed-off-by: Chris Blake <chrisrblake93@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@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
diff mbox series

Patch

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