Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/bin/sh | 1 #!/bin/sh -u |
| 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 # | 5 # |
| 6 # Usage: dev_debug_vboot [ --cleanup | DIRECTORY ] | 6 # Usage: dev_debug_vboot [ --cleanup | DIRECTORY ] |
| 7 # | 7 # |
| 8 # This extracts some useful debugging information about verified boot. A short | 8 # This extracts some useful debugging information about verified boot. A short |
| 9 # summary is printed on stdout, more detailed information and working files are | 9 # summary is printed on stdout, more detailed information and working files are |
| 10 # left in a log directory. | 10 # left in a log directory. |
| 11 # | 11 # |
| 12 | 12 |
| 13 TMPDIR=/tmp/debug_vboot | 13 PATH=/bin:/sbin:/usr/bin:/usr/sbin |
| 14 | |
| 15 TMPDIR=$(mktemp -d /tmp/debug_vboot_XXXXXXXXX) | |
| 14 LOGFILE=noisy.log | 16 LOGFILE=noisy.log |
| 17 # The public file must live directly in /tmp, not in a subdirectory. | |
| 18 # See http://crosbug.com/8947 | |
| 19 PUBLOGFILE=/tmp/debug_vboot_noisy.log | |
| 15 | 20 |
| 16 # TODO(wfrichar): Need to support ARM. The hard disk path is likely different. | 21 # TODO(wfrichar): Need to support ARM. The hard disk path is likely different. |
|
Randall Spangler
2011/04/08 21:31:13
For a future CL: can use `crossystem arch` to find
| |
| 17 HD=/dev/sda | 22 HD=/dev/sda |
| 18 ACPI=/sys/devices/platform/chromeos_acpi | |
| 19 | 23 |
| 20 cleanup() { | 24 cleanup() { |
| 21 if [ -n "${CLEANUP}" ]; then | 25 if [ -z "${USE_EXISTING:-}" ]; then |
| 22 find "${TMPDIR}" -type f -not -name "${LOGFILE}" -exec rm {} ";" | 26 # See http://crosbug.com/8947 |
| 27 cp --no-target-directory --remove-destination "${LOGFILE}" "${PUBLOGFILE}" | |
| 28 info "exporting log file as ${PUBLOGFILE}" | |
| 29 fi | |
| 30 if [ -n "${CLEANUP:-}" ]; then | |
| 31 cd / | |
| 32 rm -rf "${TMPDIR}" | |
| 23 fi | 33 fi |
| 24 } | 34 } |
| 25 | 35 |
| 26 die() { | 36 die() { |
| 27 echo "$*" 1>&2 | 37 echo "$*" 1>&2 |
| 28 exit 1 | 38 exit 1 |
| 29 } | 39 } |
| 30 | 40 |
| 31 info() { | 41 info() { |
| 32 echo "$@" | 42 echo "$@" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 57 if [ "$?" = "0" ]; then | 67 if [ "$?" = "0" ]; then |
| 58 info "OK" | 68 info "OK" |
| 59 else | 69 else |
| 60 info "FAILED" | 70 info "FAILED" |
| 61 fi | 71 fi |
| 62 } | 72 } |
| 63 | 73 |
| 64 require_chromeos_bios() { | 74 require_chromeos_bios() { |
| 65 log cgpt show "${HD}" | 75 log cgpt show "${HD}" |
| 66 log rootdev -s | 76 log rootdev -s |
| 67 if [ ! -e "${ACPI}/HWID" ]; then | 77 log crossystem |
|
Randall Spangler
2011/04/08 21:31:13
log crossystem --all
(so that you get vdat_lfdebug
| |
| 68 info "Not running Chrome OS BIOS, no further information available" | 78 log ls -aCF /root |
| 69 exit 0 | 79 log ls -aCF /mnt/stateful_partition |
| 70 fi | |
| 71 # including /dev/null just to get final "\n" | |
| 72 log head "${ACPI}"/*ID "${ACPI}"/BINF* "${ACPI}"/CHSW /dev/null | |
| 73 log reboot_mode | |
| 74 log ls -la /mnt/stateful_partition/.need_firmware_update | |
| 75 log ls -la /root/.force_update_firmware | |
| 76 } | 80 } |
| 77 | 81 |
| 78 # Search for files from the FMAP, in the order listed. Return the first one | 82 # Search for files from the FMAP, in the order listed. Return the first one |
| 79 # found or die if none are there. | 83 # found or die if none are there. |
| 80 find_name() { | 84 find_name() { |
| 81 for fn in "$@"; do | 85 for fn in "$@"; do |
| 82 if [ -e "$fn" ]; then | 86 if [ -e "$fn" ]; then |
| 83 echo "$fn" | 87 echo "$fn" |
| 84 return | 88 return |
| 85 fi | 89 fi |
| 86 done | 90 done |
| 87 echo "+ no files named $@" >> "$LOGFILE" | 91 echo "+ no files named $@" >> "$LOGFILE" |
| 88 exit 1 | 92 exit 1 |
| 89 } | 93 } |
| 90 | 94 |
| 91 # Here we go... | 95 # Here we go... |
| 92 umask 022 | 96 umask 022 |
| 93 trap cleanup EXIT | 97 trap cleanup EXIT |
| 94 | 98 |
| 95 # Parse args | 99 # Parse args |
| 96 if [ -n "$1" ]; then | 100 if [ -n "${1:-}" ]; then |
| 97 if [ "$1" = "--cleanup" ]; then | 101 if [ "$1" = "--cleanup" ]; then |
| 98 CLEANUP=1 | 102 CLEANUP=1 |
| 99 else | 103 else |
| 100 TMPDIR="$1" | 104 TMPDIR="$1" |
| 101 [ -d ${TMPDIR} ] || die "${TMPDIR} doesn't exist" | 105 [ -d ${TMPDIR} ] || die "${TMPDIR} doesn't exist" |
| 102 USE_EXISTING=yes | 106 USE_EXISTING=yes |
| 103 fi | 107 fi |
| 104 fi | 108 fi |
| 105 | 109 |
| 106 [ -d ${TMPDIR} ] || mkdir -p ${TMPDIR} || exit 1 | 110 [ -d ${TMPDIR} ] || mkdir -p ${TMPDIR} || exit 1 |
| 107 cd ${TMPDIR} | 111 cd ${TMPDIR} |
| 108 echo "$0 $*" > "$LOGFILE" | 112 echo "$0 $*" > "$LOGFILE" |
| 109 log date | 113 log date |
| 110 echo "Saving verbose log as $(pwd)/$LOGFILE" | 114 echo "Saving verbose log as $(pwd)/$LOGFILE" |
| 111 | 115 |
| 112 BIOS=bios.rom | 116 BIOS=bios.rom |
| 113 | 117 |
| 114 # Find BIOS and kernel images | 118 # Find BIOS and kernel images |
| 115 if [ -n "$USE_EXISTING" ]; then | 119 if [ -n "${USE_EXISTING:-}" ]; then |
| 116 info "Using images in $(pwd)/" | 120 info "Using images in $(pwd)/" |
| 117 else | 121 else |
| 118 require_chromeos_bios | 122 require_chromeos_bios |
| 119 info "Extracting BIOS image from flash..." | 123 info "Extracting BIOS image from flash..." |
| 120 log flashrom -p internal:bus=spi --wp-status | 124 log flashrom -p internal:bus=spi --wp-status |
| 121 log flashrom -p internal:bus=spi -r ${BIOS} | 125 log flashrom -p internal:bus=spi -r ${BIOS} |
| 122 | 126 |
| 123 HD_KERN_A="${HD}2" | 127 HD_KERN_A="${HD}2" |
| 124 HD_KERN_B="${HD}4" | 128 HD_KERN_B="${HD}4" |
| 125 tmp=$(rootdev -s -d)2 | 129 tmp=$(rootdev -s -d)2 |
| 126 if [ "$tmp" != "$HD_KERN_A" ]; then | 130 if [ "$tmp" != "$HD_KERN_A" ]; then |
| 127 USB_KERN_A="$tmp" | 131 USB_KERN_A="$tmp" |
| 128 fi | 132 fi |
| 129 | 133 |
| 130 info "Extracting kernel images from drives..." | 134 info "Extracting kernel images from drives..." |
| 131 log dd if=${HD_KERN_A} of=hd_kern_a.blob | 135 log dd if=${HD_KERN_A} of=hd_kern_a.blob |
| 132 log dd if=${HD_KERN_B} of=hd_kern_b.blob | 136 log dd if=${HD_KERN_B} of=hd_kern_b.blob |
| 133 if [ -n "$USB_KERN_A" ]; then | 137 if [ -n "${USB_KERN_A:-}" ]; then |
| 134 log dd if=${USB_KERN_A} of=usb_kern_a.blob | 138 log dd if=${USB_KERN_A} of=usb_kern_a.blob |
| 135 fi | 139 fi |
| 136 fi | 140 fi |
| 137 | 141 |
| 138 # Make sure we have something to work on | 142 # Make sure we have something to work on |
| 139 [ -f "$BIOS" ] || logdie "no BIOS image found" | 143 [ -f "$BIOS" ] || logdie "no BIOS image found" |
| 140 ls *kern*.blob >/dev/null 2>&1 || logdie "no kernel images found" | 144 ls *kern*.blob >/dev/null 2>&1 || logdie "no kernel images found" |
| 141 | 145 |
| 142 info "Extracting BIOS components..." | 146 info "Extracting BIOS components..." |
| 143 log dump_fmap -x ${BIOS} || logdie "Unable to extract BIOS components" | 147 log dump_fmap -x ${BIOS} || logdie "Unable to extract BIOS components" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 loghead od -Ax -tx1 $keyblock | 183 loghead od -Ax -tx1 $keyblock |
| 180 done | 184 done |
| 181 | 185 |
| 182 # Test each kernel with each key | 186 # Test each kernel with each key |
| 183 for key in kernel_subkey_a.vbpubk kernel_subkey_b.vbpubk recoverykey.vbpubk; do | 187 for key in kernel_subkey_a.vbpubk kernel_subkey_b.vbpubk recoverykey.vbpubk; do |
| 184 for kern in *kern*.blob; do | 188 for kern in *kern*.blob; do |
| 185 infon "Verify $kern with $key... " | 189 infon "Verify $kern with $key... " |
| 186 log vbutil_kernel --verify $kern --signpubkey $key ; result | 190 log vbutil_kernel --verify $kern --signpubkey $key ; result |
| 187 done | 191 done |
| 188 done | 192 done |
| OLD | NEW |