Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
Chris Sosa | 2eb73c0 | 2011-09-01 18:48:38 -0700 | [diff] [blame] | 3 | # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 4 | # Use of this source code is governed by a BSD-style license that can be |
| 5 | # found in the LICENSE file. |
| 6 | |
| 7 | # make_netboot.sh --board=[board] |
| 8 | # |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame] | 9 | # This script builds a kernel image bundle with the factory install shim |
| 10 | # included as initramfs. Generated image, along with the netboot firmware |
| 11 | # are placed in a "netboot" subfolder. |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 12 | |
Brian Harring | aa13ea4 | 2012-03-15 18:31:03 -0700 | [diff] [blame] | 13 | SCRIPT_ROOT=$(dirname $(readlink -f "$0")) |
Mike Frysinger | 58e2db5 | 2019-09-27 15:02:47 -0400 | [diff] [blame^] | 14 | . "${SCRIPT_ROOT}/build_library/build_common.sh" || exit 1 |
Brian Harring | aa13ea4 | 2012-03-15 18:31:03 -0700 | [diff] [blame] | 15 | |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 16 | # Script must be run inside the chroot. |
| 17 | restart_in_chroot_if_needed "$@" |
| 18 | |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 19 | DEFINE_string board "${DEFAULT_BOARD}" \ |
| 20 | "The board to build an image for." |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame] | 21 | DEFINE_string image_dir "" "Path to the folder to store netboot images." |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 22 | |
| 23 | # Parse command line. |
| 24 | FLAGS "$@" || exit 1 |
| 25 | eval set -- "${FLAGS_ARGV}" |
| 26 | |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 27 | . "${SCRIPT_ROOT}/build_library/build_common.sh" || exit 1 |
| 28 | . "${BUILD_LIBRARY_DIR}/board_options.sh" || exit 1 |
| 29 | |
Brian Harring | 7f175a5 | 2012-03-02 05:37:00 -0800 | [diff] [blame] | 30 | switch_to_strict_mode |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 31 | # build_packages artifact output. |
| 32 | SYSROOT="${GCLIENT_ROOT}/chroot/build/${FLAGS_board}" |
| 33 | # build_image artifact output. |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 34 | |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame] | 35 | if [ -n "${FLAGS_image_dir}" ]; then |
| 36 | cd ${FLAGS_image_dir} |
David James | 4dd4c54 | 2011-08-10 10:19:47 -0700 | [diff] [blame] | 37 | else |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame] | 38 | cd "${CHROOT_TRUNK_DIR}"/src/build/images/"${FLAGS_board}"/latest |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 39 | fi |
| 40 | |
| 41 | # Generate staging dir for netboot files. |
| 42 | sudo rm -rf netboot |
| 43 | mkdir -p netboot |
| 44 | |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 45 | # Get netboot firmware. |
Cheng-Han Yang | 414cb15 | 2019-07-10 17:35:09 +0800 | [diff] [blame] | 46 | FIRMWARE_PATTERN="firmware/image*.net.bin" |
| 47 | FIRMWARE_PATHS=("${SYSROOT}"/${FIRMWARE_PATTERN}) |
| 48 | # When there is no netboot firmware found, filename expansion fails and the |
| 49 | # array still contains the original pattern string, so we need to check if the |
| 50 | # first file in the array actually exists to know if we find any firmware. |
| 51 | if [ -e "${FIRMWARE_PATHS[0]}" ]; then |
| 52 | for firmware_path in "${FIRMWARE_PATHS[@]}"; do |
| 53 | echo "Copying netboot firmware ${firmware_path}..." |
| 54 | cp -v "${firmware_path}" netboot/ |
| 55 | done |
Grant Grundler | 7c4328a | 2011-06-22 10:24:42 -0700 | [diff] [blame] | 56 | else |
Cheng-Han Yang | 414cb15 | 2019-07-10 17:35:09 +0800 | [diff] [blame] | 57 | echo "Skipping netboot firmware: ${SYSROOT}/${FIRMWARE_PATTERN} not present?" |
Grant Grundler | 7c4328a | 2011-06-22 10:24:42 -0700 | [diff] [blame] | 58 | fi |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 59 | |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 60 | # Create temporary emerge root |
| 61 | temp_build_path="$(mktemp -d bk_XXXXXXXX)" |
| 62 | if ! [ -d "${temp_build_path}" ]; then |
| 63 | echo "Failed to create temporary directory." |
| 64 | exit 1 |
| 65 | fi |
| 66 | |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame] | 67 | # Build initramfs network boot image |
| 68 | echo "Building kernel" |
Hung-Te Lin | ff887de | 2016-08-24 10:31:25 +0800 | [diff] [blame] | 69 | export USE="fbconsole vtconsole factory_netboot_ramfs tpm i2cdev vfat" |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 70 | export EMERGE_BOARD_CMD="emerge-${FLAGS_board}" |
| 71 | emerge_custom_kernel ${temp_build_path} |
| 72 | |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame] | 73 | # Place kernel image under 'netboot' |
Hung-Te Lin | ba7dc67 | 2016-11-17 17:54:27 +0800 | [diff] [blame] | 74 | KERNEL_PATH="/boot/vmlinuz" |
| 75 | if [ -f "${temp_build_path}${KERNEL_PATH}" ]; then |
| 76 | echo "Generating netboot kernel ${KERNEL_PATH}" |
| 77 | cp -v "${temp_build_path}${KERNEL_PATH}" netboot/ |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 78 | else |
Hung-Te Lin | ba7dc67 | 2016-11-17 17:54:27 +0800 | [diff] [blame] | 79 | echo "No ${KERNEL_PATH} found in your board." |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 80 | fi |
Nick Sanders | 2027ca8 | 2011-08-09 00:48:29 -0700 | [diff] [blame] | 81 | |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 82 | sudo rm -rf "${temp_build_path}" |