mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-23 06:31:18 +02:00
make_universal_factory_shim: support "-m" to assign master (base) image
Some images (especially RMA) need to use stateful or other lagacy stuff from other image files. This CL adds "-m" to make_universal_factory_shim so that we can change the master image (the one for all legacy / stateful partition). BUG=chrome-os-partner:4108 TEST=./make_universal_factory_shim.sh -m factory_test.bin \ factory_install.bin factory_test.bin release_image.bin Change-Id: I6c8e096fd7ae921a4fb157c035f575a7c3b33834 Reviewed-on: http://gerrit.chromium.org/gerrit/4020 Reviewed-by: Nick Sanders <nsanders@chromium.org> Tested-by: Hung-Te Lin <hungte@chromium.org>
This commit is contained in:
parent
2f2b9031bc
commit
8d5f0e60de
@ -52,6 +52,7 @@ image_copy_partition() {
|
|||||||
local from_part="$2"
|
local from_part="$2"
|
||||||
local to_image="$3"
|
local to_image="$3"
|
||||||
local to_part="$4"
|
local to_part="$4"
|
||||||
|
local bs="$CGPT_BS"
|
||||||
|
|
||||||
local from_offset="$(image_get_partition_offset "$from_image" "$from_part")"
|
local from_offset="$(image_get_partition_offset "$from_image" "$from_part")"
|
||||||
local from_size="$(image_get_partition_size "$from_image" "$from_part")"
|
local from_size="$(image_get_partition_size "$from_image" "$from_part")"
|
||||||
@ -62,9 +63,29 @@ image_copy_partition() {
|
|||||||
die "Failed to copy partition: $from_image#$from_part -> $to_image#$to_part"
|
die "Failed to copy partition: $from_image#$from_part -> $to_image#$to_part"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# TODO(hungte) Speed up by increasing bs
|
# Seed up by increasing block size
|
||||||
dd if="$from_image" of="$to_image" bs="$CGPT_BS" conv=notrunc \
|
# TODO(hungte) improve obs calculation or change offsets
|
||||||
count=$from_size skip="$from_offset" seek="$to_offset"
|
while [ "$((from_size > 0 &&
|
||||||
|
from_size % 2 == 0 &&
|
||||||
|
from_offset % 2 == 0 &&
|
||||||
|
to_offset % 2 == 0))" = "1" ]; do
|
||||||
|
bs=$((bs * 2))
|
||||||
|
from_size=$((from_size / 2))
|
||||||
|
from_offset=$((from_offset / 2))
|
||||||
|
to_offset=$((to_offset / 2))
|
||||||
|
done
|
||||||
|
|
||||||
|
# Display progress if the partition is larger than 32M.
|
||||||
|
if [ "$((from_size * bs > 32 * 1048576))" = "1" ] && type pv >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
dd if="$from_image" bs="$bs" count=$from_size skip="$from_offset" |
|
||||||
|
pv -B "$bs" -s "$((bs * from_size))" |
|
||||||
|
dd of="$to_image" bs="$bs" count="$from_size" seek="$to_offset" \
|
||||||
|
conv=notrunc iflag=fullblock
|
||||||
|
else
|
||||||
|
dd if="$from_image" of="$to_image" bs="$bs" conv=notrunc \
|
||||||
|
count=$from_size skip="$from_offset" seek="$to_offset"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
images_get_total_size() {
|
images_get_total_size() {
|
||||||
@ -72,13 +93,16 @@ images_get_total_size() {
|
|||||||
local total="0"
|
local total="0"
|
||||||
local index
|
local index
|
||||||
|
|
||||||
|
# reference, slot_a, slot_b, slot_c.
|
||||||
|
[ "$#" = 4 ] || die "incorrect call to images_get_total_size"
|
||||||
|
|
||||||
# copy most partitions from first image
|
# copy most partitions from first image
|
||||||
total="$((total + CGPT_START_SIZE + CGPT_END_SIZE))"
|
total="$((total + CGPT_START_SIZE + CGPT_END_SIZE))"
|
||||||
for index in $STATE_PARTITION $LEGACY_PARTITIONS; do
|
for index in $STATE_PARTITION $LEGACY_PARTITIONS; do
|
||||||
total="$((total + $(image_get_partition_size "$1" $index) ))"
|
total="$((total + $(image_get_partition_size "$1" $index) ))"
|
||||||
done
|
done
|
||||||
|
|
||||||
for image in "$1" "$2" "$3"; do
|
for image in "$2" "$3" "$4"; do
|
||||||
if [ -z "$image" ]; then
|
if [ -z "$image" ]; then
|
||||||
total="$((total + $(image_get_partition_size "$1" $RESERVED_PARTITION)))"
|
total="$((total + $(image_get_partition_size "$1" $RESERVED_PARTITION)))"
|
||||||
total="$((total + $(image_get_partition_size "$1" $RESERVED_PARTITION)))"
|
total="$((total + $(image_get_partition_size "$1" $RESERVED_PARTITION)))"
|
||||||
@ -115,35 +139,53 @@ image_append_partition() {
|
|||||||
|
|
||||||
main() {
|
main() {
|
||||||
local force=""
|
local force=""
|
||||||
if [ "$1" = "-f" ]; then
|
local image=""
|
||||||
shift
|
local output=""
|
||||||
force="True"
|
local main_source=""
|
||||||
fi
|
local index=""
|
||||||
|
local slots="0"
|
||||||
|
|
||||||
|
while [ "$#" -gt 1 ]; do
|
||||||
|
case "$1" in
|
||||||
|
"-f" )
|
||||||
|
force="True"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
"-m" )
|
||||||
|
main_source="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
break
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
if [ "$#" -lt 2 -o "$#" -gt 4 ]; then
|
if [ "$#" -lt 2 -o "$#" -gt 4 ]; then
|
||||||
echo "Usage: $SCRIPT [-f] output shim_image_1 [shim_2 [shim_3]]"
|
echo "Usage: $SCRIPT [-m master] [-f] output shim_image_1 [shim_2 [shim_3]]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local image=""
|
if [ -z "$main_source" ]; then
|
||||||
local output="$1"
|
main_source="$2"
|
||||||
local main_source="$2"
|
fi
|
||||||
local index=""
|
output="$1"
|
||||||
local slots="0"
|
|
||||||
shift
|
shift
|
||||||
|
|
||||||
if [ -f "$output" -a -z "$force" ]; then
|
if [ -f "$output" -a -z "$force" ]; then
|
||||||
die "Output file $output already exists. To overwrite the file, add -f."
|
die "Output file $output already exists. To overwrite the file, add -f."
|
||||||
fi
|
fi
|
||||||
for image in "$@"; do
|
for image in "$main_source" "$@"; do
|
||||||
if [ ! -f "$image" ]; then
|
if [ ! -f "$image" ]; then
|
||||||
die "Cannot find input file $image."
|
die "Cannot find input file $image."
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# build output
|
# build output
|
||||||
local total_size="$(images_get_total_size "$@")"
|
local total_size="$(images_get_total_size "$main_source" "$@")"
|
||||||
# echo "Total size from [$@]: $total_size"
|
# echo "Total size from [$@]: $total_size"
|
||||||
truncate "$output" -s "$((total_size * CGPT_BS))"
|
truncate -s "0" "$output" # starting with a new file is much faster.
|
||||||
|
truncate -s "$((total_size * CGPT_BS))" "$output"
|
||||||
cgpt create "$output"
|
cgpt create "$output"
|
||||||
cgpt boot -p "$output"
|
cgpt boot -p "$output"
|
||||||
|
|
||||||
@ -153,7 +195,7 @@ main() {
|
|||||||
local rootfs_part=3
|
local rootfs_part=3
|
||||||
for image in "$1" "$2" "$3"; do
|
for image in "$1" "$2" "$3"; do
|
||||||
if [ -z "$image" ]; then
|
if [ -z "$image" ]; then
|
||||||
image="$1"
|
image="$main_source"
|
||||||
kpart="$RESERVED_PARTITION"
|
kpart="$RESERVED_PARTITION"
|
||||||
rootfs_part="$RESERVED_PARTITION"
|
rootfs_part="$RESERVED_PARTITION"
|
||||||
fi
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user