Unified repository for the U-Boot bootloaders maintained by OpenIPC for supported SoCs.
Each SoC family lives on its own branch. This openipc branch is the
entry point: it holds the documentation and the CI workflows for every
family — not bootloader sources.
| Branch | Contents |
|---|---|
openipc (this branch) |
Unified documentation and CI workflows |
openipc-hisilicon |
U-Boot for HiSilicon/Goke IP-camera SoCs |
openipc-xm |
U-Boot for Xiongmai XM510/XM530/XM550 |
main |
Fork of upstream mainline U-Boot, kept for rebasing |
New families are added here as they are ported, each with its own
.github/workflows/build-<family>.yml.
The current port: U-Boot for 38 HiSilicon and Goke camera SoCs.
NOR + NAND:
hi3516cv500, hi3516dv300, hi3516av300, hi3516dv200,
hi3516ev200, hi3516ev300, hi3518ev300, gk7201v200, gk7201v300,
gk7202v300, gk7205v200, gk7205v300, gk7205v500, gk7205v510,
gk7205v530, gk7605v100, gk7206v11a*, gk7206v12a*
* Goke GK7206V1 (XMedia Lotus "xmorca"), from the vendor SDK's own first stage and DDR-init code. Not yet booted on hardware: CI builds the images but keeps them out of the release and publish steps.
NOR only:
hi3516cv100, hi3516cv200, hi3516cv300, hi3516cv608,
hi3516cv610, hi3516av100, hi3516av200, hi3516dv100,
hi3516ev100, hi3518av100, hi3518cv100, hi3518ev100,
hi3518ev200, hi3519v101, hi3515av100, hi3520av100,
hi3520dv100, hi3520dv200, hi3536cv100, hi3536dv100
git clone --branch openipc-hisilicon https://github.com/OpenIPC/u-boot.git
cd u-boot
bash build.sh # every supported SoC
bash build.sh hi3516cv300 # a single SoCThe toolchain is arm-linux-gnueabi- (Debian/Ubuntu package
gcc-arm-linux-gnueabi). Images land in output/ as
u-boot-<soc>-nor.bin / u-boot-<soc>-nand.bin.
U-Boot for Xiongmai's own camera SoCs, on the same mainline release
(v2022.10) and with the same OpenIPC boot layer as openipc-hisilicon.
NOR: xm510, xm530, xm550
SPI NAND: xm530, xm550. These images are unverified on
silicon: nothing documents how the XM530 boots from SPI NAND, and they
follow the vendor SDK's unused NAND configuration (U-Boot behind a 4 KiB
header in the controller window). They have only run on qemu-hisilicon's
NAND model, which implements the same assumption. The OpenIPC XM530
kernel has no SPI NAND driver yet.
The boot ROM runs U-Boot in place from SPI NOR, and U-Boot brings up DDR
itself, so the image is u-boot.bin as linked: u-boot-<soc>-nor.bin,
written at flash offset 0. The flash driver clears the per-block write
protection that Xiongmai bootloaders leave on (SR3.WPS), under which the
vendor U-Boot's sf erase/sf write report success and change nothing.
git clone --branch openipc-xm https://github.com/OpenIPC/u-boot.git
cd u-boot
bash build.sh # xm510 xm530 xm550
bash build.sh xm530 # a single SoCImages land in output/ as u-boot-<soc>-nor.bin and, for xm530/xm550,
u-boot-<soc>-nand.bin.
The toolchain is arm-linux-gnueabi-, as for hisilicon.
The build-hisilicon workflow runs
on pull requests to this branch, on pushes and pull requests to
openipc-hisilicon (through that branch's ci.yml, which builds the
pushed commit or the pull request merged into its base), and manually
from the Actions tab. Each run:
- builds every SoC in the list above, one matrix leg per SoC, and fails if an image overflows its boot partition;
- boots each NOR image in the matching machine model from widgetii/qemu-hisilicon; the 30 SoCs with a machine model are a hard gate, the eight without one get no smoke leg;
- uploads one artifact per SoC.
Two dispatch inputs control uploads; both skip the held GK7206 images.
release: trueuploads every built image to this repository'sHisiliconrelease.publish: truepushes them to theOpenIPC/firmwarelatestrelease and reports the result to openipc.org. This requires aFIRMWARE_RELEASE_TOKENsecret with release write access toOpenIPC/firmware.latestalready carries images under the same names from OpenIPC/u-boot-xmedia (u-boot-gk7205v500/v510/v530-*,u-boot-hi3516ev200/ev300/dv200-*,u-boot-hi3518ev300-*) and u-boot-hi3516cv6xx (boot-hi3516cv60x/cv610-*); publishing replaces them with this tree's builds.
gh workflow run build-hisilicon.yml # build + smoke test
gh workflow run build-hisilicon.yml -f release=true # ... and this repo's release
gh workflow run build-hisilicon.yml -f release=true -f publish=true # ... and OpenIPC/firmware + openipc.orgThe build-xm workflow has the same
shape. It runs on pull requests to this branch that change it, on pushes
and pull requests to openipc-xm (through that branch's ci.yml), and
manually. Every SoC has a qemu-hisilicon machine model, so every image is
smoke-tested:
- booted in place from an 8 MiB flash image whose part powers up with the Xiongmai per-block protection on;
- booted a second time, which must load the environment the first boot saved.
The NAND images get the same two boots on qemu-hisilicon's SPI NAND model.
Its release input fills this repository's
Xiongmai release; publish uploads to
OpenIPC/firmware latest, where no other repository publishes
u-boot-xm* names, and reports to openipc.org.
gh workflow run build-xm.yml -f release=true -f publish=true- Push the port on a new branch, based on a mainline U-Boot release or on an existing family's baseline.
- Add a
build-<family>.ymlworkflow on this branch. - Document the family and its branches here.
U-Boot is licensed under the GPL-2.0+; see the Licenses/ directory and
the per-file SPDX tags on the corresponding branch.