You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 9d29b0f
Browse filesBrowse the repository at this point in the historyBrowse files
@@ -9202,6 +9203,74 @@ Attempting boot from partition A
9202
9203
```
9203
9204
At this point, the kernel image in partition "A" is verified and staged and you should be seeing the log messages of your OS booting.
9204
9205
9206
+
## NAI 68INT6 (Intel Tiger Lake)
9207
+
9208
+
wolfBoot target `nai_68int6` for the North Atlantic Industries 68INT6, a 3U OpenVPX SOSA-aligned single board computer (Intel Core i7-1185GRE, Tiger Lake UP3), using the Intel Firmware Support Package. It shares the Intel FSP support described [above](#intel-x86_64-with-intel-fsp-support) and the Tiger Lake path with the Kontron target. wolfBoot boots a signed 64-bit Linux from the SATA disk with A/B update, measured boot and TPM anti-rollback, verified on a Rev D5 bench board. This board's memory is trained by the FSP from its own BIOS (the public Tiger Lake FSP does not train it), so the FSP set is extracted from a 68INT6 BIOS image rather than downloaded.
9209
+
9210
+
|||
9211
+
|---|---|
9212
+
| CPU | i7-1185GRE (`06-8C-01`), Tiger Lake UP3, PCH-LP |
9213
+
| Memory | 2 x 32 GB DDR4-3200 SODIMM, non-ECC |
9214
+
| BIOS flash | Rev C/D5: 2 x W25R256JV (32 MB), jumper-selected (JP36). Next revision: one 64 MB device |
9215
+
| TPM | SLB9670 (SHA-1/256), or SLB9672 which adds a SHA-384 bank |
`nai_extract_fsp.sh` lifts the FSP-T/M/S and microcode from a real 68INT6 BIOS image; without it the build links against the public FSP, which compiles but will not train this board's memory. The `-n` stitch replaces only the top 6 MB (`BOOTLOADER_PARTITION_SIZE`) of the 12 MB BIOS region and preserves the descriptor and CSME byte for byte. There is no recovery region on Rev C (recovery is the second flash device), so use `-n`, not `-m`. The result is `final_image.bin`.
9231
+
9232
+
### Integrity algorithms
9233
+
9234
+
ECC P-384 and SHA-384 are chosen to match the algorithms Intel Boot Guard uses to verify the Initial Boot Block, so the wolfBoot chain carries the same strength Boot Guard establishes at reset.
9235
+
9236
+
| Layer | Algorithm |
9237
+
|---|---|
9238
+
| Image signature | ECC P-384 (`SIGN=ECC384`) |
9239
+
| Image digest | SHA-384 (`HASH=SHA384`) |
9240
+
| Measured boot PCR | SHA-256 (the SLB9670 has only SHA-1 and SHA-256 banks) |
9241
+
9242
+
`wolfBoot_image_measure()` re-hashes the authenticated digest with the PCR bank algorithm, so one image serves either TPM. `MEASURED_PCR_ALG=SHA384` needs an SLB9672 with its SHA-384 bank allocated (`TPM2_PCR_Allocate` under platform auth, a provisioning step); with an SLB9670, use SHA-256.
9243
+
9244
+
### Configuration
9245
+
9246
+
Beyond the flash map and console, the notable options in [config/examples/nai_68int6.config](../config/examples/nai_68int6.config):
9247
+
9248
+
| Option | Meaning |
9249
+
|---|---|
9250
+
|`X86_UART_NUMBER=2`| Selects LPSS UART2 in all three FSP phases (Kontron uses 0) |
9251
+
|`ACPI=1`| Generate ACPI tables (RSDP/XSDT/FADT/MADT/MCFG and a minimal DSDT) so Linux gets the interrupt model and PCI routing |
9252
+
|`ANTI_ROLLBACK=1`| Persistent version floor plus boot audit counters in TPM NV |
9253
+
|`MEASURED_BOOT=1`, `MEASURED_PCR_OS=4`| Measure the firmware into PCR 0 and the verified OS image into PCR 4 |
9254
+
|`WOLFBOOT_BOOT_DISK=0`| Boot from GPT disk partitions; the A/B indices (sda3/sda4) are set per target in `src/update_disk.c`|
9255
+
9256
+
### BIOS region lock
9257
+
9258
+
The BIOS region is not write-locked by default (`WOLFBOOT_DONT_LOCK_BIOS=1`): `hal_flash_lock()` is a stub, so the flash stays writable for in-field updates. For a hardened deployment, call `tgl_lock_bios_region()` (`hal/nai_68int6.c`) from a `hal_flash_protect()` override; it sets the SPI Flash Protected Range 0 and FLOCKDN from the measured BIOS region bounds, read- and write-protecting it until the next platform reset.
9259
+
9260
+
### Anti-rollback
9261
+
9262
+
`ANTI_ROLLBACK=1` keeps a persistent version floor and a small set of boot audit counters in a TPM NV index, with the backend isolated in `src/boot_state_tpm.c`. The anchor is the highest version ever booted, monotonic and initialised trust-on-first-use; a validly signed but older image still boots and records a rollback audit event; the one condition that halts the boot is a version reference that cannot be trusted. `ANTI_ROLLBACK_STRICT=1` additionally halts when the backend is unreachable or an NV write fails, instead of logging and continuing.
9263
+
9264
+
It uses TPM NV rather than the flash-partition state trailer because the floor has to survive a full disk or flash reimage and be tamper-evident, which a trailer in the boot media is not. Disk boot's `DISK_BOOT_CONFIRM` still handles per-slot confirmation; this adds the persistent floor on top, and the backend can later move to a root-of-trust device without touching the policy in `src/boot_state.c`.
9265
+
9266
+
The target leaves `ALLOW_DOWNGRADE` unset, the secure default: if the higher-versioned slot fails to verify, wolfBoot does not fall back to a lower-versioned slot but halts (`Rollback to lower version not allowed`). This is deliberate - strict anti-rollback takes precedence over A/B resilience here. A deployment that instead wants a failed slot to fall back across a version decrease can build with `ALLOW_DOWNGRADE=1`, which then leaves the persistent floor in TPM NV as the only rollback guard.
9267
+
9268
+
The booted OS cannot lower the floor. wolfBoot write-locks the NV index (`TPMA_NV_WRITE_STCLEAR`) on every boot, before handoff, so it stays read-only until the next TPM reset. `wolfBoot_tpm2_deinit()` then sets the platform hierarchy auth to a random value nobody keeps, as in the TPM keystore build, so the OS cannot undefine the platform-created index and recreate it. Build with `WOLFBOOT_TPM_NO_CHG_PLAT_AUTH` to keep platform auth unchanged.
9269
+
9270
+
### Boot, programming and recovery
9271
+
9272
+
A/B boot stages a signed 64-bit `bzImage` from the two GPT boot partitions: wolfBoot boots the highest version that verifies, falls back to the other slot when it verifies and is not a downgrade (see Anti-rollback), and holds in reset if neither can be booted. Program the flash with `flashrom` from the board's own Linux, or a Dediprog SF100 on the JP4 header with the board powered off; JP36 selects which bank boots and which a programmer sees, and must only be moved unpowered. The bank the board boots is the only one software can reprogram, so a development image that never reaches an OS is recovered externally with the SF100.
9273
+
9205
9274
## Infineon PSOC Control C3
9206
9275
9207
9276
The [PSOC Control C3](https://www.infineon.com/products/microcontroller/32-bit-psoc-arm-cortex/32-bit-psoc-control-arm-cortex-m33-mcu/psoc-control-c3-main-line) family (PSC3, CAT1B) is an Arm Cortex-M33 motor-control MCU. wolfBoot runs as the first application the BootROM launches, verifies the signed firmware in the BOOT partition and jumps to it.
0 commit comments