SHARE
TWEET

csb_patcher.sh public FINAL STABLE release - 16thAugust 2019

a guest Aug 16th, 2019 104 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/sh
  2. #
  3. #          csb_patcher.sh: coreboot and SeaBIOS patcher script.
  4. #
  5. #  Conveniently and securely gets, checks SHA256 and installs some of my
  6. # patches from this page - https://review.coreboot.org/q/status:open+banon
  7. #   and also gets a collection of useful floppy-based operating systems.
  8. #      Please send your feedback to Mike Banon <mikebdp2@gmail.com>
  9. #
  10.  
  11. # Keys
  12. enter=$( printf '\015' )
  13. ctrl_c=$( printf '\003' )
  14. ctrl_x=$( printf '\030' )
  15. ctrl_z=$( printf '\032' )
  16.  
  17. # Formatting
  18. bold="\e[1m"
  19. bred="\e[1;31m"
  20. bgreen="\e[1;32m"
  21. byellow="\e[1;33m"
  22. bend="\e[0m"
  23.  
  24. # Asks a question '$1' and waits for Y/N user input, printing a decision - with '$2' message if Y.
  25. yesno () {
  26.     printf "$1 [Y/N] "
  27.     yesno_old_stty_cfg=$( stty -g )
  28.     stty raw -echo
  29.     while true ; do
  30.         yesno_answer=$( head -c 1 )
  31.         case "$yesno_answer" in
  32.             *"$ctrl_c"*|"$ctrl_x"*|"$ctrl_z"*)
  33.                 stty "$yesno_old_stty_cfg"
  34.                 printf "${bred}TERMINATED${bend}\n"
  35.                 exit 1
  36.                 ;;
  37.             *"y"*|"Y"*)
  38.                 stty "$yesno_old_stty_cfg"
  39.                 printf "${bgreen}YES${bend}$2\n"
  40.                 return 0
  41.                 ;;
  42.             *"n"*|"N"*)
  43.                 stty "$yesno_old_stty_cfg"
  44.                 printf "${byellow}NO${bend}\n"
  45.                 return 1
  46.                 ;;
  47.         esac
  48.     done
  49. }
  50.  
  51. # Waits until a user presses Enter.
  52. encontinue () {
  53.     printf "\npress [ENTER] to continue... "
  54.     encontinue_old_stty_cfg=$( stty -g )
  55.     stty raw -echo
  56.     while true ; do
  57.         encontinue_answer=$( head -c 1 )
  58.         case "$encontinue_answer" in
  59.             *"$ctrl_c"*|"$ctrl_x"*|"$ctrl_z"*)
  60.                 stty "$encontinue_old_stty_cfg"
  61.                 printf "${bred}TERMINATED${bend}\n"
  62.                 exit 1
  63.                 ;;
  64.             *"$enter"*)
  65.                 stty "$encontinue_old_stty_cfg"
  66.                 printf "\n"
  67.                 return 0
  68.                 ;;
  69.     esac
  70.     done
  71. }
  72.  
  73. # Checks if a command '$1' exists.
  74. command_exists() {
  75.     if [ ! -x "$( command -v $1 )" ] ; then
  76.         printf "\n${bred}ERROR${bend}: command ${bold}$1${bend} is not found !\n"
  77.         encontinue
  78.         return 1
  79.     else
  80.         return 0
  81.     fi
  82. }
  83.  
  84. # Checks if a file '$1' exists.
  85. file_exists () {
  86.     if [ ! -f "$1" ] ; then
  87.         printf "\n${byellow}WARNING${bend}: file ${bold}$1${bend} is not found !\n"
  88.         encontinue
  89.         return 1
  90.     else
  91.         return 0
  92.     fi
  93. }
  94.  
  95. # Force removes a file '$2' and then copies a file '$1' to '$2'.
  96. copier () {
  97.     if file_exists "$1" ; then
  98.         rm -f "$2"
  99.         cp "$1" "$2"
  100.         return 0
  101.     else
  102.         return 1
  103.     fi
  104. }
  105.  
  106. # Force removes a file '$2' and then moves a file '$1' to '$2'.
  107. mover () {
  108.     if file_exists "$1" ; then
  109.         rm -f "$2"
  110.         mv "$1" "$2"
  111.         return 0
  112.     else
  113.         return 1
  114.     fi
  115. }
  116.  
  117. # Checks if line '$1' contains the text '$2'.
  118. checker () {
  119.     case "$1" in
  120.         *"$2"*)
  121.             return 0
  122.             ;;
  123.         *)
  124.             return 1
  125.             ;;
  126.     esac
  127. }
  128.  
  129. # Prints the lines of a file '$2' which contain the text '$1'.
  130. grepper () {
  131.     if file_exists "$2" ; then
  132.         while IFS= read -r grepper_line
  133.         do
  134.             case "$grepper_line" in
  135.             *"$1"*)
  136.                 printf '%s\n' "$grepper_line"
  137.                 ;;
  138.         esac
  139.         done < "$2"
  140.         return 0
  141.     else
  142.         return 1
  143.     fi
  144. }
  145.  
  146. # Checks if a file '$2' contains the text '$1'.
  147. grepcheck () {
  148.     if file_exists "$2" ; then
  149.         while IFS= read -r grepcheck_line
  150.         do
  151.             case "$grepcheck_line" in
  152.                 *"$1"*)
  153.                     return 0
  154.                     ;;
  155.             esac
  156.         done < "$2"
  157.         return 1
  158.     else
  159.         return 1
  160.     fi
  161. }
  162.  
  163. # Replaces the lines containing the text '$2' of a file '$1' with a line '$3'.
  164. sedder () {
  165.     if file_exists "$1" ; then
  166.         csb_sedder_tmp="./.csb_sedder"
  167.         rm -f "$csb_sedder_tmp"
  168.         while IFS= read -r sedder_line
  169.         do
  170.             case "$sedder_line" in
  171.                 *"$2"*)
  172.                     if [ ! -z "$3" ] ; then
  173.                         printf '%s\n' "$3" >> "$csb_sedder_tmp"
  174.                     fi
  175.                     ;;
  176.                 *)
  177.                     printf '%s\n' "$sedder_line" >> "$csb_sedder_tmp"
  178.                     ;;
  179.             esac
  180.         done < "$1"
  181.         mover "$csb_sedder_tmp" "$1"
  182.         return 0
  183.     else
  184.         return 1
  185.     fi
  186. }
  187.  
  188. # Downloads a file '$1' from a link '$2' using the options '$3' and checks if this was successful.
  189. wgetter () {
  190.     rm -f "$1"
  191.     if [ -z "$3" ] ; then
  192.         wget "$2"
  193.     else
  194.         wget "$3" "$2"
  195.     fi
  196.     if [ -f "$1" ] ; then
  197.         wgetter_file_size=$(($( wc -c < "$1" )))
  198.         if [ "$wgetter_file_size" -eq "0" ] ; then
  199.             rm -f "$1"
  200.         fi
  201.     fi
  202.     if [ ! -f "$1" ] ; then
  203.         printf "\n${byellow}WARNING${bend}: can't download a ${bold}$1${bend} file !"
  204.         printf "\n         Please check your Internet connection and try again.\n"
  205.         encontinue
  206.         return 1
  207.     else
  208.         return 0
  209.     fi
  210. }
  211.  
  212. # Unzips the archive '$1', optional '$2' for -j path inside the archive, and then force removes it.
  213. unzipper () {
  214.     if file_exists "$1" ; then
  215.         if [ -z "$2" ] ; then
  216.             unzip "$1"
  217.         else
  218.             unzip -j "$1" "$2"
  219.         fi
  220.         rm -f "$1"
  221.         return 0
  222.     else
  223.         return 1
  224.     fi
  225. }
  226.  
  227. # Expands a file '$1' with zeroes using a dd to '$2' size - e.g. to a standard floppy size 1474560.
  228. expander () {
  229.     if file_exists "$1" && [ ! -z "$2" ] ; then
  230.         expander_file_size=$(($( wc -c < "$1" )))
  231.         if [ "$expander_file_size" -lt "$2" ] ; then
  232.             dd if=/dev/zero of=$1 bs=1 count=1 seek="$(( $2 - 1 ))" conv=notrunc iflag=nocache
  233.         fi
  234.         return 0
  235.     else
  236.         return 1
  237.     fi
  238. }
  239.  
  240. # Compares sha256sum of '$1.img' floppy image with '$2' and creates a hidden '.$1' file if matches.
  241. floppy_verifier () {
  242.     rm -f "./.$1"
  243.     cd "./../"
  244.     if [ ! -z "$2" ] ; then
  245.         if file_exists "./floppies/$1.img" ; then
  246.             floppy_verifier_sha256sum_correct="$2  ./floppies/$1.img"
  247.             floppy_verifier_sha256sum_my=$( sha256sum "./floppies/$1.img" )
  248.             printf "\n=== sha256sum should be:\n${bold}$floppy_verifier_sha256sum_correct${bend}\n"
  249.             if [ "$floppy_verifier_sha256sum_my" = "$floppy_verifier_sha256sum_correct" ] ; then
  250.                 printf "^^^ this is correct, ./floppies/${bold}$1.img${bend} is verified and could be added.\n\n"
  251.                 cd "./floppies/"
  252.                 touch "./.$1"
  253.                 return 0
  254.             else
  255.                 printf "${bold}^^^ ! MISMATCH for ./floppies/$1.img ! Check sha256sum manually: sha256sum ./floppies/$1.img${bend}\n"
  256.                 encontinue
  257.                 cd "./floppies/"
  258.                 return 1
  259.             fi
  260.         else
  261.             printf "\n${byellow}WARNING${bend}: cannot find ./floppies/${bold}$1.img${bend} !\n"
  262.             printf "\n         Please re-download a set of floppies.\n"
  263.             encontinue
  264.             return 1
  265.         fi
  266.     else
  267.         printf "\n${byellow}WARNING${bend}: ./floppies/${bold}$1.img${bend} - is a rolling release, its' SHA256 checksum"
  268.         printf "\n         is changing constantly and not provided by $1 project, so not checked.\n"
  269.         encontinue
  270.         cd "./floppies/"
  271.         touch "./.$1"
  272.         return 0
  273.     fi
  274. }
  275.  
  276. # Downloads a collection of floppies, for the purpose of adding them later to a coreboot ROM image.
  277. floppy_mass_downloader () {
  278.     printf "\n"
  279.     if [ ! -d "./floppies/" ]; then
  280.         mkdir "./floppies/"
  281.     fi
  282.     cd "./floppies/"
  283.     # KOLIBRI
  284.     if command_exists "7za" ; then
  285.         if wgetter "./latest-img.7z" "https://builds.kolibrios.org/eng/latest-img.7z" ; then
  286.             rm -f "./kolibri.img"
  287.             7za x "./latest-img.7z"
  288.             rm -f "./latest-img.7z"
  289.            floppy_verifier "kolibri" "" # IS A ROLLING RELEASE, NO SHA256 VERIFICATION
  290.         fi
  291.     else
  292.         printf "\n${byellow}WARNING${bend}: cannot get ./floppies/${bold}kolibri.img${bend} without ${bold}7za${bend}\n"
  293.         encontinue
  294.     fi
  295.     # FREEDOS
  296.     if wgetter "./FD12FLOPPY.zip" "https://www.freedos.org/download/download/FD12FLOPPY.zip" ; then
  297.         unzipper "./FD12FLOPPY.zip" "FLOPPY.img"
  298.         mover "./FLOPPY.img" "./freedos.img"
  299.            floppy_verifier "freedos" "de2fb84dc2f132324549e89d58c6383497ec1af538c5b0ecde389fb748b9d537"
  300.     fi
  301.     # MICHALOS
  302.     printf "\n${byellow}WARNING${bend}: getting ./floppies/${bold}michalos.img${bend} could take a couple of minutes...\n\n"
  303.     if wgetter "./MichalOS.zip" "https://sourceforge.net/projects/michalos/files/MichalOS%202.0/MichalOS.zip" "--content-disposition" ; then
  304.         unzipper "./MichalOS.zip" "disk_images/michalos.img"
  305.           floppy_verifier "michalos" "749b12bfb9e93db2061097eafd6f3e5e83072cfaa943c10b74680dd62d5a589f"
  306.     fi
  307.     # SNOWDROP
  308.     if wgetter "./snowdrop.img" "http://sebastianmihai.com/downloads/snowdrop/snowdrop.img" ; then
  309.           floppy_verifier "snowdrop" "" # IS A ROLLING RELEASE, NO SHA256 VERIFICATION
  310.     fi
  311.     # FIWIX
  312.     if wgetter "./fiwix.img" "https://www.fiwix.org/fiwix-1.0.1-i386-initrd.img" "--output-document=fiwix.img" ; then
  313.              floppy_verifier "fiwix" "dbec2994ec619c9954327ab0b983ab24cd362406a2e515c35c79c79bd6417cfd"
  314.     fi
  315.     # MEMTEST
  316.     if wgetter "./memtest86+-5.01.floppy.zip" "https://www.memtest.org/download/5.01/memtest86+-5.01.floppy.zip" ; then
  317.         unzipper "./memtest86+-5.01.floppy.zip" "floppy/memtestp.bin"
  318.         expander "./memtestp.bin" "1474560"
  319.         mover "./memtestp.bin" "./memtest.img"
  320.            floppy_verifier "memtest" "364535abd0d105da9396df6015e480c4d4c52b07dcc4e1d4756bde8ef87a30f1"
  321.     fi
  322.     # TATOS
  323.     if wgetter "./tatos.img" "https://github.com/tatimmer/tatOS/raw/master/tatOS.img" "--output-document=tatos.img" ; then
  324.         expander "./tatos.img" "1474560"
  325.              floppy_verifier "tatos" "2c66f884498a4fe7b469bc213aebfccd84a09fd7ace1b3b4b3e747e2392c35d1"
  326.     fi
  327.     # PLOP
  328.     if wgetter "./plpbt-5.0.15.zip" "https://download.plop.at/files/bootmngr/plpbt-5.0.15.zip" ; then
  329.         unzipper "./plpbt-5.0.15.zip" "plpbt-5.0.15/plpbt.img"
  330.         mover "./plpbt.img" "./plop.img"
  331.               floppy_verifier "plop" "f170759966ec4efe60c8531158344a234d7543c8de81e54c8c1bb9d2d69eaf27"
  332.     fi
  333.     # FLOPPYBIRD
  334.     if wgetter "./floppybird.img" "https://github.com/mikebdp2/floparchive/raw/master/floppies_extra/floppybird.img" ; then
  335.         floppy_verifier "floppybird" "5db1b469e25e9eda7b8c0f666d6b655bab083c85618a9453ee72f1201cca840f"
  336.     fi
  337.     # Some floppies have the weird permissions after their extraction
  338.     floppy_mass_downloader_floppies=$( find . -name "*.img" )
  339.     if [ ! -z "$floppy_mass_downloader_floppies" ] ; then
  340.         chmod 755 "./"*".img"
  341.     fi
  342.     # Return back to ./coreboot/
  343.     cd "./../"
  344.     return 0
  345. }
  346.  
  347. # Adds a './pci1002,$1.rom' to coreboot '$3' ROM using '$2' cbfstool, printing '$4'/'$5'/'$6' info.
  348. atombios_adder () {
  349.     if file_exists "$2" && file_exists "$3" ; then
  350.         if [ -f "./pci1002,$1.rom" ] ; then
  351.             atombios_adder_cbfs=$( "$2" "$3" print )
  352.             if checker "$atombios_adder_cbfs" "pci1002,$1.rom" ; then
  353.                 printf "\n${bgreen}NOTE${bend}: ./${bold}pci1002,$1.rom${bend} for ${bold}$5 : $6${bend} is already at your $3.\n"
  354.             else
  355.                 if yesno "\nAdd a ./${bold}pci1002,$1.rom${bend} for ${bold}$5 : $6${bend} to your $3 now? ${bold}~$4${bend}" ", adding..." ; then
  356.                     "$2" "$3" add -f "./pci1002,$1.rom" -n "pci1002,$1.rom" -t optionrom
  357.                 else
  358.                     printf "\n${bold}You can add it later by running:${bend}"
  359.                     printf "\n${bold}        $2 $3 add -f ./pci1002,$1.rom -n pci1002,$1.rom -t optionrom${bend}\n\n"
  360.                 fi
  361.             fi
  362.             return 0
  363.         else
  364.             printf "\n${byellow}WARNING${bend}: cannot find ./${bold}pci1002,$1.rom${bend} ,"
  365.             printf "\n         please re-apply ${bold}AMD atombios${bend} patch.\n"
  366.             encontinue
  367.             return 1
  368.         fi
  369.     else
  370.         return 1
  371.     fi
  372. }
  373.  
  374. # Adds a '$1.img' floppy image to coreboot '$3' ROM using '$2' cbfstool, printing '$4' size info.
  375. floppy_adder () {
  376.     if file_exists "$2" && file_exists "$3" ; then
  377.         if [ -f "./floppies/$1.img" ] ; then
  378.             if [ -f "./floppies/.$1" ] ; then
  379.                 floppy_adder_cbfs=$( "$2" "$3" print )
  380.                 if checker "$floppy_adder_cbfs" "floppyimg/$1.lzma" ; then
  381.                     printf "\n${bgreen}NOTE${bend}: ./floppies/${bold}$1.img${bend} is already at your $3.\n"
  382.                 else
  383.                     if checker "$1" "plop" ; then
  384.                         printf "\n${byellow}WARNING${bend}: ./floppies/${bold}$1.img${bend} - is proprietary: all its' source code is closed !"
  385.                         printf "\n         Add it only if you really need it and trust the author of $1 project.\n"
  386.                         encontinue
  387.                     fi
  388.                     if yesno "\nAdd a ./floppies/${bold}$1.img${bend} to your $3 now? ${bold}~$4${bend}" ", adding..." ; then
  389.                         "$2" "$3" add -f "./floppies/$1.img" -n "floppyimg/$1.lzma" -t raw -c lzma
  390.                     else
  391.                         printf "\n${bold}You can add it later by running:${bend}"
  392.                         printf "\n${bold}        $2 $3 add -f ./floppies/$1.img -n floppyimg/$1.lzma -t raw -c lzma${bend}\n\n"
  393.                     fi
  394.                 fi
  395.                 return 0
  396.             else
  397.                 printf "\n${byellow}WARNING${bend}: there was a SHA256 mismatch for ./floppies/${bold}$1.img${bend} -"
  398.                 printf "\n         check sha256sum manually: sha256sum ./floppies/${bold}$1.img${bend}\n"
  399.                 encontinue
  400.                 return 1
  401.             fi
  402.         else
  403.             printf "\n${byellow}WARNING${bend}: cannot find ./floppies/${bold}$1.img${bend} !\n"
  404.             printf "\n         Please re-download a set of floppies.\n"
  405.             encontinue
  406.             return 1
  407.         fi
  408.     else
  409.         return 1
  410.     fi
  411. }
  412.  
  413. # Adds a set of AtomBIOS/floppies ('$1') to coreboot '$3' ROM copied to '$4', using '$2' cbfstool.
  414. cbfs_mass_adder () {
  415.     if ! grepcheck "how to submit coreboot changes" ./MAINTAINERS ; then
  416.         printf "\n${byellow}WARNING${bend}: not sure if I am inside the coreboot directory,"
  417.         printf "\n         trying to add a ${bold}$1${bend} set from here - could fail.\n\n"
  418.     fi
  419.     if file_exists "$2" && file_exists "$3" ; then
  420.         if checker "$1" "atom" || checker "$1" "flop" ; then
  421.             copier "$3" "$4"
  422.             printf "\n${bold}=== $4 - initial memory map${bend}\n\n"
  423.             "$2" "$4" print
  424.             printf "\n"
  425.             if checker "$1" "atom" ; then
  426. ###
  427. ### https://review.coreboot.org/c/coreboot/+/33886
  428. ### G505S AtomBIOS ROMs: known good binaries with a script to check their SHA256
  429. ###
  430.            csb_patcher "atombios" "33886"  "1" "0687d68" "c4cc7de2ee48ed28fe6d1067aa5151f579f9ea7b58213b8e45da17720dc8e1e7" "$1" "AMD "
  431.                 atombios_adder "990b" "$2" "$4" "62K" "Lenovo G505S with A10-5750M"  "iGPU HD-8650G"
  432.                 atombios_adder "6663" "$2" "$4" "33K" "Lenovo G505S with A10-5750M"  "dGPU HD-8570M"
  433.                 atombios_adder "6665" "$2" "$4" "32K" "Lenovo G505S with A10-5750M"  "dGPU R5-M230"
  434.                 atombios_adder "9830" "$2" "$4" "59K" "ASUS AM1I-A with Athlon-5370" "iGPU HD-8400 / R3-Series"
  435.                 atombios_adder "990c" "$2" "$4" "62K" "ASUS A88XM-E with A10-6700"   "iGPU HD-8670D"
  436.             fi
  437.             if checker "$1" "flop" ; then
  438.                 if [ ! -d "./floppies/" ] ; then
  439.                     printf "\n"
  440.                     floppy_mass_downloader
  441.                 fi
  442.                 # Default boot order: the last floppy added - is the first floppy to boot!
  443.                 floppy_adder "floppybird" "$2" "$4"    "3K"
  444.                       floppy_adder "plop" "$2" "$4"   "75K"
  445.                      floppy_adder "tatos" "$2" "$4"   "60K"
  446.                    floppy_adder "memtest" "$2" "$4"   "45K"
  447.                      floppy_adder "fiwix" "$2" "$4"  "459K"
  448.                   floppy_adder "snowdrop" "$2" "$4"  "145K"
  449.                   floppy_adder "michalos" "$2" "$4"  "257K"
  450.                    floppy_adder "freedos" "$2" "$4"  "698K"
  451.                    floppy_adder "kolibri" "$2" "$4" "1264K"
  452.             fi
  453.             printf "\n${bold}=== $4 - final memory map${bend}\n\n"
  454.             "$2" "$4" print
  455.             printf "\nYou can use ./build/${bold}coreflop.rom${bend} now !\n\n"
  456.             return 0
  457.         else
  458.             return 1
  459.         fi
  460.     else
  461.         return 1
  462.     fi
  463. }
  464.  
  465. # Finds the files of '$1' extension, saves the result to '$2' log and prints a message with '$3'.
  466. csb_finder () {
  467.     csb_finder_files=$( find . -name "*.$1" )
  468.     if [ ! -z "$csb_finder_files" ] ; then
  469.         printf "%25s\n" "*.$1 - YES" >> "$2"
  470.         printf "\n${byellow}WARNING${bend}: found ${bold}*.$1${bend} files at these locations :\n"
  471.         printf "$csb_finder_files"
  472.         printf "\n  That means - Some patches $3\n"
  473.         encontinue
  474.         return 0
  475.     else
  476.         printf "%24s\n" "*.$1 - NO" >> "$2"
  477.         return 1
  478.     fi
  479. }
  480.  
  481. # Prints a csb_patcher_log '$1' with a custom highlighting.
  482. csb_printer () {
  483.     if ! file_exists "$1" ; then
  484.         return 1
  485.     fi
  486.     while IFS= read -r csb_printer_line
  487.     do
  488.         case "$csb_printer_line" in
  489.             *"orig - YES"*)
  490.                 printf "${csb_printer_line%???}${byellow}YES" # YELLOW
  491.                 ;;
  492.             *"rej - YES"*)
  493.                 printf "${csb_printer_line%???}${bred}YES" # RED
  494.                 ;;
  495.             *"YES"*)
  496.                 printf "${csb_printer_line%???}${bgreen}YES" # GREEN
  497.                 ;;
  498.             *"orig - NO"*|*"rej - NO"*)
  499.                 printf "${csb_printer_line%??}${bgreen}NO" # GREEN
  500.                 ;;
  501.             *"NO"*)
  502.                 printf "${csb_printer_line%??}${byellow}NO" # YELLOW
  503.                 ;;
  504.             *"FAILURE_1"*)
  505.                 printf "${csb_printer_line%?????????}${bred}FAILURE_1" # RED
  506.                 ;;
  507.             *"FAILURE_2"*)
  508.                 printf "${csb_printer_line%?????????}${bred}FAILURE_2" # RED
  509.                 ;;
  510.             *"FAILURE_3"*)
  511.                 printf "${csb_printer_line%?????????}${bred}FAILURE_3" # RED
  512.                 ;;
  513.             *"\\\\"*)
  514.                 printf "${bold}${csb_printer_line%?????}\\\\\!//" # ALIEN HAIR
  515.                 ;;
  516.             *)
  517.                 printf "${bold}$csb_printer_line"
  518.                 ;;
  519.         esac
  520.         printf "${bend}\n"
  521.     done < "$1"
  522.     return 0
  523. }
  524.  
  525. # Configure some popular options of a config file '$1'.
  526. csb_configurer () {
  527.     if file_exists "$1" ; then
  528.         csb_configurer_tmp="./.csb_configurer"
  529.         rm -f "$csb_configurer_tmp"
  530.         # Check if the configuration of this board is supported.
  531.         grepper "CONFIG_BOARD_" "$1" > "$csb_configurer_tmp"
  532.         if grepcheck "_LENOVO_G505S=y" "$csb_configurer_tmp" ; then
  533.             printf "\n\n${bgreen}[CONFIG]${bend} Questions about your Lenovo G505S\n\n"
  534.         else
  535.             if grepcheck "_ASUS_AM1I_A=y" "$csb_configurer_tmp" ; then
  536.                 printf "\n\n${bgreen}[CONFIG]${bend} Questions about your ASUS AM1I-A\n\n"
  537.             else
  538.                 printf "\n\n${byellow}WARNING${bend}: sorry, I don't know how to configure a board of ${bold}$1${bend}\n"
  539.                 encontinue
  540.                 return 1
  541.             fi
  542.         fi
  543.         # Common part both for LENOVO G505S and ASUS AM1I-A.
  544.         sedder "$1" "### CSB_CONFIGURER OPTIONS" ""
  545.         printf "### CSB_CONFIGURER OPTIONS\n" >> "$1"
  546.         sedder "$1" "# CONFIG_DRIVERS_INTEL_WIFI is not set" ""
  547.         if ! yesno "Do you have an Intel WiFi adapter?" "" ; then
  548.             printf "# CONFIG_DRIVERS_INTEL_WIFI is not set\n" >> "$1"
  549.         fi
  550.         # This part is only for LENOVO G505S.
  551.         if grepcheck "_LENOVO_G505S=y" "$csb_configurer_tmp" ; then
  552.             sedder "$1" "CONFIG_MULTIPLE_VGA_ADAPTERS=y" ""
  553.             sedder "$1" "CONFIG_VGA_BIOS_DGPU=y" ""
  554.             sedder "$1" "CONFIG_VGA_BIOS_DGPU_FILE=\"pci1002,6663.rom\"" ""
  555.             sedder "$1" "CONFIG_VGA_BIOS_DGPU_ID=\"1002,6663\"" ""
  556.             sedder "$1" "CONFIG_VGA_BIOS_DGPU_FILE=\"pci1002,6665.rom\"" ""
  557.             sedder "$1" "CONFIG_VGA_BIOS_DGPU_ID=\"1002,6665\"" ""
  558.             if yesno "Do you have a Discrete GPU?" "" ; then
  559.                 printf "CONFIG_MULTIPLE_VGA_ADAPTERS=y\n" >> "$1"
  560.                 printf "CONFIG_VGA_BIOS_DGPU=y\n"         >> "$1"
  561.                 if yesno "No for HD-8570M, Yes for R5-M230" "" ; then
  562.                     printf "CONFIG_VGA_BIOS_DGPU_FILE=\"pci1002,6665.rom\"\n" >> "$1"
  563.                     printf "CONFIG_VGA_BIOS_DGPU_ID=\"1002,6665\"\n"          >> "$1"
  564.                 else
  565.                     printf "CONFIG_VGA_BIOS_DGPU_FILE=\"pci1002,6663.rom\"\n" >> "$1"
  566.                     printf "CONFIG_VGA_BIOS_DGPU_ID=\"1002,6663\"\n"          >> "$1"
  567.                 fi
  568.             fi
  569.         fi
  570.         # Common part both for LENOVO G505S and ASUS AM1I-A.
  571.         # HUDSON_SATA_MODE=0
  572.         sedder "$1" "# NATIVE" ""
  573.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=0" ""
  574.         # HUDSON_SATA_MODE=1
  575.         sedder "$1" "# RAID" ""
  576.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=1" ""
  577.         sedder "$1" "CONFIG_RAID_ROM_ID=\"1022,7802\"" ""
  578.         sedder "$1" "CONFIG_RAID_ROM_FILE=\"src/southbridge/amd/agesa/hudson/raid.bin\"" ""
  579.         sedder "$1" "CONFIG_RAID_MISC_ROM_FILE=\"src/southbridge/amd/agesa/hudson/misc.bin\"" ""
  580.         sedder "$1" "CONFIG_RAID_MISC_ROM_POSITION=0xFFF00000" ""
  581.         # HUDSON_SATA_MODE=2
  582.         sedder "$1" "# AHCI" ""
  583.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=2" ""
  584.         sedder "$1" "CONFIG_AHCI_ROM_ID=\"1022,7801\"" ""
  585.         sedder "$1" "# CONFIG_HUDSON_AHCI_ROM is not set" ""
  586.         # HUDSON_SATA_MODE=3
  587.         sedder "$1" "# LEGACY IDE" ""
  588.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=3" ""
  589.         # HUDSON_SATA_MODE=4
  590.         sedder "$1" "# IDE to AHCI" ""
  591.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=4" ""
  592.         # HUDSON_SATA_MODE=5
  593.         sedder "$1" "# AHCI7804" ""
  594.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=5" ""
  595.         sedder "$1" "CONFIG_AHCI_ROM_ID=\"1022,7804\"" ""
  596.         # HUDSON_SATA_MODE=6
  597.         sedder "$1" "# IDE to AHCI7804" ""
  598.         sedder "$1" "CONFIG_HUDSON_SATA_MODE=6" ""
  599.         sedder "$1" "# CONFIG_HUDSON_AHCI_ROM is not set" ""
  600.         # HUDSON_SATA_MODE SETUP
  601.         if yesno "Do you have a SSD? (enable AHCI if Y)" "" ; then
  602.             printf "# AHCI\n" >> "$1"
  603.             printf "CONFIG_HUDSON_SATA_MODE=2\n" >> "$1"
  604.             printf "CONFIG_AHCI_ROM_ID=\"1022,7801\"\n" >> "$1"
  605.             printf "# CONFIG_HUDSON_AHCI_ROM is not set\n" >> "$1"
  606.         else
  607.             printf "# NATIVE\n" >> "$1"
  608.             printf "CONFIG_HUDSON_SATA_MODE=0\n" >> "$1"
  609.         fi
  610.         # Board has been configured.
  611.         printf "\n"
  612.         rm -f "$csb_configurer_tmp"
  613.         return 0
  614.     else
  615.         return 1
  616.     fi
  617. }
  618.  
  619. #
  620. # Conveniently and securely gets, checks SHA256 and installs a patch.
  621. # Arguments are the patch properties:
  622. #     $1 - new diff name, could be also a part of extracted scripts' filename
  623. #     $2 - change ID number,       part of download link to review.coreboot.org
  624. #     $3 - change revision number, part of download link to review.coreboot.org
  625. #     $4 - diff filename inside the downloaded archive, will be renamed to $1
  626. #     $5 - diff known good SHA256 checksum, will be used for SHA256 verification
  627. #     $6 - filepath where to save a csb_patcher_log which will be printed later
  628. #     $7 - info about the target of a patch, if not specified ("") it is common
  629. #
  630. csb_patcher () {
  631.     if ! wgetter "./patch?zip" "https://review.coreboot.org/changes/$2/revisions/$3/patch?zip" ; then
  632.         printf "${bold}^^^ ! Can't download a $7$1 patch ! Check your Internet.${bend}\n"
  633.         printf "%31s\n" "$7$1 - FAILURE_1" >> "$6"
  634.         csb_printer "$6"
  635.         exit 1
  636.     fi
  637.     unzipper "./patch?zip"
  638.     mover "./$4.diff" "./$1.diff"
  639.     csb_patcher_sha256sum_correct="$5  ./$1.diff"
  640.     csb_patcher_sha256sum_my=$( sha256sum "./$1.diff" )
  641.     printf "\n=== sha256sum should be:\n${bold}$csb_patcher_sha256sum_correct${bend}\n"
  642.     if [ "$csb_patcher_sha256sum_my" = "$csb_patcher_sha256sum_correct" ] ; then
  643.         printf "^^^ this is correct, "
  644.         csb_patcher_patch_title=$( grepper "Subject" "./$1.diff" )
  645.         csb_patcher_patch_title=${csb_patcher_patch_title#?????????????????}
  646.         if [ "$1" = "dgpu" ] || [ "$1" = "cfgsb" ] ; then
  647.             printf "will extract a ${bold}$7$1${bend} patch now...\n"
  648.             rm -f "./sha256sums_$1_correct.txt"
  649.             rm -f "./"*"_$1_patches.sh"
  650.             patch -p1 < "./$1.diff"
  651.             chmod +x "./"*"_$1_patches.sh"
  652.             "./get_$1_patches.sh"
  653.             if ! "./check_$1_patches.sh" ; then
  654.                 printf "%31s\n" "$7$1 - FAILURE_3" >> "$6"
  655.                 csb_printer "$6"
  656.                 exit 1
  657.             fi
  658.         else
  659.             printf "${bold}$7$1${bend} patch could be applied now...\n"
  660.         fi
  661.         if [ "$1" = "dgpu" ] || [ "$1" = "atombios" ] || \
  662.            [ "$1" = "tint" ] || [ "$1" = "seabios" ] || [ "$1" = "cfgsb" ] ; then
  663.             printf "\n\n${bgreen}[PATCH]${bend} $csb_patcher_patch_title\n\n"
  664.             if ! grepcheck "how to submit coreboot changes" ./MAINTAINERS ; then
  665.                 printf "\n${byellow}WARNING${bend}: not sure if I am inside the coreboot directory,"
  666.                 printf "\n         trying to add a ${bold}$1${bend} set from here - could fail.\n\n"
  667.             fi
  668.             if [ -f "./.$1" ] ; then
  669.                 printf "\n${byellow}WARNING${bend}: found a '.$1' hidden file at the current directory,"
  670.                 printf "\n         maybe you have applied this patch already.\n\n"
  671.             fi
  672.             if yesno "Apply a ${bold}$7$1${bend} patch now?" "" ; then
  673.                 if [ "$1" = "dgpu" ] || [ "$1" = "cfgsb" ] ; then
  674.                     "./apply_$1_patches.sh"
  675.                 else
  676.                     if [ "$1" = "atombios" ] ; then
  677.                         rm -f "./sha256sums_$1_correct.txt"
  678.                         rm -f "./"*"_$1_roms.sh"
  679.                         rm -f "./pci1002\,"*".rom"
  680.                         rm -f "./pci1002\,"*".rom.txt"
  681.                     fi
  682.                     if [ "$1" = "tint" ] ; then
  683.                         rm -f "./payloads/external/tint/tint.sh"
  684.                         rm -f "./payloads/external/tint/"*"_core.sh"
  685.                         rm -f "./payloads/external/tint/tint-0.04-nmu1_libpayload.patch"
  686.                     fi
  687.                     if [ "$1" = "seabios" ] ; then
  688.                         rm -f "./payloads/external/SeaBIOS/"*".patch"
  689.                     fi
  690.                     patch -p1 < "./$1.diff"
  691.                     if [ "$1" = "atombios" ] ; then
  692.                         chmod +x "./"*"_$1_roms.sh"
  693.                         "./extract_$1_roms.sh"
  694.                         printf "\n"
  695.                         if ! "./check_$1_roms.sh" ; then
  696.                             printf "%31s\n" "$7$1 - FAILURE_3" >> "$6"
  697.                             csb_printer "$6"
  698.                             exit 1
  699.                         fi
  700.                     fi
  701.                     if [ "$1" = "tint" ] ; then
  702.                         chmod +x "./payloads/external/tint/"*"_core.sh"
  703.                     fi
  704.                 fi
  705.                 touch ".$1"
  706.                 printf "%25s\n" "$7$1 - YES" >> "$6"
  707.                 if [ "$1" = "atombios" ] ; then
  708.                     encontinue
  709.                 fi
  710.             else
  711.                 printf "%24s\n" "$7$1 - NO" >> "$6"
  712.                 printf "\n${bold}You can apply it later by running:${bend}"
  713.                 if [ "$1" = "dgpu" ] || [ "$1" = "cfgsb" ]; then
  714.                     printf "\n${bold}        ./apply_$1_patches.sh${bend}\n"
  715.                 else
  716.                     printf "\n${bold}        patch -p1 < ./$1.diff${bend}\n"
  717.                 fi
  718.                 encontinue
  719.             fi
  720.         fi
  721.         if checker "$1" "config" ; then
  722.             rm -f "./configs/$1"*
  723.             patch -p1 < "./$1.diff"
  724.             printf "\n\n${bgreen}[PATCH]${bend} $csb_patcher_patch_title\n\n"
  725.             ls "./configs" > "./.csb_configs"
  726.             csb_patcher_config_name=$( grepper "$1" "./.csb_configs" )
  727.             rm -f "./.csb_configs"
  728.             printf "\n${bold}$csb_patcher_config_name could now be found at ./configs/${bend}"
  729.             printf "\n${bold}To use it, it should be copied to '.config' of your ./coreboot directory.${bend}\n\n"
  730.             if [ -f "./.config" ] ; then
  731.                 printf "\n${byellow}WARNING${bend}: copying it to ./.config will overwrite your current '.config'\n\n"
  732.             fi
  733.             if yesno "Copy it to ./.config now?" "" ; then
  734.                 copier "./configs/$csb_patcher_config_name" "./.config"
  735.                 printf "\n"
  736.                 printf "%25s\n" "$7$1 - YES" >> "$6"
  737.                 if yesno "Configure this ./.config now?" "" ; then
  738.                     csb_configurer "./.config"
  739.                 else
  740.                     printf "\n${bold}You can configure it later by running:${bend}"
  741.                     printf "\n${bold}        ./csb_patcher.sh config${bend}\n\n"
  742.                 fi
  743.             else
  744.                 printf "%24s\n" "$7$1 - NO" >> "$6"
  745.                 printf "\n${bold}You can copy it later by running:${bend}"
  746.                 printf "\n${bold}        cp ./configs/$csb_patcher_config_name ./.config${bend}\n"
  747.             fi
  748.             printf "\n${byellow}WARNING${bend}: important README at the beginning of ./$1.diff\n"
  749.             encontinue
  750.         fi
  751.         printf "\n\n"
  752.         return 0
  753.     else
  754.         printf "${bold}^^^ ! MISMATCH for a $7$1 patch ! Check sha256sum manually: sha256sum ./$1.diff${bend}\n"
  755.         printf "%31s\n" "$7$1 - FAILURE_2" >> "$6"
  756.         csb_printer "$6"
  757.         exit 1
  758.     fi
  759. }
  760.  
  761. #
  762. # Conveniently and securely gets, checks SHA256 and applies my collection of unofficial patches.
  763. #     $1 - filepath where to save a csb_patcher_log which will be printed later
  764. #
  765. csb_mass_patcher () {
  766. ###
  767. ### https://review.coreboot.org/c/coreboot/+/33874
  768. ### G505S dGPU support: scripts for applying the unofficial (not-merged-yet) patches
  769. ###
  770.                csb_patcher "dgpu" "33874"  "5" "56e0323" "d59b8e295caf35a27a6f7d52250b16be030eae629ddd300bfd27875e83724666" "$1" "G505S "
  771. ###
  772. ### https://review.coreboot.org/c/coreboot/+/33886
  773. ### G505S AtomBIOS ROMs: known good binaries with a script to check their SHA256
  774. ###
  775.            csb_patcher "atombios" "33886"  "1" "0687d68" "c4cc7de2ee48ed28fe6d1067aa5151f579f9ea7b58213b8e45da17720dc8e1e7" "$1" "AMD "
  776. ###
  777. ### https://review.coreboot.org/c/coreboot/+/33887
  778. ### tint: introduce the new tint build system with checksum verification
  779. ###
  780.                csb_patcher "tint" "33887"  "1" "66aec99" "928a5bd51c3731368b1ce7b65e759caf50316ab3fa0da8c336c9aae13736399f" "$1" ""
  781. ###
  782. ### https://review.coreboot.org/c/coreboot/+/32351
  783. ### SeaBIOS patches: advanced_bootmenu, multiple_floppies, writeprotected_usb
  784. ###
  785.             csb_patcher "seabios" "32351"  "6" "a2ceeaf" "728e934b2fb040d20862dcb74b532931cdded28f00fd130a0d5af92617ab880a" "$1" ""
  786. ###
  787. ### https://review.coreboot.org/c/coreboot/+/33885
  788. ### Disable SeaBIOS options not supported by hardware: scripts to apply the patches
  789. ###
  790.               csb_patcher "cfgsb" "33885"  "3" "2b2052d" "2313a21b83367f2640275339b4ccb8f93407f01bf6da3fd0cb6b2ec2c47fd237" "$1" "for-configs "
  791. ###
  792. ### https://review.coreboot.org/c/coreboot/+/32352
  793. ### configs: add Lenovo G505S sample configuration (use with dGPU patches)
  794. ###
  795. csb_patcher "config.lenovo_g505s" "32352" "17" "4e8ce39" "d96b8a7110bf914e2abfac237aeca8299b773ce2d2e2d037ef7c8f4fef1bcc70" "$1" ""
  796. ###
  797. ### https://review.coreboot.org/c/coreboot/+/33800
  798. ### configs: add ASUS AM1I-A sample configuration
  799. ###
  800.  csb_patcher "config.asus_am1i-a" "33800"  "4" "6a7ce97" "cb112b5f572ef509e2b89f222f094adfeb0224cd2ddabe0f783bc8ed5d645ca5" "$1" ""
  801.  
  802.     return 0
  803. }
  804.  
  805. # Prints a usage info for this ./csb_patcher.sh script.
  806. csb_usage () {
  807.     printf "${bold}===============${bend} ${bgreen}USAGE${bend} ${bold}================${bend}\n\n"
  808.     printf "${bold}./csb_patcher.sh${bend}\n"
  809.     printf "  patch your coreboot source code\n\n"
  810.     printf "${bold}./csb_patcher.sh${bend} ${byellow}help${bend} ${bold}|${bend} ${byellow}usage${bend}\n"
  811.     printf "  print this usage info\n\n"
  812.     printf "${bold}==================== Before building :${bend}\n\n"
  813.     printf "${bold}./csb_patcher.sh ${byellow}config${bend}\n"
  814.     printf "  configure some popular options\n\n"
  815.     printf "${bold}==================== After building :${bend}\n\n"
  816.     printf "${bold}./csb_patcher.sh ${byellow}atom${bend}\n"
  817.     printf "  add the AtomBIOS to coreboot.rom\n\n"
  818.     printf "${bold}./csb_patcher.sh ${byellow}flop${bend}\n"
  819.     printf "  add the floppies to coreboot.rom\n\n"
  820.     printf "${bold}./csb_patcher.sh ${byellow}atomflop${bend}\n"
  821.     printf "  both AtomBIOS VGA ROMs and floppies\n\n"
  822.     printf "${bold}./csb_patcher.sh${bend} ${byellow}print${bend}\n"
  823.     printf "     print a ./.csb_patcher log\n\n"
  824.     return 0
  825. }
  826.  
  827. #
  828. # MAIN PART OF A CSB_PATCHER SCRIPT
  829. #
  830.  
  831. if [ -z "$1" ] ; then
  832.     csb_patcher_log="./.csb_patcher"
  833.     rm -f "$csb_patcher_log"
  834.     if ! command_exists "wget" || \
  835.        ! command_exists "unzip" || \
  836.        ! command_exists "sha256sum" || \
  837.        ! command_exists "patch" ; then
  838.         exit 1
  839.     fi
  840.     printf '\n\n'                                       >> "$csb_patcher_log"
  841.     printf '                \\\\!//\n'                  >> "$csb_patcher_log"
  842.     printf '                (o o)\n'                    >> "$csb_patcher_log"
  843.     printf '            oOOo-(_)-oOOo\n'                >> "$csb_patcher_log"
  844.     printf 'Hi! I am coreboot and SeaBIOS patcher\n'    >> "$csb_patcher_log"
  845.     printf 'Please send your feedback to\n'             >> "$csb_patcher_log"
  846.     printf '      Mike Banon <mikebdp2@gmail.com>\n'    >> "$csb_patcher_log"
  847.     csb_printer "$csb_patcher_log"
  848.     encontinue
  849.     printf '\n=== CSB_PATCHER LOG. Patches applied?\n'  >> "$csb_patcher_log"
  850.  
  851.     csb_mass_patcher "$csb_patcher_log"
  852.  
  853.     if yesno "Download a ${bold}floppies${bend} collection?" "" ; then
  854.         floppy_mass_downloader
  855.                       printf "%25s\n" "floppies - YES"  >> "$csb_patcher_log"
  856.     else
  857.         printf "\n"
  858.                       printf "%24s\n" "floppies - NO"   >> "$csb_patcher_log"
  859.     fi
  860.  
  861.     printf '==================== Bad files found?\n'    >> "$csb_patcher_log"
  862.     csb_finder "orig" "$csb_patcher_log" "applied correctly although at slightly different lines, can ignore it."
  863.      csb_finder "rej" "$csb_patcher_log" "perhaps failed to apply, could result in a broken build! ${bred}Please report${bend}"
  864.  
  865.     printf '\n'                                         >> "$csb_patcher_log"
  866.     csb_printer "$csb_patcher_log"
  867.     csb_usage
  868. else
  869.     case "$1" in
  870.         *"print"*)
  871.             csb_patcher_log="./.csb_patcher"
  872.             csb_printer "$csb_patcher_log"
  873.             ;;
  874.         *"config"*)
  875.             csb_configurer "./.config"
  876.             ;;
  877.         *"atom"*|*"flop"*)
  878.             if ! command_exists "wget" || \
  879.                ! command_exists "unzip" || \
  880.                ! command_exists "sha256sum" ; then
  881.                 exit 1
  882.             fi
  883.             cbfs_mass_adder "$1" "./build/cbfstool" "./build/coreboot.rom" "./build/coreflop.rom"
  884.             ;;
  885.         *"help"*|*"usage"*)
  886.             printf "\n"
  887.             csb_usage
  888.             ;;
  889.         *)
  890.             printf "\n${bred}ERROR${bend}: unknown argument ${bold}$1${bend} !\n\n"
  891.             csb_usage
  892.             exit 1
  893.             ;;
  894.     esac
  895. fi
  896.  
  897. exit 0
  898.  
  899. #
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top