On 8/26/22 16:09, Alyssa Ross wrote:
In some cases (e.g. a product built on Spectrum where updates to both firmware and OS are delivered by the same vendor), it makes sense to include firmware in the same image as the OS. This firmware tends to live in the start of the image, after the GPT header. (The exact location varies by board.)
The 1 MiB reserved by sfdisk by default is not enough for this. The conventional value seems to be 8 MiB. On NixOS, this is configurable with the sdImage.firmwarePartitionOffset option, but this defaults to 8 MiB and I wasn't able to find any examples in searches on DuckDuckGo and GitHub of anybody using any other value, so it looks like 8 MiB is broadly acceptable.
Signed-off-by: Alyssa Ross <hi@alyssa.is> ---
Thanks, this is an enabler for cross-compilation build configs for imx8 boards. Works as intended to enable the image building using https://github.com/tiiuae/spectrum-config-imx8 for imx8qxp but requires more patch(es) to Spectrum img/live/Makefile (pending). Testing Without: 1527808 bytes (1.5 MB, 1.5 MiB) copied, 0.00650894 s, 235 MB/s init: sector size too big Cannot initialize '::' Bad target ::/ With: 1527808 bytes (1.5 MB, 1.5 MiB) copied, 0.00981576 s, 156 MB/s /nix/store/609b8cnks906dkpcq8hn6v0b1farbis2-spectrum-live-imx8qxp.img-0.1 Tested-by: Ville Ilvonen <ville.ilvonen@unikie.com> -Ville
Yuriy, if you'd like to test this patch, here's some documentation about how to do that. :)
https://spectrum-os.org/doc/testing-patches.html
scripts/make-gpt.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/scripts/make-gpt.sh b/scripts/make-gpt.sh index 56076d3..55f38d6 100755 --- a/scripts/make-gpt.sh +++ b/scripts/make-gpt.sh @@ -1,12 +1,13 @@ #!/bin/sh -eu # # SPDX-FileCopyrightText: 2021-2022 Alyssa Ross <hi@alyssa.is> +# SPDX-FileCopyrightText: 2022 Unikie # SPDX-License-Identifier: EUPL-1.2+ # # usage: make-gpt.sh GPT_PATH PATH:PARTTYPE[:PARTUUID]...
ONE_MiB=1048576 -TWO_MiB=2097152 +NINE_MiB=9437184
# Prints the number of 1MiB blocks required to store the file named # $1. We use 1MiB blocks because that's what sfdisk uses for @@ -41,8 +42,9 @@ shift nl=$'\n' table="label: gpt"
-# Keep 1MiB free at the start, and 1MiB free at the end. -gptBytes=$TWO_MiB +# Keep 8MiB free at the start (to provide space for firmware if +# required), and 1MiB free at the end. +gptBytes=$NINE_MiB for partition; do sizeMiB="$(sizeMiB "$(partitionPath "$partition")")" table="$table${nl}size=${sizeMiB}MiB,$(awk -f "$scriptsDir/sfdisk-field.awk" -v partition="$partition")" @@ -52,6 +54,7 @@ done rm -f "$out" truncate -s "$gptBytes" "$out" sfdisk "$out" <<EOF +first-lba: 16384 $table EOF