Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 | 2 |
| 3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 # Script to build a bootable keyfob-based chromeos system image from within | 7 # Script to build a bootable keyfob-based chromeos system image from within |
| 8 # a chromiumos setup. This assumes that all needed packages have been built into | 8 # a chromiumos setup. This assumes that all needed packages have been built into |
| 9 # the given target's root with binary packages turned on. This script will | 9 # the given target's root with binary packages turned on. This script will |
| 10 # build the Chrome OS image using only pre-built binary packages. | 10 # build the Chrome OS image using only pre-built binary packages. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}" | 64 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}" |
| 65 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" | 65 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" |
| 66 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" | 66 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" |
| 67 OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/chromiumos_image.bin} | 67 OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/chromiumos_image.bin} |
| 68 | 68 |
| 69 BOARD="${FLAGS_board}" | 69 BOARD="${FLAGS_board}" |
| 70 BOARD_ROOT="${FLAGS_build_root}/${BOARD}" | 70 BOARD_ROOT="${FLAGS_build_root}/${BOARD}" |
| 71 | 71 |
| 72 LOOP_DEV= | 72 LOOP_DEV= |
| 73 STATEFUL_LOOP_DEV= | 73 STATEFUL_LOOP_DEV= |
| 74 ESP_LOOP_DEV= | |
| 74 | 75 |
| 75 # What cross-build are we targeting? | 76 # What cross-build are we targeting? |
| 76 . "${BOARD_ROOT}/etc/make.conf.board_setup" | 77 . "${BOARD_ROOT}/etc/make.conf.board_setup" |
| 77 LIBC_VERSION=${LIBC_VERSION:-"2.10.1-r1"} | 78 LIBC_VERSION=${LIBC_VERSION:-"2.10.1-r1"} |
| 78 | 79 |
| 79 # Figure out ARCH from the given toolchain. | 80 # Figure out ARCH from the given toolchain. |
| 80 # TODO: Move to common.sh as a function after scripts are switched over. | 81 # TODO: Move to common.sh as a function after scripts are switched over. |
| 81 TC_ARCH=$(echo "$CHOST" | awk -F'-' '{ print $1 }') | 82 TC_ARCH=$(echo "$CHOST" | awk -F'-' '{ print $1 }') |
| 82 case "$TC_ARCH" in | 83 case "$TC_ARCH" in |
| 83 arm*) | 84 arm*) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 120 cleanup_stateful_fs_loop() { | 121 cleanup_stateful_fs_loop() { |
| 121 sudo umount "${ROOT_FS_DIR}/usr/local" | 122 sudo umount "${ROOT_FS_DIR}/usr/local" |
| 122 sudo umount "${ROOT_FS_DIR}/var" | 123 sudo umount "${ROOT_FS_DIR}/var" |
| 123 sudo umount "${STATEFUL_DIR}" | 124 sudo umount "${STATEFUL_DIR}" |
| 124 sleep 1 # follows from cleanup_root_fs_loop. | 125 sleep 1 # follows from cleanup_root_fs_loop. |
| 125 sudo losetup -d "$STATEFUL_LOOP_DEV" | 126 sudo losetup -d "$STATEFUL_LOOP_DEV" |
| 126 } | 127 } |
| 127 | 128 |
| 128 cleanup_esp_loop() { | 129 cleanup_esp_loop() { |
| 129 sudo umount "$ESP_DIR" | 130 sudo umount "$ESP_DIR" |
| 131 sleep 1 # me belong cargo | |
|
adlr
2010/04/08 18:22:26
write a better comment?
Bill Richardson
2010/04/08 18:23:48
I *knew* you'd say something about this!
| |
| 132 sudo losetup -d "$ESP_LOOP_DEV" | |
| 130 } | 133 } |
| 131 | 134 |
| 132 cleanup() { | 135 cleanup() { |
| 133 # Disable die on error. | 136 # Disable die on error. |
| 134 set +e | 137 set +e |
| 135 | 138 |
| 136 if [[ -n "$STATEFUL_LOOP_DEV" ]]; then | 139 if [[ -n "$STATEFUL_LOOP_DEV" ]]; then |
| 137 cleanup_stateful_fs_loop | 140 cleanup_stateful_fs_loop |
| 138 fi | 141 fi |
| 139 | 142 |
| 140 if [[ -n "$LOOP_DEV" ]]; then | 143 if [[ -n "$LOOP_DEV" ]]; then |
| 141 cleanup_rootfs_loop | 144 cleanup_rootfs_loop |
| 142 fi | 145 fi |
| 143 | 146 |
| 144 if [[ -n "$ESP_DIR" ]]; then | 147 if [[ -n "$ESP_LOOP_DEV" ]]; then |
| 145 cleanup_esp_loop | 148 cleanup_esp_loop |
| 146 fi | 149 fi |
| 147 | 150 |
| 148 # Turn die on error back on. | 151 # Turn die on error back on. |
| 149 set -e | 152 set -e |
| 150 } | 153 } |
| 151 | 154 |
| 152 # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will | 155 # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will |
| 153 # be installed on the stateful dir. On a Chromium OS system, this will | 156 # be installed on the stateful dir. On a Chromium OS system, this will |
| 154 # translate to /usr/local | 157 # translate to /usr/local |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 | 341 |
| 339 # Create EFI System Partition to boot stock EFI BIOS (but not ChromeOS EFI | 342 # Create EFI System Partition to boot stock EFI BIOS (but not ChromeOS EFI |
| 340 # BIOS). We only need this for x86, but it's simpler and safer to keep the disk | 343 # BIOS). We only need this for x86, but it's simpler and safer to keep the disk |
| 341 # images the same for both x86 and ARM. | 344 # images the same for both x86 and ARM. |
| 342 ESP_IMG=${OUTPUT_DIR}/esp.image | 345 ESP_IMG=${OUTPUT_DIR}/esp.image |
| 343 # NOTE: The size argument for mkfs.vfat is in 1024-byte blocks. We'll hard-code | 346 # NOTE: The size argument for mkfs.vfat is in 1024-byte blocks. We'll hard-code |
| 344 # it to 16M for now. | 347 # it to 16M for now. |
| 345 ESP_BLOCKS=16384 | 348 ESP_BLOCKS=16384 |
| 346 /usr/sbin/mkfs.vfat -C ${OUTPUT_DIR}/esp.image ${ESP_BLOCKS} | 349 /usr/sbin/mkfs.vfat -C ${OUTPUT_DIR}/esp.image ${ESP_BLOCKS} |
| 347 ESP_DIR=${OUTPUT_DIR}/esp | 350 ESP_DIR=${OUTPUT_DIR}/esp |
| 348 mkdir -p ${ESP_DIR} | 351 ESP_LOOP_DEV=$(sudo losetup -f) |
| 349 sudo mount -o loop ${ESP_IMG} ${ESP_DIR} | 352 if [ -z "$ESP_LOOP_DEV" ] ; then |
| 350 sudo mkdir -p ${ESP_DIR}/efi/boot | 353 echo "No free loop device. Free up a loop device or reboot. exiting. " |
| 351 sudo grub-mkimage -p /efi/boot -o ${ESP_DIR}/efi/boot/bootx64.efi \ | 354 exit 1 |
| 355 fi | |
| 356 mkdir -p "${ESP_DIR}" | |
| 357 sudo losetup "${ESP_LOOP_DEV}" "${ESP_IMG}" | |
| 358 sudo mount "${ESP_LOOP_DEV}" "${ESP_DIR}" | |
| 359 sudo mkdir -p "${ESP_DIR}/efi/boot" | |
| 360 sudo grub-mkimage -p /efi/boot -o "${ESP_DIR}/efi/boot/bootx64.efi" \ | |
| 352 part_gpt fat ext2 normal boot sh chain configfile linux | 361 part_gpt fat ext2 normal boot sh chain configfile linux |
| 353 sudo cp ${ROOT_FS_DIR}/boot/vmlinuz ${ESP_DIR}/efi/boot/vmlinuz | 362 sudo cp "${ROOT_FS_DIR}/boot/vmlinuz" "${ESP_DIR}/efi/boot/vmlinuz" |
| 354 cat <<EOF | sudo dd of=${ESP_DIR}/efi/boot/grub.cfg | 363 cat <<EOF | sudo dd of="${ESP_DIR}/efi/boot/grub.cfg" |
| 355 set timeout=2 | 364 set timeout=2 |
| 356 set default=0 | 365 set default=0 |
| 357 | 366 |
| 358 menuentry "32-bit serial" { | 367 menuentry "serial debug" { |
| 359 linux /efi/boot/vmlinuz earlyprintk=serial,ttyS0,115200 i915.modeset=0 console =ttyS0,115200 acpi=off init=/sbin/init boot=local rootwait root=/dev/sda3 ro nor esume noswap loglevel=7 | 368 linux /efi/boot/vmlinuz earlyprintk=serial,ttyS0,115200 i915.modeset=0 console =ttyS0,115200 acpi=off init=/sbin/init boot=local rootwait root=/dev/sda3 ro nor esume noswap loglevel=7 |
| 360 } | 369 } |
| 370 | |
| 371 menuentry "normal" { | |
| 372 linux /efi/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local rootwait root=/dev/sda3 ro noresume noswap i915.modeset=1 loglevel=1 | |
| 373 } | |
| 374 | |
| 361 EOF | 375 EOF |
| 362 | 376 |
| 363 # Enable dev mode on the target system and re-run ldconfig | 377 # Enable dev mode on the target system and re-run ldconfig |
| 364 # for rootfs's ld.so.cache | 378 # for rootfs's ld.so.cache |
| 365 if [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] ; then | 379 if [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] ; then |
| 366 # Flag will mount /usr/local on target device | 380 # Flag will mount /usr/local on target device |
| 367 sudo mkdir -p "$ROOT_FS_DIR/root" | 381 sudo mkdir -p "$ROOT_FS_DIR/root" |
| 368 sudo touch "$ROOT_FS_DIR/root/.dev_mode" | 382 sudo touch "$ROOT_FS_DIR/root/.dev_mode" |
| 369 | 383 |
| 370 # Re-run ldconfig to fix /etc/ldconfig.so.cache | 384 # Re-run ldconfig to fix /etc/ldconfig.so.cache |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 | 419 |
| 406 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" | 420 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" |
| 407 echo "Done. Image created in ${OUTPUT_DIR}" | 421 echo "Done. Image created in ${OUTPUT_DIR}" |
| 408 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" | 422 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" |
| 409 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdb" | 423 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdb" |
| 410 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" | 424 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" |
| 411 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" | 425 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" |
| 412 echo "from the scripts directory where you entered the chroot." | 426 echo "from the scripts directory where you entered the chroot." |
| 413 | 427 |
| 414 trap - EXIT | 428 trap - EXIT |
| OLD | NEW |