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")) |
David James | 359d3e1 | 2012-07-10 13:09:48 -0700 | [diff] [blame] | 14 | . "${SCRIPT_ROOT}/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. |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 46 | # TODO(nsanders): Set default IP here when userspace |
| 47 | # env modification is available. |
Grant Grundler | 7c4328a | 2011-06-22 10:24:42 -0700 | [diff] [blame] | 48 | # TODO(nsanders): ARM generic doesn't build chromeos-u-boot package. |
| 49 | # When ARM generic goes away, delete the test. |
Vic Yang | e72689e | 2013-01-27 16:00:11 +0800 | [diff] [blame] | 50 | if ls "${SYSROOT}"/firmware/nv_image-*.bin >/dev/null 2>&1; then |
| 51 | echo "Copying netboot firmware nv_image-*.bin" |
| 52 | cp -v "${SYSROOT}"/firmware/nv_image-*.bin "netboot" |
Grant Grundler | 7c4328a | 2011-06-22 10:24:42 -0700 | [diff] [blame] | 53 | else |
Vic Yang | e72689e | 2013-01-27 16:00:11 +0800 | [diff] [blame] | 54 | echo "Skipping netboot firmware: " \ |
| 55 | "${SYSROOT}/firmware/nv_image-*.bin not present?" |
Grant Grundler | 7c4328a | 2011-06-22 10:24:42 -0700 | [diff] [blame] | 56 | fi |
Nick Sanders | 119677f | 2011-06-03 01:04:08 -0700 | [diff] [blame] | 57 | |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 58 | # Create temporary emerge root |
| 59 | temp_build_path="$(mktemp -d bk_XXXXXXXX)" |
| 60 | if ! [ -d "${temp_build_path}" ]; then |
| 61 | echo "Failed to create temporary directory." |
| 62 | exit 1 |
| 63 | fi |
| 64 | |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame^] | 65 | # Build initramfs network boot image |
| 66 | echo "Building kernel" |
| 67 | export USE='vfat netboot_ramfs i2cdev tpm' |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 68 | export EMERGE_BOARD_CMD="emerge-${FLAGS_board}" |
| 69 | emerge_custom_kernel ${temp_build_path} |
| 70 | |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame^] | 71 | # Place kernel image under 'netboot' |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 72 | echo "Generating netboot kernel vmlinux.uimg" |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 73 | if [ "${ARCH}" = "arm" ]; then |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 74 | cp "${temp_build_path}"/boot/vmlinux.uimg netboot/ |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 75 | else |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 76 | # U-boot put kernel image at 0x100000. We load it at 0x3000000 because |
| 77 | # 0x3000000 is safe enough not to overlap with image at 0x100000. |
Vic Yang | 7397b8d | 2013-01-27 13:24:24 +0800 | [diff] [blame^] | 78 | mkimage -A x86 -O linux -T kernel -n "Linux kernel" -C none \ |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 79 | -d "${temp_build_path}"/boot/vmlinuz \ |
| 80 | -a 0x03000000 -e 0x03000000 netboot/vmlinux.uimg |
Vic Yang | 3450deb | 2012-05-18 11:57:06 +0800 | [diff] [blame] | 81 | fi |
Nick Sanders | 2027ca8 | 2011-08-09 00:48:29 -0700 | [diff] [blame] | 82 | |
Vic Yang | 90e3b25 | 2013-01-09 18:34:35 +0800 | [diff] [blame] | 83 | sudo rm -rf "${temp_build_path}" |