123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- #!/bin/bash
- # Download stuffs
- if [ "$1" == "download_code" ]; then
- # Coreboot
- if [ ! -d ./coreboot ]; then
- printf "Downloading Coreboot\n"
- git clone --recursive http://review.coreboot.org/coreboot.git ./coreboot
- else
- printf "Coreboot repository is already present\n"
- fi
- # GRUB
- if [ ! -d ./grub ]; then
- printf "Downloading GRUB\n"
- git clone git://git.savannah.gnu.org/grub.git ./grub
-
- # Checkout this specific version
- cd ./grub
- git checkout "tags/2.02"
- cd ..
- else
- printf "GRUB repository is already present\n"
- fi
- # me_cleaner
- if [ ! -d ./me_cleaner ]; then
- printf "Downloading me_cleaner\n"
- git clone https://github.com/corna/me_cleaner.git ./me_cleaner
- else
- printf "me_cleaner repository is already present\n"
- fi
- # Build Coreboot Utilities
- elif [ "$1" == "build_utils" ]; then
- if [ ! -d "coreboot/.git" ]; then
- printf "No Coreboot repository found in coreboot/\nDownload the code first\n"
- exit 1
- fi
- # Build ifdtool for stock BIOS splitting
- cd coreboot/util/ifdtool
- make -j${nproc}
- cd ../../../
-
- # Build cbfstool for managing Coreboot's filesystem
- cd coreboot/util/cbfstool
- make -j${nproc}
- cd ../../../
-
- # Split the stock rom and organize the parts
- elif [ "$1" == "split_bios" ]; then
- if [ ! -f "binaries/bios.bin" ]; then
- printf "No stock bios (bios.bin) file found in binaries/\n"
- exit 1
- fi
- if [ ! -f "coreboot/util/ifdtool/ifdtool" ]; then
- printf "No ifdtool present, build the Coreboot utils first\n"
- exit 1
- fi
- cd binaries/
- ../coreboot/util/ifdtool/ifdtool -x bios.bin
- mv flashregion_0_flashdescriptor.bin descriptor.bin
- rm flashregion_1_bios.bin
- mv flashregion_2_intel_me.bin me.bin
- mv flashregion_3_gbe.bin gbe.bin
- cd ..
-
- # Neuter Intel ME
- elif [ "$1" == "neuter_me" ]; then
- if [ ! -f "binaries/me.bin" ]; then
- printf "No Intel ME (me.bin) binary found in binaries/\n"
- exit 1
- fi
- cp binaries/me.bin binaries/me_neutered.bin
- python3 me_cleaner/me_cleaner.py binaries/me_neutered.bin
- # Prepare Coreboot for compilation
- elif [ "$1" == "pre_build_coreboot" ]; then
- # Copy the config
- cp "config/coreboot.config" coreboot/.config
-
- # Goto the Coreboot directory
- cd coreboot
-
- # Build toolchain
- make crossgcc-i386 CPUS=${nproc} -b
-
- # Build IASL
- make -j${nproc} iasl
-
- # Get back
- cd ..
- # Build Coreboot
- elif [ "$1" == "build_coreboot" ]; then
- # Goto the coreboot directory
- cd coreboot
- # Clean last build
- make clean
- rm ../out/coreboot.rom
- # Just make
- make -j${nproc} || make -j${nproc}
- # Exit if failed
- if [ $? -ne 0 ]; then
- printf "Failed to build Coreboot.\nExiting...\n"
- exit 1
- fi
- # Get back
- cd ..
- # Copy the resulting binary to a more accessible folder
- if [ ! -d out/ ]; then mkdir out/; fi
- mv coreboot/build/coreboot.rom out/coreboot.rom
- # Build GRUB
- elif [ "$1" == "build_grub" ]; then
- # Check if the GRUB code is present
- if [ ! -d "grub/.git" ]; then
- printf "No GRUB repository found in grub/\nDownload the code first\n"
- exit 1
- fi
- # Change title just for goofs
- sed -i "s/_(\"GNU GRUB version %s\"), PACKAGE_VERSION/\"COREBOOT\"/g" grub/grub-core/normal/main.c
- # Copy the config
- cp "config/grub.config" "grub/.config"
- # Clean last build
- cd grub
- make clean
- cd ..
- # Build GRUB
- cd grub
- ./autogen.sh
- ./configure --with-platform=coreboot --disable-werror
- make -j${nproc}
- cd ..
- # Assemble the GRUB payload
- elif [ "$1" == "assemble_grub" ]; then
- printf "Assembling the GRUB payload\n"
-
- # Load modules config
- source "config/grub_modules.conf"
-
- # Assemble GRUB
- grub/grub-mkstandalone \
- --grub-mkimage="grub/grub-mkimage" \
- -O i386-coreboot \
- -o "out/grub.elf" \
- -d "grub/grub-core/" \
- --fonts= --themes= --locales= \
- --modules="${grub_modules}" \
- --install-modules="${grub_install_modules}" \
- /boot/grub/grub.cfg="config/grub_memdisk.cfg" \
- /dejavusansmono.pf2="misc/dejavusansmono_24bold.pf2" \
- /boot/grub/layouts/usqwerty.gkb="misc/usqwerty.gkb"
- # Configure SeaBIOS to chainload with GRUB
- elif [ "$1" == "config_seabios" ]; then
- printf "Configure SeaBIOS\n"
- if [ ! -f "out/coreboot.rom" ]; then
- printf "No Coreboot image found.\nBuild Coreboot first.\n"
- exit 1
- fi
- # Set GRUB as the default boot device
- printf "/rom@img/grub2\n" > "out/bootorder"
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" add -f "out/bootorder" -n bootorder -t raw
- rm -f "out/bootorder"
- # Hide SeaBIOS
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" add-int -i 0 -n etc/show-boot-menu
- # Don't load anything else
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" add-int -i 0 -n etc/pci-optionrom-exec
- # Print the contents of the CBFS volume
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" print
- # Install and config GRUB
- elif [ "$1" == "install_grub" ]; then
- printf "Install GRUB in the CBFS volume\n"
- if [ ! -f "out/coreboot.rom" ]; then
- printf "No Coreboot image found.\nBuild Coreboot first.\n"
- exit 1
- fi
- # Compress and add GRUB payload
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" add-payload -c lzma -f "out/grub.elf" -n img/grub2 && rm "out/grub.elf"
- # Add grub.cfg
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" add -f "config/grub.cfg" -n grub.cfg -t raw
- # Print the contents of the CBFS volume
- coreboot/util/cbfstool/cbfstool "out/coreboot.rom" print
- # Flashing activities
- elif [ "$1" == "flash" ]; then
-
- # Define which programmer to use
- case "$3" in
-
- # Internal
- "internal" )
- programmer="internal:laptop=force_I_want_a_brick"
- ;;
-
- # Raspberry Pi
- "rpi" )
- programmer="linux_spi:dev=/dev/spidev0.0"
- ;;
-
- # Arduino Boards with Xu2 USB chips
- "u2" )
- programmer="serprog:dev=/dev/ttyACM0:115200"
- ;;
- # Arduino Boards with FTDI USB chips
- "ftdi" )
- programmer="serprog:dev=/dev/ttyUSB0:2000000"
- ;;
-
- # Exit if no programmer is specified
- * )
- printf "You must specify the programmer\n"
- exit 1
- ;;
-
- esac
-
- # Write to the flash chip
- if [ "$2" == "write" ]; then
-
- # Exit if Coreboot hasn't been successfully compiled yet
- if [ ! -f "out/coreboot.rom" ]; then
- printf "Build Coreboot first\n"
- exit 1
- fi
-
- flashrom -p $programmer -w "out/coreboot.rom"
- # Do consecutive reads of the flash chip and compare them
- elif [ "$2" == "read" ]; then
- mkdir binaries/reads
-
- for i in {1..5}; do
- flashrom -p $programmer -r "binaries/reads/bios$i.bin"
- md5sum "binaries/reads/*.bin"
- done
-
- # Check if the flash chip is detected
- elif [ "$2" == "check" ]; then
- flashrom -p $programmer
- fi
- # Exit if no operation is specified
- else
- printf "No operation specified\n"
- exit 1
-
- fi
|