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 |
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
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 --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