Align the MICOFE build system on Infrabase / SO3 v6.3.0 - #3
Open
daniel-rossier wants to merge 54 commits into
Open
Align the MICOFE build system on Infrabase / SO3 v6.3.0#3daniel-rossier wants to merge 54 commits into
daniel-rossier wants to merge 54 commits into
Conversation
Refocus the documentation solely on MICOFE and drop the Infrabase / EDGEMTech material. - Move the MICOFE section (micofe, emiso, portainer, syscalls_alignment) to the doc source root and rework index.rst as a MICOFE landing page. - Consolidate all images, including the .drawio source, into doc/source/img/; update figure paths accordingly. - Remove Infrabase-specific chapters (introduction, user_guide, dev_flow, coding_conventions, build_system, rootfs, base_extension) and the Infrabase/EDGEMTech images; keep the glossary. - Rebrand conf.py (project, copyright, LaTeX/man targets) to MICOFE and drop the now-unused PlantUML extension. - Replace the GitLab CI (edgem-build image) with a GitHub Actions workflow that builds the docs and deploys to GitHub Pages; unignore .github so workflows are tracked.
Docs/specialize micofe
- doc/requirements.txt listed sphinxcontrib-pdfembed, which does not exist on PyPI (404), causing the Pages workflow's pip install to fail. Slim the file to the only packages the Sphinx config imports (sphinx, sphinx-rtd-theme). - Add a Documentation section to README.md linking to the GitHub Pages site.
Extracted from the project technical report and shown above the acknowledgement text on the Introduction page.
Silences the Node.js 20 deprecation warnings: - actions/checkout v4 -> v6 - actions/setup-python v5 -> v6 - actions/upload-pages-artifact v3 -> v5 - actions/deploy-pages v4 -> v5
Add one page per report figure (architecture, framebuffer-map, framebuffer-flow, showcase-architecture, multicapsule-composition, portability-matrix), embedded as images, alongside the existing editable EMISO diagrams (Overview, emiso-engine, logs). 9 pages total.
Replace MICOFE's standalone build tree with the current Infrabase build system as carried by SO3 (branch 255: build-system migration + new logo), pulling in the latest SO3/AVZ evolutions while preserving MICOFE's capsule + virtualized-framebuffer feature. Foundation (socle): - env.sh, scripts/* (build.sh 2-mode -a/-x interface, unprivileged bitbake with setup_sudo/sudo_session, new ci-local.sh/updiff.sh/bitbake wrapper), meta/classes (sha256 attach guard, pristine-snapshot do_diffcompose), new meta-toolchain (musl-toolchain), auto-generated bblayers + auto.conf. - local.conf: virt64 default = AVZ (virt64_avz_soo_defconfig, CONFIG_SOO=y) + Linux agency (virt64_soo_defconfig, ITS virt64_avz) + SO3 capsule (virt64_capsule_defconfig, ITS virt64_capsule), EXTRA_OVERRIDES :lvgl:soo. Recipe layers: - meta-so3: avz/so3 6.1.0 -> 6.2.0, fetched from github (SRCREV 60f6da75c) with the MICOFE-specific patch infrastructure wired for `-c updiff`. - meta-uboot: portable git-style patch set (e1c_boot two-ITB + FIT crypto) + uboot 2024.07 for verdin. - meta-atf: OP-TEE support (optee recipe, fiptool, ATF imx8mp+avz patch). - meta-qemu / meta-filesystem: refreshed from upstream. - meta-linux: kernel + SOO agency patches; re-grafted MICOFE vfbdev/vinput BACKEND drivers (Linux-side virtualized framebuffer + input). - meta-usr: EMISO engine + re-grafted fb_mapper/input_forwarding userspace; kept the MICOFE lvgl/kmscube graphics suite. - meta-bsp: SO3 capsule build + rpi DTBs + verdin boot blobs. - meta-rootfs: fb_mapper/input_forwarding systemd services + mount overlays; enabled BR2_PACKAGE_JSONCPP/LIBHTTPSERVER (EMISO REST deps) in buildroot. Build files adopted from Infrabase (EDGEMTech) carry a MICOFE/REDS HEIG-VD adaptation copyright line alongside the original. Validated: `bitbake -p` parses cleanly (20 recipes); `build.sh -x so3` and `-x avz` build OK.
The base linux patch dir (recipes-linux/linux/files/0001-linux-6.12-r0)
carried three patch files not referenced by its patches.inc — leftovers
from upstream so3: 0021-Makefile.patch, 0022-virt64.dts.patch,
0023-virt64_guest.dts.patch (duplicates of 0005/0002/0004).
With virt64_soo_defconfig the soo bbappend adds its own files dir to
FILESPATH, but the base dir is searched first. The soo set legitimately
ships file://0021-Makefile.patch (soo/drivers/vdummyback/Makefile); the
orphan base 0021-Makefile.patch shadowed it, re-adding the virt64.dtb
lines already applied by 0005-Makefile.patch -> do_patch aborts with
"Reversed (or previously applied) patch detected".
Removing the dead orphans lets do_patch resolve the soo patches correctly.
Verified: build.sh -x linux builds the agency kernel (virt64_soo_defconfig)
end-to-end (Image + virt64/virt64_guest dtbs).
Also gitignore build-attached/generated paths that were not yet covered
(linux/usr/{include/core,include/soo,src/graphic,src/soo,src/lvgl} and
filesystem/u-boot.bin) so they are not accidentally committed.
Align bsp-linux with the so3/edgem1 two-ITB principle: one ITB for AVZ,
one for the Linux agency (loaded together by U-Boot's e1c-boot, AVZ FIT
in x0, agency guest in x1). Previously micofe bundled AVZ + Linux agency
into a single virt64_avz.itb, which did not match the AVZ deploy path
(which stages avz_itb + a separate guest_itb) and broke deploy.
- linux/target/virt64_avz.its: now AVZ-only (avz + avz_dt), mirroring
so3's virt64_avz.its.
- linux/target/virt64_linux_guest.its: new — the Linux agency guest
(Image + fdt + initrd), modelled on so3's virt64_so3_guest.its.
- bsp-linux do_itb: mirror bsp-so3 — build ${IB_TARGET_ITS}.itb (AVZ)
then the derived guest ITB. The guest kind is IB_AVZ_GUEST
("linux_guest" for bsp-linux; bsp-so3 keeps the "so3_guest" default).
Strip _avz via a shell variable (bitbake does not pass ${VAR%_avz}
through to the shell).
- bsp_arm_common.inc __deploy_arm_common: derive the guest ITB from
IB_AVZ_GUEST instead of the hardcoded _so3_guest, so the same deploy
serves both the SO3 guest (bsp-so3) and the Linux agency (bsp-linux).
- uEnv_virt64_avz.txt for bsp-linux: e1c-boot loads virt64_avz.itb +
virt64_guest.itb (the deploy stages the guest under the generic
<plat>_guest.itb name).
Verified: bsp-linux do_itb builds both virt64_avz.itb (AVZ-only) and
virt64_linux_guest.itb (Linux agency).
…name) Two fixes found while bringing up the virt64 agency 2-ITB boot end to end: - scripts/st.sh: enable QEMU EL2 (virtualization=on) when the *linux* ITS is an _avz target, not only the so3 ITS. micofe boots the Linux agency on AVZ (IB_TARGET_ITS:linux:virt64=virt64_avz) while the so3 ITS is virt64_capsule, so the old so3-only check left EL2 disabled and AVZ faulted. - linux/target/virt64_linux_guest.its: the guest configuration node must be named "capsule" — U-Boot's e1c-boot looks it up by that fixed name (cmd/e1c_boot.c: e1c_load_fit(e1c_itb, "capsule", ...)). Also switched the in-node comments to /* */ (DTC rejects '#'). Verified end to end: build.sh -a + deploy.sh -a + st.sh boots AVZ -> Linux agency (vbus/vbstore up, SO3-capsule backend ready) to a shell.
The wholesale-adopted so3 do_prepare_initrd uses the full-initramfs model: it copies the ~96 MB rootfs.cpio over the committed 6 MB REDS minimal ramdisk (initrd.cpio) and gzips it. micofe instead uses a 2-stage rootfs — the small REDS ramdisk (bundled in the guest ITS) switch_root's to the full agency rootfs on /dev/vda2 (p2), deployed by rootfs-linux. The overwrite ballooned the guest ITB to 145 MB (overflowing the p1 FAT boot partition) and booted the wrong rootfs. - bsp-linux: do_prepare_initrd[noexec]="1" — keep the committed REDS ramdisk as initrd.cpio (guest ITB back to ~50 MB, fits p1). The agency rootfs already lands on vda2 via rootfs-linux:do_deploy. - rebrand the agency from the EDGE-M1 / EDGEMTech leftovers to MICOFE: rootfs_overlay/etc/profile banner (ANSI-shadow MICOFE + "Welcome to MICOFE" / "REDS HEIG-VD"), buildroot defconfig BR2_TARGET_GENERIC_HOSTNAME="micofe", BR2_TARGET_GENERIC_ISSUE="MICOFE". Verified: st.sh boots AVZ (REDS/HEIG-VD banner) -> Linux agency -> vbus/vbstore SOO backend (vuart/vlogs/soo-me) -> agency login on vda2.
…ng, blue banner, boot logs - meta-usr (soo): the fb_mapper / input_forwarding userspace apps shipped as sources (src/soo/fb_mapper.c, input_forwarding.c) but were neither compiled nor installed, so the framebuffer/input forwarders never reached the agency rootfs (only their .service units did). Add add_executable() for both in the soo CMakeLists patch (0016) and install them via the soo usr-linux bbappend. Verified: both build (aarch64 ELF) and stage in build/deploy/root alongside emiso_engine, injector, melist, save/restore/shutdownme. - meta-rootfs: agency /etc/profile MICOFE banner recoloured orange -> blue gradient. - meta-bsp: uEnv_virt64_avz.txt sets bootargs="console=ttyAMA0 loglevel=8" (e1c-boot propagates it to the agency /chosen) so the boot log is visible on the serial console.
usr-linux:do_deploy copied build/deploy/* into the rootfs partition with a
plain unprivileged os.system("cp -r ...") whose return code was ignored.
Since the rootfs is extracted via sudo (cpio -id), /root is owned by root
(0700); with bitbake now running unprivileged the cp was denied and the
copy silently dropped — so NONE of the soo agency apps (emiso_engine,
fb_mapper, input_forwarding, injector, melist, save/restore/shutdownme)
ever reached the agency /root.
Use utils_sudo(..., shell=True, check=True): run the copy as root (matching
the sudo'd rootfs extraction) and fail loudly if it errors. Verified by
loop-mounting the deployed image: /root was empty before, has all 8 apps
after a root copy.
Empty IB_BOOT_CHAIN is the valid bare-U-Boot mode (treated as 'uboot' in __do_platform_boot_chain), but the deploy log printed 'chain=?' because the empty string is falsy. Label it 'uboot (bare)' so the log no longer reads like a misconfiguration.
Bump SRCREV from the 255 migration branch (60f6da75c) to the v6.2.0 release commit (c6001712), and document it via IB_SO3_TAG="v6.2.0".
Adopt the v6.2.0 versions of the 24 shared SOO patches on both the virt64 (0001-linux-6.12-r0) and rpi4 (-rpi4-r0) sets: the ME->S3C rename, the removal of the migration vestiges and the RT-agency subdomain, and the vuart add_console() sizeof fix (kzalloc of sizeof(struct vdev_console), not the shadowing pointer parameter). Preserve and S3C-rename the MICOFE-only vfbdev/vinput backend drivers (me_cons_send_input -> s3c_cons_send_input).
Promote the MICOFE-specific SOO userspace apps (fb_mapper,
input_forwarding, emiso_engine, injector, save/restore/melist/shutdown)
plus their headers to committed sources under linux/usr/{src,include},
dropping the 51-patch materialization model. src/CMakeLists.txt now
carries add_subdirectory(soo); the lvgl CMakeLists patch context is
updated accordingly. Rename ME->S3C (and me->s3c, /soo/me->/soo/s3c,
Mobile Entity->SO3 Capsule) across the apps and their in-tree headers
to match the v6.2.0 kernel uapi (ioctl numbers unchanged).
Since SO3 v6.2.0 the fetched so3/usr no longer ships a lib/lvgl subdir (LVGL is fetched separately), so retrieve_usr_dir does not create it and the copy failed with 'No such file or directory'. os.makedirs it first.
SO3 v6.2.0 moved the ITS out of the fetched so3/target tree into layer templates. Ship virt64_capsule.its as a template under the bsp-capsules layer and render it (sed-expand IB_SO3_PATH/IB_ROOTFS_PATH to absolute paths, mirroring so3's bsp_render_its) into IB_ITB_PATH before mkimage. Define IB_SO3_PATH in the recipe (it does not inherit so3).
build.sh/deploy.sh switch from the -a/-x 2-mode to so3's positional CLI (build.sh <recipe>, -x optional, -c clean). Adopt the v6.2.0 socle scripts (bblayers/mount/umount/setup_*/sudo_session/st.sh/...) plus initrd_pack.sh and check-format.sh, keeping the MICOFE double-attribution header. env.sh drops the stale meta-torizon from IB_AUX_LAYERS.
The soo core driver registers char major 126 but does not create the node; the agency boots SysVinit (no systemd/udev) so the systemd soo.service never runs. Create /dev/soo/core at boot for the capsule management apps (injector, melist, ...).
…boot
Align both layers wholesale on v6.2.0: shared do_render_its in
bsp.bbclass renders layer ITS templates (recipes-bsp/{linux,so3}/files/
its) into the gitignored <ctx>/images, replacing the committed
linux/target ITS and the local bsp-capsules render added earlier;
bsp-capsules do_deploy now escalates the p2 copy (utils_sudo, check).
IB_GUEST_SUFFIX replaces IB_AVZ_GUEST for the 2-ITB agency boot and
IB_RAMFS_SOURCE="initrd" (local.conf) replaces the do_prepare_initrd
noexec hack for the 2-stage rootfs. meta-uboot picks up the
e1c-boot -> guest-boot rename (guest_boot.c patches, uEnv callers).
Drop the stale pre-split rpi4/standalone ITS and the legacy
linux/target build scripts (recoverable from history).
Adopt v6.2.0's usr-linux bbappend and rootfs-linux recipe: baking the usr apps into rootfs.cpio is a BUILD step (deps on the rootfs generator's do_build), and rootfs-linux:do_deploy is a pure media write (no longer pulls buildroot:do_build). micofe had the halves inverted - p2 was populated before the injection and every deploy rebuilt buildroot, regenerating a pristine rootfs.cpio that erased the injected apps; /root on p2 could never catch up with the staged binaries.
…d one The in-tree commit captured src/CMakeLists.txt with the lvgl/graphic subdirectories the lvgl bbappend adds at BUILD time; the committed source must carry only examples+soo (the lvgl patch re-adds the rest).
Replace the legacy agency apps (injector, melist, saveme, restoreme, shutdownme) with the s3c-inject/s3c-list/s3c-save/s3c-restore/ s3c-shutdown sources as shipped by SO3 v6.2.0 (SOO configuration), together with its cleaned headers (migration prototypes removed, S3C comments). src/soo/CMakeLists.txt is the v6.2.0 base plus the MICOFE targets (fb_mapper, input_forwarding, emiso_engine); the install lines and the S30soo comment follow the new names.
Move the so3+avz fetch to the v6.2.1-rc tag (ed2b17916), which carries the s3c user-visible string fixes (so3#277) — re-adopt the fixed 0018-Kconfig/0077-core.c soo patches (virt64 + rpi4 sets) and re-extract the s3c-list/save/restore/shutdown app sources. Align the bare recipes-linux/linux patch set that was still on the 255 baseline: this brings the guest CMA pool 96 -> 160 MB (so3#273), required by the snapshot path (EMISO create/save do a 128 MB dma_alloc) — the EMISO 'container create' used to freeze the agency on the CMA BUG_ON.
Align the remaining rootfs overlay files on SO3 v6.2.1-rc: syslog-ng still parsed the old [ME:<id>] prefix and wrote me_<id>.log while the vlogs driver has been tagging [S3C:<id>] since the rename — per-capsule logs were silently unrouted. Also adopt the s3c wording in S30soo, the /mnt/s3c fstab mount points (rpi4/virt32) and the inittab.d keep.
Add a Build system chapter covering the SO3 v6.2.1-rc-aligned Infrabase workflow: source model (fetched so3/avz vs in-tree usr apps), positional build.sh/deploy.sh, the ITS render model, IB_RAMFS_SOURCE two-stage boot, the guest-boot two-ITB chain and the s3c-* capsule lifecycle. EMISO: S3C terminology, the real image store (/mnt/capsules/image), the SysVinit note for the systemd unit, s3c_<id>.log paths and a validated REST quick-validation walkthrough (ping/version/images, create/start, CMA requirement). Glossary: Mobile Entity marked historical, SO3 Capsule (S3C) entry added; build chapter wired into the toctree.
The June alignment adopted so3's buildroot virt64 defconfig and only re-flipped the EMISO REST deps (jsoncpp, libhttpserver), losing MICOFE's BR2_PACKAGE_SYSLOG_NG=y — without syslog-ng the [S3C:<id>] vlogs routing has no consumer and /var/log/soo/ never exists. Re-enable it (a MICOFE delta over the so3 base, like the EMISO deps). Validated at runtime: after injection /var/log/soo/s3c_2.log receives the capsule's [S3C:2] messages.
The June wholesale adoption of the so3 patch sets silently dropped the MICOFE virtualized-framebuffer kernel wiring, leaving vfbdev.c/vinput.c as dead sources: the VFBDEV_BACKEND/VINPUT_BACKEND Kconfig entries, the soo/drivers Makefile obj lines, the per-directory Makefiles, the defconfig enables, the fbdev hypercall block in the agency uapi soo.h (MAX_FBDEV_PFN, fbdev_pfns_t, AVZ_FBDEV_SET_PFNS/CHANGE_FOCUS/ GET_S3C_ADDR and the hyp-args union members) and the vfbdev sysfs entries. Restore them on both the virt64 and rpi4 sets, taking the hypercall block from the v6.2.1-rc capsule uapi (pfn_count field, GET_S3C_ADDR naming) so agency, AVZ (fbdev_gnt) and the capsule frontend share the same ABI; the sysfs bodies come from the initial import. Also restore the rpi4_64 _soo defconfig selections in local.conf. Validated: vfbdev.o/vinput.o build into the agency kernel and /sys/soo/backend/vfbdev appears at boot.
Re-wire the remaining pieces of the MICOFE virtualized framebuffer that the June wholesale had dropped, and enable the feature across the stack: - capsule DTS (micofe patch on the fetched SO3): turn the vfbdev and vinput frontends on — the MICOFE agency now provides both backends. - agency guest DTS (0001, virt64 + rpi4 sets): add the vfbdev,backend and vinput,backend nodes; without them vfbdev_init returns early and the sysfs stores are never registered (fb_mapper's writes were silently lost and the frontend crashed on a NULL vdev at first use). - console.c (0074, both sets): restore the AVZ_FBDEV_CHANGE_FOCUS hypercall in vfb_set_focus and call it from the serial focus switch, so terminal focus and screen focus track together (double CTRL-A). Validated on virt64 (QEMU needs modern virtio for the agency real framebuffer: -global virtio-mmio.force-legacy=false -device virtio-gpu-device): fb_mapper handshake, capsule injection, frontend connected, fb_test drawing inside the capsule lands in the agency /dev/fb0 memory after the focus switch (fb content goes from ~2% to ~98% populated).
The capsule pixels reach the shadow buffer through the AVZ stage-2 remap, bypassing the agency MMU, so the DRM fbdev deferred-io tracking never sees them and FBIOPAN_DISPLAY alone presents nothing. Rewrite the shadow through write() on each tick — an identity copy that marks the whole framebuffer damaged and triggers the flush toward the display pipeline; the pan/modeset path remains as a fallback. Note: under headless QEMU the virtio-gpu scanout still shows only the fbcon surface in screendumps; the memory-level path is proven (fb0 content carries the capsule drawing) and a real scanout (rpi4) reads the memory directly.
Validate and repair the rpi4_64 build environment on the v6.2.1-rc base — everything now compiles up to the two AVZ boot ITBs (rpi4_64_avz.itb + rpi4_64_linux_guest.itb): - wire rpi4_64_nomodules_soo_defconfig into the referenced patch set (it lived in an orphan 0002- directory no recipe includes — upstream so3 carries the same gap, rpi4 is not CI-built there). - repair the RPi DTS patch set, which was an inconsistent extract of the downstream kernel: include bcm2711-rpi.dtsi from the board dts (brings the v3d/vc4 pipeline), prune the status overrides and __overrides__/aliases entries that reference downstream-only labels (fb, firmwarekms, csi, smi, random, mmcnr, spi0, axiperf...), and normalize the 0132 board patch (context lines had lost their leading space; hunk counts fixed). - usr modules: rpi4_64 builds the generic modtry (the default qemu.c is x86-only and senseled needs the VSENSE backends that have never been enabled); port senseled_remove to the 6.11+ void prototype anyway. - add the rpi4_64_avz/_linux_guest ITS templates for bsp-linux (AVZ copied from the so3 set; guest mirrors virt64 at the rpi4 load addresses 0x10000000/0x15000000/0x15c00000) and select IB_TARGET_ITS:linux:rpi4_64 = rpi4_64_avz. Not booted (no board); build-level validation only.
…est, header) Pull three upstream improvements micofe had fallen behind on: - fs_arm_common/filesystem.bbclass: hardened IB_STORAGE_DEVICE guard (refuse hard-mode storage init when the device is unset/empty instead of only catching the empty string - a wrong default could overwrite a host disk) - usr.bbclass: clear the do_attach_infrabase manifest on do_clean so a clean tree re-attaches instead of aborting with 'Refusing to re-attach' - core_1.0.bb: restore the dropped EDGEMTech copyright line
… + rpi4_64) Rebuild both board initrds from the validated arm64 busybox base with the pivot logic in /init (the so3 initrd_init.sh model), tracked next to the cpio as editable source: - the pivot moves from a custom /sbin/init to /init, with a ~5s poll for the rootfs partition instead of a blind 'sleep 2' (sbin/init returns to a standard busybox applet symlink) - the dead /transient copy is dropped (no references anywhere) - rpi4_64 gets a proper arm64 initrd (was a stale armhf/glibc-2.15 ramdisk) with ROOT_DEV=/dev/mmcblk0p2 Boot-validated on virt64: 'init: switching root to /dev/vda2' then full capsule injection (S3C_state_living). rpi4_64 is build-level only.
The v6.2.1-rc tag moved to include PR #278 (rpi4_64 agency-port fixes) and PR #279 (arm64 initrd harmonization). The so3/avz source dirs are untouched between the two commits (both PRs are build-metadata only), so this bump is administrative; refetch + rebuild + boot smoke (switch_root, capsule injection living) revalidated regardless.
Wholesale re-alignment of the shared areas on the so3 v6.2.4 release, re-grafting the MICOFE deltas on top: - the SOO agency kernel patches move to the so3 soo-generic model (one generic set shared by every agency kernel + per-kernel shadow dirs); the MICOFE vfbdev/vinput backends (0128-0133) and their wiring (Kconfig, Makefiles, sysfs, uapi soo.h fbdev hypercalls, console focus, vbstore dirs) are carried in MICOFE's copy of the generic set, merged with the upstream v6.2.4 evolutions (staged hypercalls, capsuleID, SMP guest DTS) - rpi4_64: the agency board DTS and soo defconfig now live in the linux recipe set upstream; the MICOFE backend nodes and VFBDEV/VINPUT=y are re-applied there (NR_CPUS=3 SMP agency inherited); the orphan 0002-linux-6.12-rpi4-r0 directory is gone upstream and here - scripts: v6.2.4 set adopted; makeusr.sh added (bitbake-free usr rebuild); the legacy stg/stv/stvg launchers are dropped (st.sh -d covers the graphical run) - local.conf: v6.2.4 versions, IB_BUILD_QEMU knob, avz:rpi4_64 pin - overlays: micofe-branded etc/hostname + etc/issue (common and rpi4_64), mirroring the upstream per-board overlay structure - fs_verdin-imx8mp: catch up on the hardened IB_STORAGE_DEVICE guard Validated at runtime on virt64 (boot, capsule injection living, EMISO REST), with the whole chain built inside the build container.
Containerized build environment on the pos_sol/edgem1 model: docker/build-env (environment only — both Arm 64-bit toolchains including the bare-metal aarch64-none-elf that AVZ/SO3 need, host packages from packages.txt, blanket sudo rule) driven by scripts/dbuild.sh. The repository stays on the host, bind-mounted at its own absolute path, and the container runs as the calling host user, so host and container builds are interchangeable. The full v6.2.4 chain (bsp-linux, bsp-capsules, deploys) was built and deployed through the container as validation. Note: caller environment variables are not forwarded — pass them through the command, e.g. 'dbuild.sh env IB_FORCE_ATTACH=1 build.sh bsp-linux'.
Fold the v6.2.4 usr changes into the committed linux/usr tree: the s3c tools gain the upstream empty-slot guards (s3c-save/s3c-shutdown no longer act on a vacant slot — the agency-side half of the AVZ empty-slot robustness fix) and s3c-inject initializes capsuleID (real IDs come from EMISO); copyright e-mails follow the upstream heig-vd.ch alignment. The hello install path in usr-linux is fixed (src/examples, not the stale src/applications/examples) so the example actually ships.
Recipes renamed to _6.2.4 (PV/PF track the release), SRCREV bumped to the v6.2.4 tag commit, patch directories renamed accordingly. Both patch sets gain a version.h fallback bump to 6.2.4: the fetched trees carry no git metadata, so so3version.sh falls back to SO3_KERNEL_VERSION_FALLBACK, which the upstream release left at 6.2.3 (fixed on so3 main for the next release). AVZ and the capsule now banner 'Version 6.2.4 (arm64)' at runtime.
Pin note moves to v6.2.4; the source model describes the soo-generic patch organization and where the MICOFE backends live in it; new 'Containerized build (dbuild.sh)' section; makeusr.sh fast loop and st.sh -d mentioned.
Adopt the so3 v6.2.5 fix: musl.libc.org serves its web page but stalls on the tarball (a 256 KB range times out at 60 s, the mirror delivers it in 0.13 s), which leaves musl-cross-make unable to fetch musl-1.2.5.tar.gz. MUSL_SITE now points at the MacPorts distfiles mirror; the sha1 check musl-cross-make runs on every download keeps it honest.
Recipes and patch directories renamed to 6.2.5, SRCREV bumped to the v6.2.5 tag commit. The two version.h fallback patches are dropped: they worked around the upstream release leaving SO3_KERNEL_VERSION_FALLBACK at 6.2.3, which v6.2.5 fixes at the source. v6.2.5 is a release-plumbing fix (untracked build-materialized user-space files that made a fresh clone unbuildable, CI on the release branches, the musl mirror), so the SO3 and AVZ sources are unchanged; the bump was still revalidated end to end: rebuilt in the build container, AVZ and capsule both banner 'Version 6.2.5', capsule injection reaches S3C_state_living.
One sentence lost its object when the pos_sol original was adapted ('the
GDB stub and reachable from the host'), and the TEZI note still read as if
it were kept in step with a single sibling tree - the model now lives in
so3 itself as well.
Recipes and patch directories renamed to 6.3.0, SRCREV bumped to the v6.3.0 tag commit, and the build chapter now names that tag. v6.3.0 is the minor that brings the developer build container upstream (the model this tree already runs) plus a documentation pass, so between v6.2.5 and v6.3.0 the SO3 and AVZ sources differ by a single line - the version.h banner fallback. The bump is therefore administrative, and was revalidated end to end anyway: rebuilt in the build container, AVZ and the capsule both banner 'Version 6.3.0', capsule injection reaches S3C_state_living.
Last piece of the sibling-tree alignment: so3, edgem1, pos_sol and
infrabase all publish the verdin TEZI file set inside the tree now, and
this tree was the one still pointing at /var/www/html.
That old path meant an nginx serving the document root, a root-owned
directory outside the tree, a machine-specific absolute path in a TRACKED
local.conf, and — with a snap-packaged Docker, which cannot bind-mount
outside $HOME — no way to publish from inside the build container at all.
This tree really does use it: IB_STORAGE_MODE:verdin-imx8mp is "http", and
dbuild.sh claimed the opposite ("the MICOFE platforms use soft/hard
storage, so this is a no-op here"), which was simply wrong.
IB_HTTP_DEPLOY_PATH now defaults to ${IB_DIR}/build/deploy/tezi/${IB_PLATFORM},
already bind-mounted and owned by the calling user, so publishing needs no
privilege; the sudo rsync stays as a fallback for a document root that
really is root-owned. It sits under build/deploy/ rather than build/tmp/ so
a clean does not wipe a feed a board may be pulling from.
__do_platform_deploy also writes image_list.json next to image.json, making
the feed directory self-contained: whoever serves it can use it as-is as its
document root, and the board URL is always <root>/image_list.json.
Serving it is the new scripts/tezi-feed-serve.sh — a detached
`python3 -m http.server` on IB_HTTP_FEED_PORT (8080, unprivileged) with
--ensure/--status/--stop. deploy.sh calls --ensure so a deploy leaves a
working feed behind; dbuild.sh calls it on the HOST after the container
exits, since --rm would take a server started inside down with it. --ensure
stays quiet when nothing was published, which matters here because dbuild.sh
runs it after EVERY container command.
Per-machine deviations go in the new build/conf/site.conf, included by
bitbake.conf after local.conf and untracked — hence the .gitignore entries
for it and for build/deploy/.
dbuild.sh also gains the snap-Docker daemon probe (the snap ships a
/usr/bin/docker wrapper, so the client path is not proof) and skips feeds
that are tree-relative or left unexpanded.
Validated: bitbake parses clean (20 recipes, 0 errors), IB_HTTP_DEPLOY_PATH
and IB_HTTP_FEED_PORT expand as intended, `sh -n` on the three scripts,
python compile of __do_platform_deploy, and tezi-feed-serve.sh --status
resolves the feed path. Not hardware-tested — no Verdin here.
The MICOFE attribution headers and the micofe-build container naming are
preserved; after this the only remaining difference from the sibling trees
in scripts/ is that branding.
main and this branch each carry the same eleven documentation/README/drawio
commits under different SHAs — the merge base is the initial import — so
GitHub reported the PR as conflicting on four files (.gitignore, env.sh,
doc/source/glossary.rst, doc/source/index.rst).
On every one of them main is the OLDER side. Its only content that this
branch does not have is text this branch deliberately replaced:
* env.sh — the pre-alignment version (PATH appended rather than
prepended, no cross-tree PATH hygiene, meta-torizon in IB_AUX_LAYERS,
the IB_UNPRIVILEDGED_USER_ID/GROUP_ID variables that went away when
bitbake stopped running as root);
* .gitignore — missing everything the alignment added (site.conf, the
TEZI feed under build/deploy/, the attach manifests, linux/images);
* doc/source/emiso.rst, glossary.rst — the pre-rename "Mobile Entity"
wording, the old /root/capsule/ and me_<slotID>.log paths, and the
claim that the emiso systemd unit controls the engine (this agency
boots SysVinit, which the branch documents).
Recorded with -s ours so the merge keeps this branch's tree as is: an
ordinary merge would auto-combine the files git could reconcile textually
and quietly reintroduce that older prose.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This branch carries the migration of the MICOFE build system onto Infrabase, aligned on SO3 v6.3.0, plus the work needed to keep MICOFE's own features running on top of it. 52 commits, 730 files, +34.5k/−39k.
mainpredates all of it — including PR #1 (Docs/specialize micofe), which was merged into this branch rather than intomain.Build system
meta-so3pinningso3/avzto the release tag at each step.build.sh's six modes collapse to the positional SO3 CLI; the socle scripts follow.sudo -nagainst a session opened by the front-end scripts.bblayers.confis generated,meta-toolchainbuilds the musl toolchain (fetched from a mirror), and the ITS files are rendered from layer templates instead of living next to the outputs.bsp-linuxsplits into the AVZ + Linux-agency 2-ITB boot, withst.shdetecting EL2 and the guest config name; the bare U-Boot chain is now labelled instead of printing?.do_attach_infrabasemanifest, the shared header.dbuild.sh+docker/build-env, so the toolchain and host packages come from a pinned image and the build still runs as the host user./initmodel, for virt64 and rpi4_64.MICOFE features, preserved and restored
The alignment deliberately keeps what makes this tree MICOFE rather than SO3:
fb_mapperandinput_forwardingbuilt and installed as services, the framebuffer/input backend wiring restored, and the damage forced on each refresh tick.syslog-ngback in the agency rootfs, and the logs routed with theS3Cprefix./dev/soo/corecreated by a SysVinitS30sooscript.MErenamed toS3C, thes3c-*capsule apps taken from SO3 v6.2.0 and the legacy ones dropped, and the deploy chain fixed (they install as root — the previous failure was silent).Adapted for MICOFE — REDS Institute, HEIG-VDline.Platforms
Documentation and branding
Documentation specialised on MICOFE, the build chapter kept in step with each SO3 bump and with the container, all figures centralised into
micofe.drawio, the GitHub Pages Sphinx build fixed and linked from the README, Pages workflow actions bumped, and the Hasler Foundation logo added to the acknowledgements.Last commit: the TEZI feed (
f8111d5)The one place this tree still diverged from all its siblings (so3, edgem1, pos_sol, infrabase): the verdin TEZI file set was published to
/var/www/html. That required an nginx document root, a root-owned directory outside the tree, a machine-specific absolute path in a trackedlocal.conf, and — with a snap-packaged Docker, which cannot bind-mount outside$HOME— publishing from inside the container was impossible. This tree really does use that path (IB_STORAGE_MODE:verdin-imx8mp = "http"), whiledbuild.shclaimed the opposite.IB_HTTP_DEPLOY_PATHnow defaults inside the tree (build/deploy/tezi/<platform>),__do_platform_deploywritesimage_list.jsonnext toimage.jsonso the feed directory is self-contained, and the newscripts/tezi-feed-serve.shserves it as your user onIB_HTTP_FEED_PORT(8080).deploy.shstarts it;dbuild.shstarts it on the host after the container exits, since--rmwould take a server started inside down with it. Per-machine deviations go in the new untrackedbuild/conf/site.conf.Testing
For the branch as a whole, the validation is the one recorded in its own history and in
doc/: virt64 runtime-validated, rpi4_64 build-validated.The final commit was validated today, on this host:
bitbake -p— 20 recipes, 0 errors;IB_HTTP_DEPLOY_PATHandIB_HTTP_FEED_PORTexpand as intended.sh -nondbuild.sh,deploy.shandtezi-feed-serve.sh; Python compile of__do_platform_deploy.tezi-feed-serve.sh --statusresolves the feed path fromlocal.conf.Not covered: any Verdin hardware — no board here, so the
httpinstall path is not verified end to end. It is the same code already running in the sibling trees.A note on the merge commit
GitHub first reported this PR as conflicting:
mainand this branch each carry the same eleven documentation/README/drawio commits under different SHAs (the merge base is the initial import), so four files collided —.gitignore,env.sh,doc/source/glossary.rst,doc/source/index.rst.On all four,
mainis the older side, and its only content absent from this branch is text this branch deliberately replaced: the pre-alignmentenv.sh(PATH appended rather than prepended,meta-torizoninIB_AUX_LAYERS, theIB_UNPRIVILEDGED_*variables that went away when bitbake stopped running as root), a.gitignoremissing everything the alignment added, and the pre-rename Mobile Entity wording with the old/root/capsule/andme_<slotID>.logpaths.It is therefore merged with
-s ours: the merge is recorded, and the tree is byte-identical to the alignment commit. An ordinary merge would have auto-combined the files git could reconcile textually and quietly reintroduced that older prose.