Skip to content
Snippets Groups Projects
update-sysctl-firmware.sh 1.25 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/bin/bash
    
    
    FWPATH=../pocket-reform-sysctl-fw/build/sysctl.uf2
    
    # change to 2e8a:0003 if rp2040 is in "Raspberry Pi RP2 Boot" mode
    USBDEV=2e8a:000a
    
    # make sure the file is there
    strings $FWPATH | grep PREF1SYS > /dev/null
    if [[ $? != 0 ]]; then 
    	echo "Firmware file $FWPATH is invalid, exiting."
    	exit 1
    fi
    
    set -e
    
    # make sure we have picotool
    apt install -y picotool
    
    # identify system controller on usb bus
    
    COUNT=$(lsusb | grep $USBDEV | wc -l)
    
    if [[ $COUNT != 1 ]];
    then echo "RP2040 System Controller device not found or more than one found, exiting."
    
    fi
    
    # extract usb bus and device address numbers
    
    ROW=$(lsusb | grep $USBDEV)
    
    BUS=$(echo $ROW | cut -d ' ' -f 2)
    ADDR=$(echo $ROW | cut -d ' ' -f 4)
    ADDR=${ADDR//:}
    
    # make sure these are integers
    BUS=$(expr $BUS + 0)
    ADDR=$(expr $ADDR + 0)
    
    # ask for confirmation
    echo "Ready to flash System Controller (bus $BUS, address $ADDR). Make sure all your work is saved--the system will power down after the process is completed."
    echo ""
    echo "Press return to continue or CTRL+C to abort."
    read
    
    # flash! (this will hard power down the system)
    sync
    
    sleep 0.5
    # hack to prevent writes + fs corruption to rootfs
    echo u > /proc/sysrq-trigger
    sleep 0.5
    
    picotool load --bus $BUS --address $ADDR -f $FWPATH
    picotool reboot -f