Capabilities and their evidence
Each capability is described, with its commands and steps, on its task page (see the Overview). This table gathers the evidence in one place.
Everything below was run on Linux only. "Stand-in" means a local SSH server, a chroot or a QEMU arm64 machine playing the build host or the board. Nothing has run on Windows, against a real build server, against Wind River Linux, or on a real board.
| # | Capability | Verified (Linux) | Not verified |
|---|---|---|---|
| 1 | Work against the Linux build server over SSH | OpenSSH 9.6p1 client and sshd on localhost; the running app | Windows ssh.exe; a real server through a company proxy or jump host; macOS |
| 2 | The build directory as the project | Real layer.conf and conf files of poky, meta-freescale, meta-ti, meta-xilinx, meta-st-stm32mp, Wind River meta-lat and meta-wr-sbom | Wind River Linux installs; realistic size (40 layers, 4,000 recipes) |
| 3, 4 | BitBake recipes in the editor; Variable History | BitBake 2.8.1 (poky scarthgap) with meta-freescale | Wind River Linux; a real SSH server; Windows |
| 5 | Build history and comparing builds | Equal to buildhistory-diff on our own repositories | A real build's repository |
| 6 | Device trees | Merged tree equal to dtc 1.6.1 and 1.7.2 on the i.MX 8M Plus gateway board and NXP's imx8mp-evk.dts | A real build server; make dtbs_check |
| 7 | Image, recipe and task builds | A task run, a real do_compile failure and cancel, over a real sshd | An image build; Windows; Wind River Linux; Buildroot and PetaLinux builds |
| 8 | Targets: boards over SSH | Stand-in BusyBox boards; the running app | A real i.MX 8M Plus board; Dropbear; Windows |
| 9 | Installed SDKs and application builds | A stand-in SDK; CMake 3.28.3; clangd 18.1.3 over SSH | A real Yocto, Wind River or vendor SDK |
| 10 | devtool modify, build, finish, reset, deploy-target | poky scarthgap devtool over OpenSSH, offline | A copy to a board; devtool build of a target recipe |
| 11 | Debug on the board, attach, core dumps | gdbserver and GDB 15.1 with x86_64 stand-ins | A real board with an aarch64 SDK; a WAN |
| 12 | SBOM and CVE triage | Real cve-check output of two releases; a CVE_STATUS line read back by BitBake | A real image SBOM; Wind River LTS 24 and 25 output |
| 13 | Kernel configuration and fragments | Equal to Kconfiglib 14.1 on 17,248 symbols of linux-imx | kernel_configcheck and kernel_configme never run; no real kernel build |
| 14 | Signed update packages (RAUC, SWUpdate, Mender) | RAUC 1.11.3, SWUpdate 2023.12.1, Mender client 3.4.0 on stand-ins | A real board and reboot into the new slot; PKCS#11 signing in a build |
| 15 | Licence compliance for the release | Equal to OE-Core's oe.license on all 239 LICENSE values of poky scarthgap | A real image's manifest; Buildroot legal-info |
| 16 | Runtime tests and ptest | A real bitbake -c testimage against a stand-in board | testimage on QEMU; ptest-runner itself |
| 17 | Layers with bitbake-layers | Real BitBake 2.8.1 over a localhost sshd | Writing kas files |
| 18 | Kernel oops decoding | A Linux 6.8 arm64 kernel in QEMU 8.2.2; every report kind decoded with the real scripts | A kernel built by BitBake; a real i.MX board |
| 19 | Writing the image to a board | bmaptool 3.8.0 to a loop device; uuu 1.5.233 dry runs | A board written over USB serial download or DFU; STM32CubeProgrammer never run (kit shipped) |
| 20 | Verified boot: FIT signed with keys in an HSM | U-Boot 2024.01 tools; SoftHSM 2.6.1 through libp11 | A real kernel and U-Boot build; a real HSM; a board refusing an unsigned FIT |
| 21 | perf profiling | perf 6.8.12 against stand-ins | A real board |
| 22 | AMD PetaLinux and the AMD Yocto flow | Project probe and command lines against AMD's ZCU104 PetaLinux 2022.1 project files | No petalinux-* command ever run |
| 23 | Build configuration, machines, distributions, fragments | BitBake 2.8.1 and 2.18.0 | Wind River Linux; kas-managed local.conf |
| 24 | The board's system and boot time | A QEMU arm64 board; systemd 255 in a container | A real board's boot with firmware and loader phases |
| 25 | Partition layout with wic | poky scarthgap's wic on poky's .wks files | A real i.MX image |
| 26 | Valgrind Memcheck and Massif | Valgrind 3.22.0 against stand-ins | A real board |
| 27 | Sources and mirrors | BitBake 2.8.1 with a local HTTP mirror | Your company mirror; a check cannot prove a mirror complete |
| 28 | Root file system integrity: dm-verity, IMA, EVM | veritysetup 2.7.0; a QEMU arm64 board | meta-security and meta-integrity never fetched; a TPM |
| 29 | Kernel traces with ftrace and trace-cmd | trace-cmd 3.2 on QEMU arm64 | A real board |
| 30 | Package feeds | Real opkg 0.6.3 on a stand-in board | dnf and apt on parsers only; signed feeds |
| 31 | New recipes and upgrades with devtool | poky scarthgap's devtool and recipetool | devtool build of added recipes |
| 32 | Cppcheck (with MISRA), sparse, checkpatch.pl | Cppcheck 2.13.0 with the MISRA addon; sparse 0.6.4 on Linux 6.6.52 | A real SDK; your MISRA rule texts |
| 33 | Structural coverage of tests on the board | GCC 13.3 and 14.2 with gcov, gcovr 8.6, lcov 2.0 | A real SDK; qualified MC/DC |
| 34 | Device tree overlays | dtc and fdtoverlay 1.7.2 byte-identical to Kbuild; U-Boot v2024.04 sandbox | U-Boot on an i.MX board |
| 35 | LTTng traces | lttng 2.13 and 2.14 on QEMU arm64 | A physical board |
| 37 | The image's QEMU | runqemu of poky scarthgap with QEMU 8.2.2 and a stand-in image | A BitBake-built image; KVM |
Settings
All keys are under neuralInverse.embeddedLinux.. Credentials are never settings.
| Setting | Meaning |
|---|---|
enabled | Turns the environment on (default false) |
buildHosts | Build hosts and the build directory on each |
targets | Boards: name, host, user, port, identityFile, machine, notes |
sshPath | The OpenSSH client; empty for System32\OpenSSH\ssh.exe on Windows, then ssh on PATH |
connectTimeout | Seconds before a build host is reported unreachable |
sdkDirectories | Further folders searched for installed SDKs (/opt and the home folder are always searched) |
applications | Applications built with an SDK outside BitBake |
clangd.arguments | Extra clangd arguments for SDK applications |
companyMirrors | Company source and shared-state mirrors and allowed hosts |
perf.path, traceCmd.path, traceCmd.localPath, babeltrace2.path, babeltrace2.localPath, trace.localFolder | Analysis tools on the build host and on this computer |
coverage.toolFolders | Where gcovr, lcov and genhtml are on the build host |
targetSystemRefreshSeconds | Reads of a board's running system while its System group is shown |
analysis.cppcheckPath, analysis.checks, analysis.misra, analysis.misraRuleTexts, analysis.suppressionsFile, analysis.exclude, analysis.sparsePath | Static analysis of SDK applications and kernel drivers |
labHosts | Lab machines the boards and card readers are attached to, for writing images: name, host, user, port, identityFile, folder, notes |
imageWriting.localFolder | Where images are copied on this computer before uuu or STM32CubeProgrammer writes them |
paths.uuu, paths.stm32Programmer, paths.bmaptool | The writing tools on this computer: the executable or its folder; empty for PATH and the vendors' install folders |
Confirmations and records
- Writes to a board ask first, naming the board and every path: saves, new files, deletes, renames and pastes in a board's folder; Copy to Target; Reboot and Power Off; deploy-target; installing an update package (with the board, the package, its SHA-256 and the slots or devices written); writing an image (a device changed after confirmation is refused, and system and mounted disks are refused).
- Writes to the build ask first: a BitBake build started by an agent, devtool finish (with its dry run), a CVE_STATUS line (with the file and line), INCOMPATIBLE_LICENSE lines, FIT signing (with the key and the exact command; a PKCS#11 PIN comes from
MKIMAGE_SIGN_PINin the build account's environment, never from the Editor). - Agent tools: listing and reading are read-only; every command, build, devtool action, board write, signing and update is always confirmed.
- Records: each BitBake build writes a record to
<build directory>/.neuralinverse/builds/with MACHINE and layer revisions; the licence record exports with each required source archive's SHA-256; the Embedded Linux output channel logs sessions, commands and project reads, never credentials.
With Neural Inverse Govern, builds started as tasks and changes to Neural Inverse settings are decided by the in-app policy check. See Govern.
Testing it and reporting back
The hardware team's checks need a Windows 10 or 11 laptop without administrator rights, your Linux build server with a Wind River Linux, NXP i.MX, TI, AMD or ST build directory, and a board's debug UART.
- Check that
ssh.exeworks from a Windows terminal:ssh <you>@<build server> true(with your ProxyJump in%USERPROFILE%\.ssh\config). - Add the settings from Set up the build host and trust the workspace.
- Check that Trust Build Host Key shows the same SHA256 fingerprint as
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubon the server. - Compare the Build Directory view with
bitbake-layers show-layersandbitbake -e | grep -E '^(MACHINE|DISTRO)='on the server. - Run Select Build Target..., build with Ctrl+Shift+B, cancel during a build, and check with
ps -u $USER | grep bitbakeon the server that nothing is left. - For the serial console: Open Serial Monitor at 115200 baud on the board's debug UART; check the U-Boot prompt, the full kernel log, the login prompt, and on Windows that the COM port opens without administrator rights.
Send back the operating system and version, ssh -V, the build server's distribution, the product (Wind River Linux LTS or BSP release), the BitBake version, the results and the Embedded Linux output log.
Troubleshooting
| Problem | What to do |
|---|---|
| Nothing appears | Turn on neuralInverse.embeddedLinux.enabled and trust the workspace. |
| The status bar says the host key is not trusted | Compare the fingerprint with the server's, then run Trust Build Host Key. |
| The host is unreachable | Check the VPN and your SSH configuration; the message says what to do. connectTimeout sets the wait. |
| The key is refused and no agent runs | Run Set Build Host Key Passphrase.... |
| Builds need a buildtools environment | Set buildEnvironmentScript for the build host. |
| Opening a board's device tree takes minutes over a remote host | A known issue: one SSH session per file call. It needs a batched remote listing. |
Next: What's next.