mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-22 14:11:07 +02:00
make_factory_package: support using firmware updater from release rootfs
For most use case, we want to use the firmware updater from release image rootfs. It'd be more convenient if make_factory_package extracts updater from release image by default. BUG=chromium-os:21512 TEST=./make_factory_package --release RELEASE --factory FACTORY --hwid none # success, seeing "firmware: XXXX" in output ./make_factory_package --release RELEASE --factory FACTORY --hwid none --firmware none # success, not seeing firmware in mini-omaha configuration ./make_factory_package --release RELEASE --factory FACTORY --hwid none --firmware FIRMWARE # success, seeing "firmware: XXXX" in mini-omaha configuration ./make_factory_package --release RELEASE --factory FACTORY --hwid none \ --diskimg ssd.img # success, no firmware messages ./make_factory_package --release RELEASE --factory FACTORY --hwid none \ --diskimg ssd.img --firmware FIRMWARE # failure as expected - firmware is not supported in --diskimg. Change-Id: Ic368031a8a5ece89e3e7fd56e2ee4fd1143a67a7 Reviewed-on: https://gerrit.chromium.org/gerrit/10561 Tested-by: Hung-Te Lin <hungte@chromium.org> Reviewed-by: Nick Sanders <nsanders@chromium.org> Commit-Ready: Hung-Te Lin <hungte@chromium.org>
This commit is contained in:
parent
d1b808a6ae
commit
e7c2d1c82b
@ -199,6 +199,7 @@ image_mount_partition() {
|
|||||||
local part_num="$2"
|
local part_num="$2"
|
||||||
local mount_point="$3"
|
local mount_point="$3"
|
||||||
local mount_opt="$4"
|
local mount_opt="$4"
|
||||||
|
local mount_ext="$5"
|
||||||
local offset="$(image_part_offset "$file" "$part_num")" ||
|
local offset="$(image_part_offset "$file" "$part_num")" ||
|
||||||
image_die "failed to find partition #$part_num from: $file"
|
image_die "failed to find partition #$part_num from: $file"
|
||||||
local size="$(image_part_size "$file" "$part_num")" ||
|
local size="$(image_part_size "$file" "$part_num")" ||
|
||||||
@ -211,6 +212,7 @@ image_mount_partition() {
|
|||||||
|
|
||||||
sudo mount \
|
sudo mount \
|
||||||
-o "loop,offset=$((offset * 512)),sizelimit=$((size * 512)),$mount_opt" \
|
-o "loop,offset=$((offset * 512)),sizelimit=$((size * 512)),$mount_opt" \
|
||||||
|
$mount_ext \
|
||||||
"$file" \
|
"$file" \
|
||||||
"$mount_point"
|
"$mount_point"
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ DEFINE_string factory "" \
|
|||||||
"Directory and file containing factory image: /path/chromiumos_test_image.bin"
|
"Directory and file containing factory image: /path/chromiumos_test_image.bin"
|
||||||
DEFINE_string firmware_updater "" \
|
DEFINE_string firmware_updater "" \
|
||||||
"Firmware updater (shellball) into the server configuration,"\
|
"Firmware updater (shellball) into the server configuration,"\
|
||||||
|
" or leave empty (default) for the updater in release image (--release), "\
|
||||||
" or '$FLAGS_NONE' to prevent running firmware updater."
|
" or '$FLAGS_NONE' to prevent running firmware updater."
|
||||||
DEFINE_string hwid_updater "" \
|
DEFINE_string hwid_updater "" \
|
||||||
"The component list updater for HWID validation,"\
|
"The component list updater for HWID validation,"\
|
||||||
@ -75,6 +76,9 @@ USAGE: $0 [flags] args
|
|||||||
Note environment variables with prefix MFP_ are for reserved for internal use.
|
Note environment variables with prefix MFP_ are for reserved for internal use.
|
||||||
"
|
"
|
||||||
|
|
||||||
|
# Internal variables
|
||||||
|
ENABLE_FIRMWARE_UPDATER=$FLAGS_TRUE
|
||||||
|
|
||||||
# Parse command line
|
# Parse command line
|
||||||
FLAGS "$@" || exit 1
|
FLAGS "$@" || exit 1
|
||||||
ORIGINAL_PARAMS="$@"
|
ORIGINAL_PARAMS="$@"
|
||||||
@ -137,6 +141,22 @@ check_parameters() {
|
|||||||
check_file_param FLAGS_release ""
|
check_file_param FLAGS_release ""
|
||||||
check_file_param FLAGS_factory ""
|
check_file_param FLAGS_factory ""
|
||||||
|
|
||||||
|
# Pre-parse parameter default values
|
||||||
|
case "${FLAGS_firmware_updater}" in
|
||||||
|
$FLAGS_NONE )
|
||||||
|
ENABLE_FIRMWARE_UPDATER=$FLAGS_FALSE
|
||||||
|
;;
|
||||||
|
"" )
|
||||||
|
# Empty value means "enable updater from rootfs" for all modes except
|
||||||
|
# --diskimg mode.
|
||||||
|
if [ -n "${FLAGS_diskimg}" ]; then
|
||||||
|
ENABLE_FIRMWARE_UPDATER=$FLAGS_FALSE
|
||||||
|
else
|
||||||
|
FLAGS_firmware_updater=$FLAGS_NONE
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# All remaining parameters must be checked:
|
# All remaining parameters must be checked:
|
||||||
# install_shim, firmware, hwid_updater, complete_script.
|
# install_shim, firmware, hwid_updater, complete_script.
|
||||||
|
|
||||||
@ -259,6 +279,32 @@ prepare_release_image() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Prepares firmware updater from specified file source or release rootfs.
|
||||||
|
prepare_firmware_updater() {
|
||||||
|
local image="$(readlink -f "$1")"
|
||||||
|
if [ -f "$FLAGS_firmware_updater" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local fwupdater="$(mktemp --tmpdir)"
|
||||||
|
local temp_mount="$(mktemp -d --tmpdir)"
|
||||||
|
local updater_path="/usr/sbin/chromeos-firmwareupdate"
|
||||||
|
local src_file="$temp_mount$updater_path"
|
||||||
|
image_add_temp "$fwupdater"
|
||||||
|
image_add_temp "$temp_mount"
|
||||||
|
|
||||||
|
# 'ext2' is required to prevent accidentally modifying image
|
||||||
|
image_mount_partition "$image" "3" "$temp_mount" "ro" "-t ext2" ||
|
||||||
|
die "Cannot mount partition #3 (rootfs) in release image: $image"
|
||||||
|
[ -f "$src_file" ] ||
|
||||||
|
die "No firmware updater in release image: $image"
|
||||||
|
cp "$src_file" "$fwupdater" ||
|
||||||
|
die "Failed to copy firmware updater from release image $image."
|
||||||
|
image_umount_partition "$temp_mount"
|
||||||
|
info "Prepared firmware updater from release image: $image:3#$updater_path"
|
||||||
|
FLAGS_firmware_updater="$fwupdater"
|
||||||
|
}
|
||||||
|
|
||||||
prepare_img() {
|
prepare_img() {
|
||||||
local outdev="$(readlink -f "$FLAGS_diskimg")"
|
local outdev="$(readlink -f "$FLAGS_diskimg")"
|
||||||
local sectors="$FLAGS_sectors"
|
local sectors="$FLAGS_sectors"
|
||||||
@ -711,9 +757,13 @@ main() {
|
|||||||
|
|
||||||
check_parameters
|
check_parameters
|
||||||
setup_environment
|
setup_environment
|
||||||
if [ "$FLAGS_detect_release_image" = "$FLAGS_TRUE" ]; then
|
|
||||||
|
if [ "$FLAGS_detect_release_image" = $FLAGS_TRUE ]; then
|
||||||
prepare_release_image "$FLAGS_release"
|
prepare_release_image "$FLAGS_release"
|
||||||
fi
|
fi
|
||||||
|
if [ "$ENABLE_FIRMWARE_UPDATER" = $FLAGS_TRUE ]; then
|
||||||
|
prepare_firmware_updater "$FLAGS_release"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$FLAGS_usbimg" ]; then
|
if [ -n "$FLAGS_usbimg" ]; then
|
||||||
generate_usbimg
|
generate_usbimg
|
||||||
|
Loading…
x
Reference in New Issue
Block a user