This adds the support to automatically create a minimal GPT table. gpt-add: A script to add a minimal GPT table compatible to i.MX3/5/6/7 devices. The initial GPT only contains a barebox-environment partition. The script checks for the bootsource to decide the GPT location.
gpt-rm: A script to remove the GPT header and the protective MBR. The script checks for the bootsource to decide which GPT should be scrubbed. bbenv-gpt: An initscript which checks for a barebox-environment partition if booted from MMC. If no parition was found the script triggers the gpt-add script. Signed-off-by: Marco Felsch <m.fel...@pengutronix.de> --- v2: - new defaultenv/defaultenv-2-base/bin/gpt-add | 40 +++++++++++++++++++++ defaultenv/defaultenv-2-base/bin/gpt-rm | 10 ++++++ defaultenv/defaultenv-2-base/init/bbenv-gpt | 16 +++++++++ 3 files changed, 66 insertions(+) create mode 100644 defaultenv/defaultenv-2-base/bin/gpt-add create mode 100644 defaultenv/defaultenv-2-base/bin/gpt-rm create mode 100644 defaultenv/defaultenv-2-base/init/bbenv-gpt diff --git a/defaultenv/defaultenv-2-base/bin/gpt-add b/defaultenv/defaultenv-2-base/bin/gpt-add new file mode 100644 index 000000000000..fa61b1929e20 --- /dev/null +++ b/defaultenv/defaultenv-2-base/bin/gpt-add @@ -0,0 +1,40 @@ +#!/bin/sh + +bootdev="/dev/${bootsource}${bootsource_instance}" +yesno="" + +if [ ${bootsource} != "mmc" ]; then + exit 0 +fi + +# If successful, there is already a GPT or MBR header +# TODO: Add hush redirect support to avoid user confusion +if parted ${bootdev} print; then + exit 0 +fi + +readline "Create an initial GPT for barebox? [y|N]: " yesno + +# No per default +if [ "${yesno}" == "" ]; then + exit 0 +elif [ "${yesno}" == "n" ]; then + exit 0 +fi + +# Check for other user input than 'y' +if [ "${yesno}" != "y" ]; then + echo "Unkown value, only 'y' and 'n' are supported" + exit 1 +fi + +# Make a default GPT table, with the GPT partition entrie array starting at 2MiB +# to have enough space for barebox at the beginning and to overcome legacy +# platforms like i.MX3/5/6. +parted ${bootdev} mklabel gpt 2MiB || gpt-rm + +# Add a barebox environment partition with the size of 1MiB which should be +# enough for development. +parted ${bootdev} mkpart barebox-environment bbenv 3MiB 4MiB || gpt-rm + +parted ${bootdev} refresh diff --git a/defaultenv/defaultenv-2-base/bin/gpt-rm b/defaultenv/defaultenv-2-base/bin/gpt-rm new file mode 100644 index 000000000000..e45c79395504 --- /dev/null +++ b/defaultenv/defaultenv-2-base/bin/gpt-rm @@ -0,0 +1,10 @@ +#!/bin/sh + +bootdev="/dev/${bootsource}${bootsource_instance}" + +if [ ${bootsource} != "mmc" ]; then + exit 0 +fi + +# Remove protective MBR and GPT from boot device +memset -d ${bootdev} 0x100 0x0 0x300 diff --git a/defaultenv/defaultenv-2-base/init/bbenv-gpt b/defaultenv/defaultenv-2-base/init/bbenv-gpt new file mode 100644 index 000000000000..6756cac9885e --- /dev/null +++ b/defaultenv/defaultenv-2-base/init/bbenv-gpt @@ -0,0 +1,16 @@ +#!/bin/sh + +bbenvpart="/dev/${bootsource}${bootsource_instance}.barebox-environment" + +if [ ${bootsource} != "mmc" ]; then + exit 0 +fi + +# TODO: +# Add command support to search for a given GPT PartUUID on a block device to +# be partition name independent. +if [ -e ${bbenvpart} ]; then + exit 0 +fi + +gpt-add -- 2.39.5