Repository navigation
gk7201v200, hi3516cv200 family: the split NOR image - #2668
Conversation
gk7201v200 lite's rootfs grew 496K in the 30 days to the 2026-10-22 nightly and has 180K left of its 5 MiB slot. The split layout lets kernel and rootfs share one budget. - gk7201v200.generic.config turns on MTD_SPLIT_FIRMWARE (named "firmware"), MTD_SPLIT_UIMAGE_FW, MTD_SPLIT_SQUASHFS_ROOT and MTD_ROOTFS_ROOT_DEV, as gk7205v500.generic.config does. The kernel's gk7201v200 device tree has the partitions since OpenIPC/linux#140, and its U-Boot the split mode since OpenIPC/u-boot#61. - gk7201v200_lite uses post-image-split.sh with BR2_OPENIPC_NOR_FIXED_PACKAGE=y: the fixed-slot package as before, plus -split. Tested in qemu-hisilicon (gk7201v200, 8 MB) with a gk7201v200_lite build on this kernel (uImage 1836K, squashfs 4956K, firmware.bin 6848K): - split firmware.bin, new U-Boot: "Found RootFS at 0x00220000", "sfc: split NOR layout, device tree partitions", rootfs_data from 0x700000, root on 31:4, login; a second boot on the same flash reads the seed the first saved in the overlay; - the same image under the published u-boot-gk7201v200-nor.bin: "root=/dev/mtdblock3 ignored, the flash names its own root", root on 31:4; - the fixed-slot package: 6 cmdlinepart partitions, root on 31:3, login; - recovery: from fixed slots, and from a split image with one kernel byte flipped ("kernel at 0x50000 fails its CRC"), fwupd over TFTP writes firmware.bin.gk7201v200 (byte-identical on flash) and the next boot reaches login on 31:4. Not run on hardware.
hi3516cv200 lite's rootfs is 5028K of its 5120K slot. The split layout lets kernel and rootfs share one budget. - hi3516cv200, hi3518ev200 and hi3518ev201's kernel configs turn on MTD_SPLIT_FIRMWARE (named "firmware"), MTD_SPLIT_UIMAGE_FW, MTD_SPLIT_SQUASHFS_ROOT and MTD_ROOTFS_ROOT_DEV. Their kernel (OpenIPC/linux hisilicon-hi3516cv200) finds the layout from its device tree since OpenIPC/linux#141, and their U-Boot scans it since OpenIPC/u-boot#61. - hi3516cv200_lite, hi3518ev200_lite, hi3518ev200_ultimate and hi3518ev201_lite use post-image-split.sh with BR2_OPENIPC_NOR_FIXED_PACKAGE=y: the fixed-slot package as before, plus -split. Tested in qemu-hisilicon (hi3516cv200, 8 MB) with hi3516cv200_lite (uImage 1658K, squashfs 5028K, firmware.bin 6720K): split boot under the new and the published U-Boot (root=/dev/mtdblock3 ignored), root on 31:4, login, the overlay kept across a power cycle; the fixed-slot package on 31:3; U-Boot recovery over TFTP from fixed slots and from a damaged kernel, byte-identical on flash. Not run on hardware.
PR Summary by QodoAdd split NOR images for gk7201v200 and hi3516cv200 families
AI Description
Diagram
High-Level Assessment
Files changed (9)
|
Code Review by Qodo
1. Firmware changes lack camera evidence
|
…t layout (#164) `CHIP_TO_FIRMWARE` has mapped gk7201v200 to gk7205v200 since #4, when gk7201v200 had nothing published of its own. So `defib install -c gk7201v200` wrote **gk7205v200's U-Boot and firmware** onto it. OpenIPC now publishes gk7201v200's own builds: - `u-boot-gk7201v200-nor.bin` and `-nand.bin` (OpenIPC/u-boot, `xm72010200`); - `openipc.gk7201v200-nor-lite.tgz`, built on the gk7205v500 kernel tree with gk7201v200's own vendor modules (OpenIPC/firmware#2478). This PR: - **Drops the alias.** gk7201v200 takes its `-nor`/`-nand` U-Boot (`PER_FLASH_TYPE_UBOOT`) and its own firmware. - **Adds it to `NOR_SPLIT_SOCS`.** Its kernel finds the split layout since OpenIPC/linux#140, its U-Boot scans it since OpenIPC/u-boot#61, and its firmware ships `-split` beside the fixed-slot package since OpenIPC/firmware#2668. - **Leaves gk7201v300 alone.** It has its own U-Boot builds but no firmware package. Not in this PR: hi3516cv200 and hi3518ev200 also ship `-split` since OpenIPC/firmware#2668, but defib keeps installing them on fixed slots for now. - Today defib gives them the old `-universal` U-Boot. Its default environment describes the lite fixed slots, so installing the split layout with it would break the hi3518ev200 ultimate fixed-slot install. - Moving them to the scanning `-nor.bin` U-Boot, as #158 did for hi3516cv300, needs a NAND U-Boot build for hi3518ev200's NAND package and a decision on its DDR3 boards. Neither exists yet. Tests: `test_gk7201v200_installs_its_own_build` checks there's no alias, that gk7201v200 uses its own NOR/NAND U-Boot names, that it's split-capable, and that it has its own package board. The per-flash-type U-Boot list includes it too. pytest, ruff and mypy are clean. The firmware side was checked in qemu-hisilicon (gk7201v200, 8 MB; see OpenIPC/firmware#2668). Not run on hardware.
They ship the split package beside the fixed-slot one since OpenIPC/firmware#2668, on OpenIPC/linux#140 and #141 and OpenIPC/u-boot#61. On Hi3516CV200 and Hi3518EV200 the older -universal U-Boot 2010.06 boots the split image as well (the kernel takes its root from the flash and ignores root=). sysupgrade -k -r takes the split package on them, and they go back to fixed slots the same way. Checked in qemu-hisilicon (gk7201v200 and hi3516cv200, 8 MB). Not run on hardware.
Two more families on the split NOR layout. Each ships its fixed-slot package as before, plus
-split(post-image-split.sh,BR2_OPENIPC_NOR_FIXED_PACKAGE=y).gk7201v200_litegk7201v200.generic.confighi3516cv200_lite,hi3518ev200_lite,hi3518ev200_ultimate,hi3518ev201_litehi3516cv200,hi3518ev200,hi3518ev201.generic.configEach kernel config turns on
MTD_SPLIT_FIRMWARE(namedfirmware),MTD_SPLIT_UIMAGE_FW,MTD_SPLIT_SQUASHFS_ROOTandMTD_ROOTFS_ROOT_DEV, as gk7205v500's does.Why: on the 2026-10-22 nightly, gk7201v200 lite's rootfs grew 496K in 30 days, leaving 180K of its 5 MiB slot. hi3516cv200 lite's rootfs is 5028K of 5120K. Since #2666, a fixed-slot package that stops fitting is skipped and the board ships
-splitalone, instead of the build failing.Tested in qemu-hisilicon (8 MB), with each family's lite build:
root=/dev/mtdblock3 ignored, 31:4root=/dev/mtdblock3 ignored, 31:4hi3518ev201_lite is outside the CI matrix (it builds its own toolchain) and gets the same change. Not run on hardware.