Advertisement
orborbson

raspberry_fw_uploader

Mar 29th, 2025 (edited)
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.32 KB | Source Code | 0 0
  1. #!/data/data/com.termux/files/usr/bin/bash
  2.  
  3. info(){
  4.     case "${1}" in
  5.         "" | "--help" | "-h" ) echo -e "Użycie: `basename ${0}` <plik_firmware.uf2>\n\n[RP w trybie bootloadera]:\nPrzytrzymaj chwilę przycisk BOOT[SEL] podczas [re]startu."; exit 0 ;;
  6.     esac
  7.     if ! [[ -f "${1}" && "${1}" == *.[uU][fF]2 ]]; then echo "[BŁĄD]: podaj prawidłowy plik firmware w formacie \"uf2\""; exit 1; fi
  8.     if [[ "`xxd -ps -l 8 ${1}`" != "5546320a57515d9e" ]]; then echo "[BŁĄD]: plik \"${1}\" posiada niewłaściwy nagłówek \"uf2\""; exit 1; fi
  9. }
  10.  
  11. depends(){
  12.     declare -A app=( ["blkid"]="blk-utils" ["findmnt"]="util-linux" ["sudo"]="tsu" ["xxd"]="xxd" )
  13.     for k in "${!app[@]}"; do if command -v "${k}" > /dev/null 2>&1; then unset "app[$k]"; fi; done
  14.     if [ ${#app[@]} -gt 0 ]; then echo -e "[BŁĄD]: brak pakietów (${!app[@]}), aby zainstalować wpisz: \"pkg i ${app[@]}\""; exit 1; fi
  15.     unset app
  16. }
  17.  
  18. set_vars(){
  19.     FW_FILE="`realpath -q ${1}`"
  20.     TMPDIR="${TMPDIR:-/tmp}"
  21.     RP_DIR="${TMPDIR}/raspberry_firmware_flash"
  22. }
  23.  
  24. find_rp(){
  25.     echo -n ">> wykrywam RP w trybie bootloadera ... "
  26.     RP_DEV="`sudo blkid -l -n vfat -o device -t LABEL=RPI-RP2`"
  27.     if [ -z "${RP_DEV}" ]; then echo "[BŁĄD]"; exit 1; else echo -e "[OK]\n>> RP widoczne jako \"${RP_DEV}\""; fi
  28. }
  29.  
  30. mount_rp(){
  31.     if ! check_mnt; then
  32.         mkdir_rp
  33.         echo -n ">> montuję RP ... "
  34.         if ! sudo mount -t vfat "${RP_DEV}" "${RP_DIR}"; then echo "[BŁĄD]"; exit 1; else echo "[OK]"; fi
  35.     else
  36.         echo ">> katalog RP jest już zamontowany, nie montuję ponownie ..."
  37.     fi
  38. }
  39.  
  40. umount_rp(){
  41.     echo -n ">> odmontowuję ... "; sudo umount -q "${RP_DIR}" > /dev/null 2>&1
  42.     if [ $? -eq 0 ]; then echo "[OK]"; else echo "[BŁĄD]"; fi
  43. }
  44.  
  45. copy_firmware(){
  46.     echo -n ">> kopiuję firmware ... "
  47.     sudo cp -f "${FW_FILE}" "${RP_DIR}/" > /dev/null 2>&1
  48.     if [ $? -eq 0 ]; then echo "[OK]"; else echo "[BŁĄD]"; fi
  49. }
  50.  
  51. mkdir_rp(){
  52.     mkdir -p "${RP_DIR}" > /dev/null 2>&1
  53. }
  54.  
  55. check_mnt(){
  56.     if [ -z "${RP_DEV}" ]; then return 1; else findmnt "${RP_DEV}"; fi > /dev/null 2>&1
  57. }
  58.  
  59. clean(){
  60.     rm -fr "${RP_DIR}" > /dev/null 2>&1
  61. }
  62.  
  63. on_exit(){
  64.     if check_mnt; then umount_rp; clean; fi
  65. }
  66.  
  67. test_sudo(){
  68.     if [ `sudo id -u` -ne 0 ]; then "[BŁĄD]: \"sudo\" nie działa poprawnie"; exit 1; fi
  69. }
  70.  
  71. trap on_exit EXIT
  72. depends
  73. info "${1}"
  74. test_sudo
  75. set_vars "${1}"
  76. find_rp
  77. mount_rp
  78. copy_firmware
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement