blob: d28216b7afd2ae2a6dca795aebaf5350ac3885c3 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This utility uses cbootimage to signs a bootstub so that the Tegra boot ROM
# will load and run it.
# Include common CrOS utilities.
. "/usr/lib/crosutils/common.sh"
# Command line options
DEFINE_string bct "" "DDR memory timing BCT file."
DEFINE_string flash "" "Boot flash parameter file."
DEFINE_string bootstub "" "Bootstub firmware image to sign."
DEFINE_string output "bootstub.bin" "Signed bootstub + BCT output file."
DEFINE_string text_base "0xe08000" "Load address and entry point for bootstub."
DEFINE_string config "" "Directory for temporary configuration files."
# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
# Die on errors.
set -e
CROS_LOG_PREFIX="cros_sign_bootstub"
function construct_config() {
local flash_file="$1"
local bct_file="$2"
local bootstub="$3"
local text_base="$4"
#
# The cbootimage config file format is not yet documented. Below is
# a minimal config file that merges a BCT file and bootloader; in
# this case our stub U-Boot image. We do not use the Version, but it
# needs to be set.
#
# Currently a bug in cbootimage prevents us from setting Redundancy to
# 0. Redundancy controls how many instances of the BCT should be
# written to the signed image. A value of 1 causes two instances to
# be written.
#
# The BootLoader parameter specifies the bootloader image to use. It
# also specifies the load address for the bootloader in RAM and the
# entry point of the resulting image. For U-Boot these are the same
# value (TEXT_BASE).
#
echo "Bctfile = ${bct_file};"
echo "Version = 1;"
echo "Redundancy = 1;"
# TODO(robotboy): This needs to be added back in to support selecting the
# boot flash device. With this commented out we can only boot from the
# boot device that the source BCT file was created for. This is commented
# out because it causes the resulting image to not boot if it is added.
# TRACKER: http://code.google.com/p/chromium-os/issues/detail?id=12712
#
# echo ""
# cat ${flash_file}
# echo ""
echo "BootLoader = ${bootstub},${text_base},${text_base},Complete;"
}
###############################################################################
check_for_file "boot flash device config" "..." "${FLAGS_flash}"
check_for_file "BCT" "........................" "${FLAGS_bct}"
check_for_file "bootstub image" "............." "${FLAGS_bootstub}"
check_for_tool "cbootimage" "cbootimage"
if [ -z "${FLAGS_config}" ]; then
config=$(mktemp -d)
trap "rm -rf ${config}" EXIT
else
mkdir -p "${FLAGS_config}"
config=${FLAGS_config}
fi
construct_config \
"${FLAGS_flash}" \
"${FLAGS_bct}" \
"${FLAGS_bootstub}" \
"${FLAGS_text_base}" > "${config}/boot.cfg"
cbootimage "${config}/boot.cfg" "${FLAGS_output}"