Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 1 | # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 2 | # Distributed under the terms of the GNU General Public License v2 |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 3 | # |
| 4 | # Original Author: The Chromium OS Authors <chromium-os-dev@chromium.org> |
| 5 | # Purpose: Generate shell script containing firmware update bundle. |
| 6 | # |
| 7 | |
Hung-Te Lin | 2ef3054 | 2013-06-04 14:12:59 -0700 | [diff] [blame] | 8 | inherit cros-workon |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 9 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 10 | # @ECLASS-VARIABLE: CROS_FIRMWARE_BCS_OVERLAY |
| 11 | # @DESCRIPTION: (Optional) Name of board overlay on Binary Component Server |
| 12 | : ${CROS_FIRMWARE_BCS_OVERLAY:=${BOARD_OVERLAY##*/}} |
| 13 | |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 14 | # @ECLASS-VARIABLE: CROS_FIRMWARE_MAIN_IMAGE |
Hung-Te Lin | c8c15d9 | 2013-01-10 16:19:40 +0800 | [diff] [blame] | 15 | # @DESCRIPTION: (Optional) Location of system firmware (BIOS) image |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 16 | : ${CROS_FIRMWARE_MAIN_IMAGE:=} |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 17 | |
Hung-Te Lin | c8c15d9 | 2013-01-10 16:19:40 +0800 | [diff] [blame] | 18 | # @ECLASS-VARIABLE: CROS_FIRMWARE_MAIN_RW_IMAGE |
| 19 | # @DESCRIPTION: (Optional) Location of RW system firmware image |
| 20 | : ${CROS_FIRMWARE_MAIN_RW_IMAGE:=} |
| 21 | |
Hung-Te Lin | 716ff01 | 2014-06-07 01:24:12 +0800 | [diff] [blame] | 22 | # @ECLASS-VARIABLE: CROS_FIRMWARE_STABLE_MAIN_VERSION |
| 23 | # @DESCRIPTION: (Optional) Version name of stabled system firmware |
| 24 | : ${CROS_FIRMWARE_STABLE_MAIN_VERSION:=} |
Hung-Te Lin | aeed599 | 2013-09-27 21:28:23 +0800 | [diff] [blame] | 25 | |
Hung-Te Lin | 20c5123 | 2013-05-02 12:44:11 +0800 | [diff] [blame] | 26 | # @ECLASS-VARIABLE: CROS_FIRMWARE_BUILD_MAIN_RW_IMAGE |
| 27 | # @DESCRIPTION: (Optional) Re-sign and generate a RW system firmware image. |
| 28 | : ${CROS_FIRMWARE_BUILD_MAIN_RW_IMAGE:=} |
| 29 | |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 30 | # @ECLASS-VARIABLE: CROS_FIRMWARE_EC_IMAGE |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 31 | # @DESCRIPTION: (Optional) Location of EC firmware image |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 32 | : ${CROS_FIRMWARE_EC_IMAGE:=} |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 33 | |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 34 | # @ECLASS-VARIABLE: CROS_FIRMWARE_EC_VERSION |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 35 | # @DESCRIPTION: (Optional) Version name of EC firmware |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 36 | : ${CROS_FIRMWARE_EC_VERSION:=} |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 37 | |
Hung-Te Lin | 716ff01 | 2014-06-07 01:24:12 +0800 | [diff] [blame] | 38 | # @ECLASS-VARIABLE: CROS_FIRMWARE_STABLE_EC_VERSION |
| 39 | # @DESCRIPTION: (Optional) Version name of stabled EC firmware |
| 40 | : ${CROS_FIRMWARE_STABLE_EC_VERSION:=} |
Hung-Te Lin | aeed599 | 2013-09-27 21:28:23 +0800 | [diff] [blame] | 41 | |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 42 | # @ECLASS-VARIABLE: CROS_FIRMWARE_PD_IMAGE |
| 43 | # @DESCRIPTION: (Optional) Location of PD firmware image |
| 44 | : ${CROS_FIRMWARE_PD_IMAGE:=} |
| 45 | |
| 46 | # @ECLASS-VARIABLE: CROS_FIRMWARE_PD_VERSION |
| 47 | # @DESCRIPTION: (Optional) Version name of PD firmware |
| 48 | : ${CROS_FIRMWARE_PD_VERSION:=} |
| 49 | |
| 50 | # @ECLASS-VARIABLE: CROS_FIRMWARE_STABLE_PD_VERSION |
| 51 | # @DESCRIPTION: (Optional) Version name of stabled PD firmware |
| 52 | : ${CROS_FIRMWARE_STABLE_PD_VERSION:=} |
| 53 | |
Hung-Te Lin | 890a226 | 2011-05-19 20:22:41 +0800 | [diff] [blame] | 54 | # @ECLASS-VARIABLE: CROS_FIRMWARE_PLATFORM |
| 55 | # @DESCRIPTION: (Optional) Platform name of firmware |
| 56 | : ${CROS_FIRMWARE_PLATFORM:=} |
| 57 | |
Hung-Te Lin | 35cf1a1 | 2011-07-21 23:16:35 +0800 | [diff] [blame] | 58 | # @ECLASS-VARIABLE: CROS_FIRMWARE_SCRIPT |
| 59 | # @DESCRIPTION: (Optional) Entry script file name of updater |
| 60 | : ${CROS_FIRMWARE_SCRIPT:=} |
| 61 | |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 62 | # @ECLASS-VARIABLE: CROS_FIRMWARE_BINARY |
| 63 | # @DESCRIPTION: (Optional) location of custom flashrom tool |
| 64 | : ${CROS_FIRMWARE_FLASHROM_BINARY:=} |
| 65 | |
| 66 | # @ECLASS-VARIABLE: CROS_FIRMWARE_EXTRA_LIST |
Hung-Te Lin | e2e4a6b | 2011-08-31 18:57:26 +0800 | [diff] [blame] | 67 | # @DESCRIPTION: (Optional) Semi-colon separated list of additional resources |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 68 | : ${CROS_FIRMWARE_EXTRA_LIST:=} |
| 69 | |
Hung-Te Lin | 0c59d0a | 2012-08-16 13:18:09 +0800 | [diff] [blame] | 70 | # @ECLASS-VARIABLE: CROS_FIRMWARE_FORCE_UPDATE |
| 71 | # @DESCRIPTION: (Optional) Always add "force update firmware" tag. |
| 72 | : ${CROS_FIRMWARE_FORCE_UPDATE:=} |
| 73 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 74 | # Check for EAPI 2+ |
| 75 | case "${EAPI:-0}" in |
| 76 | 4|3|2) ;; |
| 77 | *) die "unsupported EAPI" ;; |
| 78 | esac |
| 79 | |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 80 | # $board-overlay/make.conf may contain these flags to always create "firmware |
| 81 | # from source". |
Gabe Black | 1515661 | 2013-03-16 02:47:57 -0700 | [diff] [blame] | 82 | IUSE="bootimage cros_ec depthcharge" |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 83 | |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 84 | # Some tools (flashrom, iotools, mosys, ...) were bundled in the updater so we |
| 85 | # don't write RDEPEND=$DEPEND. RDEPEND should have an explicit list of what it |
| 86 | # needs to extract and execute the updater. |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 87 | DEPEND=" |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 88 | >=chromeos-base/vboot_reference-1.0-r230 |
Mike Frysinger | 2d94c62 | 2012-09-13 23:59:17 -0400 | [diff] [blame] | 89 | chromeos-base/vpd |
Mike Frysinger | 877662c | 2011-10-19 10:45:46 -0400 | [diff] [blame] | 90 | dev-util/shflags |
Doug Anderson | 5b9cb86 | 2013-06-18 09:21:43 -0700 | [diff] [blame] | 91 | >=sys-apps/flashrom-0.9.4-r269 |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 92 | sys-apps/mosys |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 93 | " |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 94 | |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 95 | # Build firmware from source. |
| 96 | DEPEND="$DEPEND |
| 97 | bootimage? ( sys-boot/chromeos-bootimage ) |
| 98 | cros_ec? ( chromeos-base/chromeos-ec ) |
| 99 | " |
| 100 | |
J. Richard Barnette | 7a4385c | 2011-05-03 16:54:57 -0700 | [diff] [blame] | 101 | # Maintenance note: The factory install shim downloads and executes |
| 102 | # the firmware updater. Consequently, runtime dependencies for the |
| 103 | # updater are also runtime dependencies for the install shim. |
| 104 | # |
| 105 | # The contents of RDEPEND below must also be present in the |
| 106 | # chromeos-base/chromeos-factoryinstall ebuild in PROVIDED_DEPEND. |
| 107 | # If you make any change to the list below, you may need to make a |
| 108 | # matching change in the factory install ebuild. |
| 109 | # |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 110 | # TODO(hungte) remove gzip/tar if we have busybox |
| 111 | RDEPEND=" |
| 112 | app-arch/gzip |
| 113 | app-arch/sharutils |
J. Richard Barnette | 7a4385c | 2011-05-03 16:54:57 -0700 | [diff] [blame] | 114 | app-arch/tar |
| 115 | chromeos-base/vboot_reference |
J. Richard Barnette | 7a4385c | 2011-05-03 16:54:57 -0700 | [diff] [blame] | 116 | sys-apps/util-linux" |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 117 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 118 | RESTRICT="mirror" |
| 119 | |
| 120 | # Local variables. |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 121 | |
| 122 | UPDATE_SCRIPT="chromeos-firmwareupdate" |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 123 | FW_IMAGE_LOCATION="" |
Hung-Te Lin | c8c15d9 | 2013-01-10 16:19:40 +0800 | [diff] [blame] | 124 | FW_RW_IMAGE_LOCATION="" |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 125 | EC_IMAGE_LOCATION="" |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 126 | PD_IMAGE_LOCATION="" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 127 | EXTRA_LOCATIONS=() |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 128 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 129 | # New SRC_URI based approach. |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 130 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 131 | _add_source() { |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 132 | local var="$1" |
| 133 | local input="${!var}" |
| 134 | local protocol="${input%%://*}" |
| 135 | local uri="${input#*://}" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 136 | local overlay="${CROS_FIRMWARE_BCS_OVERLAY#overlay-}" |
| 137 | local user="bcs-${overlay#variant-*-}" |
| 138 | local bcs_url="gs://chromeos-binaries/HOME/${user}/overlay-${overlay}" |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 139 | |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 140 | # Input without ${protocol} are local files (ex, ${FILESDIR}/file). |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 141 | case "${protocol}" in |
| 142 | bcs) |
| 143 | SRC_URI+=" ${bcs_url}/${CATEGORY}/${PN}/${uri}" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 144 | ;; |
Jay Kim | f4058d6 | 2014-02-04 16:03:34 -0800 | [diff] [blame] | 145 | http|https|gs) |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 146 | SRC_URI+=" ${input}" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 147 | ;; |
| 148 | esac |
| 149 | } |
| 150 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 151 | _unpack_archive() { |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 152 | local var="$1" |
| 153 | local input="${!var}" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 154 | local archive="${input##*/}" |
| 155 | local folder="${S}/.dist/${archive}" |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 156 | |
| 157 | # Remote source files (bcs://, http://, ...) are downloaded into |
| 158 | # ${DISTDIR}, which is the default location for command 'unpack'. |
| 159 | # For any other files (ex, ${FILESDIR}/file), use complete file path. |
| 160 | local unpack_name="${input}" |
| 161 | if [[ "${unpack_name}" =~ "://" ]]; then |
| 162 | input="${DISTDIR}/${archive}" |
| 163 | unpack_name="${archive}" |
| 164 | fi |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 165 | |
| 166 | case "${input##*.}" in |
| 167 | tar|tbz2|tbz|bz|gz|tgz|zip|xz) ;; |
| 168 | *) |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 169 | eval ${var}="'${input}'" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 170 | return |
| 171 | ;; |
| 172 | esac |
| 173 | |
| 174 | mkdir -p "${folder}" || die "Not able to create ${folder}" |
| 175 | (cd "${folder}" && unpack "${unpack_name}") || |
| 176 | die "Failed to unpack ${unpack_name}." |
| 177 | local contents=($(ls "${folder}")) |
| 178 | if [[ ${#contents[@]} -gt 1 ]]; then |
| 179 | # Currently we can only serve one file (or directory). |
| 180 | ewarn "WARNING: package ${input} contains multiple files." |
| 181 | fi |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 182 | eval ${var}="'${folder}/${contents}'" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 183 | } |
| 184 | |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 185 | cros-firmware_src_unpack() { |
| 186 | cros-workon_src_unpack |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 187 | local i |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 188 | |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 189 | for i in {FW,FW_RW,EC,PD}_IMAGE_LOCATION; do |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 190 | _unpack_archive ${i} |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 191 | done |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 192 | |
| 193 | for ((i = 0; i < ${#EXTRA_LOCATIONS[@]}; i++)); do |
| 194 | _unpack_archive "EXTRA_LOCATIONS[$i]" |
| 195 | done |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 196 | } |
| 197 | |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 198 | _add_param() { |
| 199 | local prefix="$1" |
| 200 | local value="$2" |
| 201 | |
| 202 | if [[ -n "$value" ]]; then |
| 203 | echo "$prefix '$value' " |
| 204 | fi |
| 205 | } |
| 206 | |
| 207 | _add_bool_param() { |
| 208 | local prefix="$1" |
| 209 | local value="$2" |
| 210 | |
| 211 | if [[ -n "$value" ]]; then |
| 212 | echo "$prefix " |
| 213 | fi |
| 214 | } |
| 215 | |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 216 | cros-firmware_src_compile() { |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 217 | local image_cmd="" ext_cmd="" local_image_cmd="" |
| 218 | local root="${ROOT%/}" |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 219 | |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 220 | # Prepare images |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 221 | image_cmd+="$(_add_param -b "${FW_IMAGE_LOCATION}")" |
| 222 | image_cmd+="$(_add_param -e "${EC_IMAGE_LOCATION}")" |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 223 | image_cmd+="$(_add_param -p "${PD_IMAGE_LOCATION}")" |
Hung-Te Lin | c8c15d9 | 2013-01-10 16:19:40 +0800 | [diff] [blame] | 224 | image_cmd+="$(_add_param -w "${FW_RW_IMAGE_LOCATION}")" |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 225 | image_cmd+="$(_add_param --ec_version "${CROS_FIRMWARE_EC_VERSION}")" |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 226 | image_cmd+="$(_add_param --pd_version "${CROS_FIRMWARE_PD_VERSION}")" |
Hung-Te Lin | 20c5123 | 2013-05-02 12:44:11 +0800 | [diff] [blame] | 227 | image_cmd+="$(_add_bool_param --create_bios_rw_image \ |
| 228 | "${CROS_FIRMWARE_BUILD_MAIN_RW_IMAGE}")" |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 229 | |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 230 | # Prepare extra commands |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 231 | ext_cmd+="$(_add_param --extra "$(IFS=:; echo "${EXTRA_LOCATIONS[*]}")")" |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 232 | ext_cmd+="$(_add_param --script "${CROS_FIRMWARE_SCRIPT}")" |
| 233 | ext_cmd+="$(_add_param --platform "${CROS_FIRMWARE_PLATFORM}")" |
| 234 | ext_cmd+="$(_add_param --flashrom "${CROS_FIRMWARE_FLASHROM_BINARY}")" |
| 235 | ext_cmd+="$(_add_param --tool_base \ |
| 236 | "$root/firmware/utils:$root/usr/sbin:$root/usr/bin")" |
Hung-Te Lin | 716ff01 | 2014-06-07 01:24:12 +0800 | [diff] [blame] | 237 | ext_cmd+="$(_add_param --stable_main_version \ |
| 238 | "${CROS_FIRMWARE_STABLE_MAIN_VERSION}")" |
| 239 | ext_cmd+="$(_add_param --stable_ec_version \ |
| 240 | "${CROS_FIRMWARE_STABLE_EC_VERSION}")" |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 241 | ext_cmd+="$(_add_param --stable_pd_version \ |
| 242 | "${CROS_FIRMWARE_STABLE_PD_VERSION}")" |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 243 | |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 244 | # Pack firmware update script! |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 245 | if [ -z "$image_cmd" ]; then |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 246 | # Create an empty update script for the generic case |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 247 | # (no need to update) |
| 248 | einfo "Building empty firmware update script" |
| 249 | echo -n > ${UPDATE_SCRIPT} |
| 250 | else |
| 251 | # create a new script |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 252 | einfo "Build ${BOARD_USE} firmware updater: $image_cmd $ext_cmd" |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 253 | ./pack_firmware.sh $image_cmd $ext_cmd -o $UPDATE_SCRIPT || |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 254 | die "Cannot pack firmware." |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 255 | fi |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 256 | |
| 257 | # Create local updaters |
| 258 | local local_image_cmd="" output_bom output_file |
| 259 | if use cros_ec; then |
| 260 | local_image_cmd+="-e $root/firmware/ec.bin " |
| 261 | fi |
| 262 | if use bootimage; then |
Gabe Black | 1515661 | 2013-03-16 02:47:57 -0700 | [diff] [blame] | 263 | if use depthcharge; then |
| 264 | einfo "Updater for local fw" |
Hung-Te Lin | 5d051c0 | 2013-06-04 18:34:57 -0700 | [diff] [blame] | 265 | output_file="updater.sh" |
Gabe Black | 1515661 | 2013-03-16 02:47:57 -0700 | [diff] [blame] | 266 | ./pack_firmware.sh -b $root/firmware/image.bin \ |
Hung-Te Lin | 5d051c0 | 2013-06-04 18:34:57 -0700 | [diff] [blame] | 267 | -o $output_file $local_image_cmd $ext_cmd || |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 268 | die "Cannot pack local firmware." |
Hung-Te Lin | 5d051c0 | 2013-06-04 18:34:57 -0700 | [diff] [blame] | 269 | if [[ -z "$image_cmd" ]]; then |
| 270 | # When no pre-built binaries are available, |
| 271 | # dupe local updater to system updater. |
| 272 | cp -f "$output_file" "$UPDATE_SCRIPT" |
| 273 | fi |
Gabe Black | 1515661 | 2013-03-16 02:47:57 -0700 | [diff] [blame] | 274 | else |
| 275 | for fw_file in $root/firmware/image-*.bin; do |
| 276 | einfo "Updater for local fw - $fw_file" |
| 277 | output_bom=${fw_file##*/image-} |
| 278 | output_bom=${output_bom%%.bin} |
| 279 | output_file=updater-$output_bom.sh |
| 280 | ./pack_firmware.sh -b $fw_file -o $output_file \ |
| 281 | $local_image_cmd $ext_cmd || |
| 282 | die "Cannot pack local firmware." |
| 283 | done |
| 284 | fi |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 285 | elif use cros_ec; then |
| 286 | # TODO(hungte) Deal with a platform that has only EC and no |
| 287 | # BIOS, which is usually incorrect configuration. |
Bernie Thompson | 56bc05b | 2014-02-03 14:26:02 -0800 | [diff] [blame] | 288 | # We only warn here to allow for BCS based firmware to still generate |
| 289 | # a proper chromeos-firmwareupdate update script. |
| 290 | ewarn "WARNING: platform has no local BIOS, EC only is not supported." |
| 291 | ewarn "Not generating a locally built firmware update script." |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 292 | fi |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 293 | } |
| 294 | |
| 295 | cros-firmware_src_install() { |
| 296 | # install the main updater program |
Dave Parker | 914ef51 | 2011-05-10 09:55:05 -0700 | [diff] [blame] | 297 | dosbin $UPDATE_SCRIPT || die "Failed to install update script." |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 298 | |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 299 | # install factory wipe script |
| 300 | dosbin firmware-factory-wipe |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 301 | |
| 302 | # install updaters for firmware-from-source archive. |
| 303 | if use bootimage; then |
| 304 | exeinto /firmware |
Gabe Black | 1515661 | 2013-03-16 02:47:57 -0700 | [diff] [blame] | 305 | doexe updater*.sh |
Hung-Te Lin | 0cde8bf | 2012-08-07 18:22:26 +0800 | [diff] [blame] | 306 | fi |
Hung-Te Lin | 0c59d0a | 2012-08-16 13:18:09 +0800 | [diff] [blame] | 307 | |
| 308 | # The "force_update_firmware" tag file is used by chromeos-installer. |
| 309 | if [ -n "$CROS_FIRMWARE_FORCE_UPDATE" ]; then |
| 310 | insinto /root |
| 311 | touch .force_update_firmware |
| 312 | doins .force_update_firmware |
| 313 | fi |
Dave Parker | 515cdcd | 2011-03-08 17:58:43 -0800 | [diff] [blame] | 314 | } |
| 315 | |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 316 | # @FUNCTION: _expand_list |
| 317 | # @USAGE <var> <ifs> <string> |
| 318 | # @DESCRIPTION: |
| 319 | # Internal function to expand a string (separated by ifs) into bash array. |
| 320 | _expand_list() { |
| 321 | local var="$1" ifs="$2" |
| 322 | IFS="${ifs}" read -r -a ${var} <<<"${*:3}" |
| 323 | } |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 324 | |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 325 | # @FUNCTION: cros-firmware_setup_source |
| 326 | # @DESCRIPTION: |
| 327 | # Configures all firmware binary source files to SRC_URI, and updates local |
| 328 | # destination mapping (*_LOCATION). Must be invoked after CROS_FIRMWARE_*_IMAGE |
| 329 | # are set. |
| 330 | cros-firmware_setup_source() { |
| 331 | local i |
| 332 | |
| 333 | FW_IMAGE_LOCATION="${CROS_FIRMWARE_MAIN_IMAGE}" |
| 334 | FW_RW_IMAGE_LOCATION="${CROS_FIRMWARE_MAIN_RW_IMAGE}" |
| 335 | EC_IMAGE_LOCATION="${CROS_FIRMWARE_EC_IMAGE}" |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 336 | PD_IMAGE_LOCATION="${CROS_FIRMWARE_PD_IMAGE}" |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 337 | _expand_list EXTRA_LOCATIONS ";" "${CROS_FIRMWARE_EXTRA_LIST}" |
| 338 | |
Duncan Laurie | 119f1d8 | 2014-08-18 09:31:39 -0700 | [diff] [blame] | 339 | for i in {FW,FW_RW,EC,PD}_IMAGE_LOCATION; do |
Hung-Te Lin | bcecb3e | 2013-03-13 13:42:56 +0800 | [diff] [blame] | 340 | _add_source ${i} |
| 341 | done |
| 342 | |
| 343 | for ((i = 0; i < ${#EXTRA_LOCATIONS[@]}; i++)); do |
| 344 | _add_source "EXTRA_LOCATIONS[$i]" |
Hung-Te Lin | 5febb1e | 2013-03-12 17:56:35 +0800 | [diff] [blame] | 345 | done |
| 346 | } |
| 347 | |
| 348 | # If "inherit cros-firmware" appears at end of ebuild file, build source URI |
| 349 | # automatically. Otherwise, you have to put an explicit call to |
| 350 | # "cros-firmware_setup_source" at end of ebuild file. |
| 351 | [[ -n "${CROS_FIRMWARE_MAIN_IMAGE}" ]] && cros-firmware_setup_source |
| 352 | |
Dave Parker | d7d4c40 | 2011-04-15 08:01:34 -0700 | [diff] [blame] | 353 | EXPORT_FUNCTIONS src_unpack src_compile src_install |