Matt DeVillier has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/59266 )
Change subject: util/chromeos: Update extract_blobs script ......................................................................
util/chromeos: Update extract_blobs script
- Handle older CrOS firmware which lacks a COREBOOT FMAP region - Add support for all blobs used in CrOS firmware 2013 to current - Put extracted blobs in their own directory
Change-Id: Idaa39eca3be68a9327cead9b21c35a6c7a3a8166 Signed-off-by: Matt DeVillier matt.devillier@gmail.com --- M util/chromeos/extract_blobs.sh 1 file changed, 91 insertions(+), 25 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/66/59266/1
diff --git a/util/chromeos/extract_blobs.sh b/util/chromeos/extract_blobs.sh index 39f2a3b..eee7785 100755 --- a/util/chromeos/extract_blobs.sh +++ b/util/chromeos/extract_blobs.sh @@ -2,40 +2,106 @@ # # SPDX-License-Identifier: GPL-2.0-only
-set -x +if [ ! -f "$1" ] ; then + echo "Error: You must provide a valid filename" + exit 1 +fi
IMAGE=$1 +DIR=$(basename $IMAGE) +DIR="${DIR%.*}-blobs" +mkdir -p $DIR
-if [ ! -r "$IMAGE" ]; then - echo "Can't find image $IMAGE." - exit 1 +if [ -f ./cbfstool ]; then + CBFSTOOL="./cbfstool" +else + CBFSTOOL=$(which cbfstool) +fi +if [[ "$CBFSTOOL" = "" ]]; then + echo "Error: cbfstool must be in your path or exist locally" + exit 1 fi
-CBFSTOOL=$(which cbfstool) -if [ $? != 0 ]; then - echo "Can't find cbfstool." - exit 1 +if [ -f ./ifdtool ]; then + IFDTOOL="./ifdtool" +else + IFDTOOL=$(which ifdtool) +fi +if [[ "$IFDTOOL" = "" ]]; then + echo "Error: ifdtool must be in your path or exist locally" + exit 1 fi
-IFDTOOL=$(which ifdtool) -if [ $? != 0 ]; then - echo "Can't find ifdtool." - exit 1 +# ensure valid coreboot image / get list of main COREBOOT CBFS contents +REGION="" +if ! $CBFSTOOL $IMAGE print > $DIR/cbfs.txt 2>/dev/null ; then + # try using BOOT_STUB region + if ! $CBFSTOOL $IMAGE print -r BOOT_STUB > $DIR/cbfs.txt ; then + echo "Error reading CBFS: $IMAGE is not a valid coreboot image" + exit 1 + else + REGION="-r BOOT_STUB" + fi fi
-$CBFSTOOL $IMAGE print +echo "" +echo "Extracting blobs..." +echo ""
-if [ $? -ne 0 ]; then - echo "Not a coreboot image: $IMAGE" - exit 1 +# extract flash regions +if ! $IFDTOOL -x $IMAGE >/dev/null ; then + echo "Error reading flash descriptor/extracting flash regions" + exit 1 fi - -PCI=$($CBFSTOOL $IMAGE print|grep pci|cut -f1 -d\ ) -MRC=$($CBFSTOOL $IMAGE print|grep mrc.bin|cut -f1 -d\ ) - -$CBFSTOOL $IMAGE extract -n $PCI -f $PCI -$CBFSTOOL $IMAGE extract -n $MRC -f $MRC -$IFDTOOL -x $IMAGE -mv flashregion_0_flashdescriptor.bin flashdescriptor.bin -mv flashregion_2_intel_me.bin me.bin +# rename to normal convention; drop unused regions +mv flashregion_0_flashdescriptor.bin $DIR/flashdescriptor.bin +mv flashregion_2_intel_me.bin $DIR/me.bin rm flashregion_*.bin + +# extract microcode +$CBFSTOOL $IMAGE extract $REGION -n cpu_microcode_blob.bin -f $DIR/cpu_microcode_blob.bin + +# extract VGA BIOS +VGA=$(cat $DIR/cbfs.txt | grep pci | cut -f1 -d\ ) +if [ "$VGA" != "" ]; then + $CBFSTOOL $IMAGE extract $REGION -n $VGA -f $DIR/vgabios.bin +fi + +# extract MRC.bin +MRC=$(cat $DIR/cbfs.txt | grep mrc.bin | cut -f1 -d\ ) +if [ "$MRC" != "" ]; then + $CBFSTOOL $IMAGE extract $REGION -n $MRC -f $DIR/$MRC +fi + +# extract refcode +REF=$(cat $DIR/cbfs.txt | grep refcode | cut -f1 -d\ ) +if [ "$REF" != "" ]; then + $CBFSTOOL $IMAGE extract $REGION -n fallback/refcode -f $DIR/refcode.elf -m x86 +fi + +# extract FSP blobs +for FSP in $(cat $DIR/cbfs.txt | grep fsp | cut -f1 -d\ ); +do $CBFSTOOL $IMAGE extract $REGION -n $FSP -f $DIR/$FSP; +done + +# extract audio blobs +for AUD in $(cat $DIR/cbfs.txt | grep -e "-2ch-" -e "-4ch-" | cut -f1 -d\ ); +do $CBFSTOOL $IMAGE extract $REGION -n $AUD -f $DIR/$AUD; +done + +# extract VBTs +for VBT in $(cat $DIR/cbfs.txt | grep vbt | cut -f1 -d\ ); +do $CBFSTOOL $IMAGE extract $REGION -n $VBT -f $DIR/$VBT; +done + +# extract IFWI +IFWI=$(cbfstool $IMAGE layout -w | grep IFWI) +if [ "$IFWI" != "" ]; then + $CBFSTOOL $IMAGE read -r IFWI -f $DIR/ifwi.bin +fi + +# a little housekeeping +rm $DIR/cbfs.txt + +echo "" +echo "All done"