From 18ff72b9136cd800728d6a6bc7df7092878bd5f0 Mon Sep 17 00:00:00 2001 From: robotboy Date: Thu, 11 Feb 2010 17:33:32 -0800 Subject: [PATCH] Create a fourth partition to put the raw kernel image in. This is a short term fix for machines that can't boot a kernel from the root file system of an SDCard. This issue depends on issue 602027. Review URL: http://codereview.chromium.org/600074 --- image_to_usb.sh | 11 +++++++++ kernel_fetcher.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100755 kernel_fetcher.sh diff --git a/image_to_usb.sh b/image_to_usb.sh index d0cc1ebfc8..c674e2f8fd 100755 --- a/image_to_usb.sh +++ b/image_to_usb.sh @@ -19,6 +19,8 @@ DEFINE_string to "" "$DEFAULT_TO_HELP" DEFINE_boolean yes $FLAGS_FALSE "Answer yes to all prompts" "y" DEFINE_boolean install_autotest $FLAGS_FALSE \ "Whether to install autotest to the stateful partition." +DEFINE_boolean copy_kernel $FLAGS_FALSE \ + "Copy the kernel to the fourth partition." # Parse command line FLAGS "$@" || exit 1 @@ -159,6 +161,15 @@ then trap - EXIT + if [ $FLAGS_copy_kernel -eq $FLAGS_TRUE ] + then + echo "Copying Kernel..." + "${SCRIPTS_DIR}"/kernel_fetcher.sh \ + --from "${FLAGS_from}" \ + --to "${FLAGS_to}" \ + --offset "$(( ($PART_SIZE * 3) + 512 ))" + fi + echo "Copying MBR..." sudo "${SCRIPTS_DIR}"/file_copy.py \ if="${FLAGS_from}/mbr.image" of="$FLAGS_to" diff --git a/kernel_fetcher.sh b/kernel_fetcher.sh new file mode 100755 index 0000000000..166fe59158 --- /dev/null +++ b/kernel_fetcher.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Copyright (c) 2009 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. + +# Load common constants. This should be the first executable line. +# The path to common.sh should be relative to your script's location. +. "$(dirname "$0")/common.sh" + +IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images" + +# Flags +DEFINE_string from "" "Directory containing rootfs.image and mbr.image" +DEFINE_string to "" "Destination file for USB image." +DEFINE_integer offset 0 "Offset to write the kernel to in the destination." + +# Parse command line +FLAGS "$@" || exit 1 +eval set -- "${FLAGS_ARGV}" + +# Die on any errors. +set -e + +if [ -z "${FLAGS_from}" -o -z "${FLAGS_to}" -o -z "${FLAGS_offset}" ] +then + echo "You must define all of from, to and offset." + exit 1 +fi + +# Convert args to paths. Need eval to un-quote the string so that shell +# chars like ~ are processed; just doing FOO=`readlink -f $FOO` won't work. +FLAGS_from=`eval readlink -f ${FLAGS_from}` +FLAGS_to=`eval readlink -f ${FLAGS_to}` + +function do_cleanup { + sync + sudo umount -l /tmp/kernel_fetch.$$ + rmdir /tmp/kernel_fetch.$$ +} + +trap do_cleanup EXIT + +# +# Set up loop device. This time it is used to fetch the built kernel from the +# root image. This kernel is then written to the fourth partition. +# +echo "Fetching kernel from root image..." +mkdir /tmp/kernel_fetch.$$ +sudo mount -o loop "${FLAGS_from}/rootfs.image" /tmp/kernel_fetch.$$ + +echo "Writing kernel to ${FLAGS_to} at ${FLAGS_offset}..." +sudo "${SCRIPTS_DIR}"/file_copy.py \ + if=/tmp/kernel_fetch.$$/boot/vmlinux.uimg \ + of="${FLAGS_to}" \ + seek_bytes="${FLAGS_offset}" +echo "Done." + +do_cleanup + +trap - EXIT