Repository navigation
hi3516ev300: the split NOR image only, like hi3516cv6xx - #2656
Conversation
hi3516ev300's kernel is 2009K with the split options: padded to 64 KiB it ends exactly at the 2 MiB slot, so a fixed-slot package cannot ship beside a split one (the kernel would take the fixed image as split while U-Boot reads fixed slots). #2655 therefore left it out; it now ships the split package alone, as hi3516cv6xx does. Its lite images sat 16 KiB short of the 5 MiB rootfs slot, so it is the board that needs it most. - lite, ultimate, dev and glibc use general/scripts/post-image-split.sh without BR2_OPENIPC_NOR_FIXED_PACKAGE: openipc.hi3516ev300-nor-<variant> -split.tgz, no plain NOR package; ultimate still packages its NAND image. dev and glibc share hi3516ev300.generic.config, so they go with it rather than keep fixed-slot images a split-capable kernel would misread. neo keeps its own config and fixed-slot package. - hi3516ev300.generic.config: MTD_SPLIT_FIRMWARE ("firmware"), MTD_SPLIT_UIMAGE_FW, MTD_SPLIT_SQUASHFS_ROOT, MTD_ROOTFS_ROOT_DEV (OpenIPC/linux#131, #134). Built locally (kernel at hisilicon-hi3516ev200 e7008a95c): - hi3516ev300_lite: uImage 2008K/2048K read, firmware.bin 7168K/7616K; - hi3516ev300_ultimate: firmware.bin 10240K/15808K, rootfs.ubi 18304K/24576K, plus the NAND package. Tested in qemu-hisilicon (hi3516ev300) with the published u-boot-hi3516ev300-nor.bin (2022.10-gbaa15068), split firmware.bin at 0x50000, 8 MB lite and 16 MB ultimate, booted twice each: - U-Boot reads it as fixed slots (the squashfs is exactly 2 MiB after the uImage): "Found RootFS at 0x00250000", root=/dev/mtdblock3 and fixed mtdparts; the kernel: "hi_sfc: split NOR layout, device tree partitions", "root=/dev/mtdblock3 ignored", root on 31:4, login; rootfs_data at 0x750000 (lite) / 0xa50000 (ultimate) formatted once and kept (/init's .openipc-overlay marker there after the second boot). - .github/scripts/test_sysupgrade.sh passes (split-only boards take the -split package by default). After the first nightly with these packages, the stale plain openipc.hi3516ev300-nor-{lite,ultimate}.tgz on latest should be deleted: older cameras whose sysupgrade predates the split URL fallback would otherwise keep installing them. Not run on hardware.
PR Summary by QodoShip split-only NOR images for hi3516ev300
AI Description
Diagram
High-Level Assessment
Files changed (5)
|
Code Review by Qodo
1. Real-camera boot evidence is missing
|
- hi3518ev300 lite and ultimate drop BR2_OPENIPC_NOR_FIXED_PACKAGE: the fixed-slot lite package no longer fits its 5120K rootfs slot (4 KiB over after today's merges), which fails the whole nightly. They ship the -split package only, like hi3516ev300 and hi3516cv6xx. - sysupgrade's default_upgrade_url applied the -split fallback only for packages from OpenIPC/firmware. dev and glibc come from OpenIPC/builder, so on a split-only board they asked for a plain archive that is no longer built (from review). nor_split_url now applies wherever the archive lives; it switches only when a -split archive exists. - test_sysupgrade.sh: a hi3516ev300 dev camera gets builder/.../openipc.hi3516ev300-nor-dev-split.tgz when one is published, the plain one otherwise. All checks pass.
hi3516ev300's firmware now ships only the split NOR package, like hi3516cv6xx (OpenIPC/firmware#2656): its uImage (2008K with the split options) fills the 2 MiB slot, so a fixed-slot package cannot ship beside a split one. hi3518ev300 went split-only in the same PR; it is already in `NOR_SPLIT_SOCS` (#160). - hi3516ev300 joins `NOR_SPLIT_SOCS`, so `install` writes `firmware.bin.hi3516ev300` at 0x50000 and erases the rest of the chip; its U-Boot is the published `u-boot-hi3516ev300-nor.bin` (split mode since OpenIPC/u-boot#48). - The refusal test that used hi3516ev300 as a chip without the split layout now uses hi3518ev200. CLAUDE.md lists it. The split package appears with the next nightly. Not run on hardware; the firmware side was checked in qemu-hisilicon (8 MB lite, 16 MB ultimate: root on the split rootfs, overlay kept across a reboot). `pytest tests/ --ignore=tests/fuzz`: 1084 passed. ruff and mypy are clean.
…ex (#505) * Builds: a plain NOR package a newer split one replaced leaves the index The index takes, for each file name, the newest retained build that published it, so a package the firmware stops publishing stays on offer for the whole retention period. hi3516ev300 and hi3518ev300 lite and ultimate ship only the split package since OpenIPC/firmware#2656. Their last plain packages (nightlies of 2026-10-19 to 21) are still in the index, so the wizard gives them fixed slots, and SplitOnlyEdition, which looks for "split published, plain not", never sees them split-only. The stale assets are gone from the latest release; the index did not notice, because it does not read the release. LoadIndex now leaves out a plain NOR package whose split package came from a newer build than the plain one's newest. A board that publishes both does so in one build and keeps both (the gk7205v200 and gk7205v500 families). An edition with no split package (hi3516ev300 neo) and a board whose build failed, publishing neither, keep what they had. Test: TestLoadIndexDropsPlainSupersededBySplit stores two firmware builds, the 21st with the plain ev300 lite/ultimate, neo, gk7205v200 lite and cv300 lite, and the 22nd with the ev300 split pair, neo and gk7205v200 plain plus split. The ev300 plain pair is gone; split, neo, gk7205v200's both, and cv300's from the 21st stay. It fails on the old LoadIndex. service/run.sh test (all packages, Postgres) passes. * Builds: a split package replaces a plain one by the query's build order From review: two builds with one built_at rank by id in LoadIndex's query; the split check now does the same, comparing (built_at, id). Test: TestLoadIndexSplitSupersedesOnTiedTimestamp, two builds at one time, the later id carrying the split package. service/run.sh test passes.
hi3516ev300 joins the split NOR layout, split-only. Its lite rootfs is 16 KiB short of the 5 MiB slot and its kernel 41 KiB short of 2 MiB; with the split options its uImage is 2008K, over the 1983K a fixed-slot package beside a split one may use (#2655), so it ships
-splitalone, as hi3516cv6xx does.hi3516ev300_lite,_ultimate,_devand_glibcusegeneral/scripts/post-image-split.shwithoutBR2_OPENIPC_NOR_FIXED_PACKAGE. dev and glibc share the kernel config, so leaving them on fixed slots would give them images their split-capable kernel misreads. neo has its own config and stays fixed-slot.hi3516ev300.generic.config:MTD_SPLIT_FIRMWARE(named "firmware"),MTD_SPLIT_UIMAGE_FW,MTD_SPLIT_SQUASHFS_ROOT,MTD_ROOTFS_ROOT_DEV(hi3516ev200 family: the split NOR layout, from the device tree linux#131). Its U-Boot has split mode since nor: split layout on the hi3516ev200 family u-boot#48 (published).-split.tgzonly, and ultimate still produces its NAND package (hi3516ev200, hi3518ev300, hi3516dv200: the split NOR image, as on gk7205v200 #2655's fix).Sizes: lite uImage 2008K (2048K read), firmware.bin 7168K of 7616K; ultimate firmware.bin 10240K of 15808K, rootfs.ubi 18304K of 24576K.
Tested in qemu-hisilicon (hi3516ev300, published
u-boot-hi3516ev300-nor.bin2022.10-gbaa15068, 8 MB lite and 16 MB ultimate, two boots each): U-Boot reads the image as fixed slots (Found RootFS at 0x00250000: the squashfs lands exactly 2 MiB after the uImage) and passesroot=/dev/mtdblock3with fixed mtdparts; the kernel printshi_sfc: split NOR layout, device tree partitionsandroot=/dev/mtdblock3 ignored, root on 31:4, login prompt; rootfs_data at 0x750000 / 0xa50000 formatted once and kept across the reboot (overlay marker present).test_sysupgrade.shandci-matrix --self-testpass.After merge: the plain
openipc.hi3516ev300-nor-{lite,ultimate}.tgzonlateststay until deleted; once deleted, CLIsysupgrade(which updates itself first) takes-split.tgz, while web-UI upgrades with a sysupgrade older than the split-URL fallback find no package and write nothing. Not run on hardware.