Boot Raspberry Pi 4 from USB

Ruan BekkerRuan Bekker
2 min read

Finally, I was able to boot my Raspberry Pi 4's form USB.

Flash normal method, then update and upgrade:

$ sudo apt update && sudo apt upgrade -y 
$ sudo apt full-upgrade -y
$ sudo rpi-update

View the bootload version:

$ vcgencmd bootloader_version
May 10 2019 19:40:36  
version d2402c53cdeb0f072ff05d52987b1b6b6d474691 (release)  
timestamp 0  

Then reboot:

$ sudo reboot

When we view the version again we can see it changed:

$ vcgencmd bootloader_version
Apr 16 2020 18:11:26  
version a5e1b95f320810c69441557c5f5f0a7f2460dfb8 (release)  
timestamp 1587057086  

We need to configure eeprom to include beta updates:

$ sudo apt install rpi-eeprom -y
$ sudo sed -i 's/critical/beta/g' /etc/default/rpi-eeprom-update

We can get the latest version:

$ ls /lib/firmware/raspberrypi/bootloader/beta/pieeprom-

Patch to the latest update:

$ sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-06-15.bin
BCM2711 detected  
Dedicated VL805 EEPROM detected  
BOOTFS /boot  
*** INSTALLING /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-06-15.bin  ***
BOOTFS /boot  
EEPROM update pending. Please reboot to apply the update.  

View the version:

$ vcgencmd bootloader_version
Apr 16 2020 18:11:26  
version a5e1b95f320810c69441557c5f5f0a7f2460dfb8 (release)  
timestamp 1587057086  

We can view the config:

$ vcgencmd bootloader_config
[all]
BOOT_UART=0  
WAKE_ON_GPIO=1  
POWER_OFF_ON_HALT=0  
DHCP_TIMEOUT=45000  
DHCP_REQ_TIMEOUT=4000  
TFTP_FILE_TIMEOUT=30000  
TFTP_IP=  
TFTP_PREFIX=0  
BOOT_ORDER=0x1  
SD_BOOT_MAX_RETRIES=3  
NET_BOOT_MAX_RETRIES=5  
[none]
FREEZE_VERSION=0  

Then reboot:

$ sudo reboot

View the config again and ensure BOOT_ORDER includes 0xf41:

$ vcgencmd bootloader_config
[all]
BOOT_UART=0  
WAKE_ON_GPIO=1  
POWER_OFF_ON_HALT=0  
DHCP_TIMEOUT=45000  
DHCP_REQ_TIMEOUT=4000  
TFTP_FILE_TIMEOUT=30000  
ENABLE_SELF_UPDATE=1  
DISABLE_HDMI=0  
BOOT_ORDER=0xf41

$ vcgencmd bootloader_version
Jun 15 2020 14:36:19  
version c302dea096cc79f102cec12aeeb51abf392bd781 (release)  
timestamp 1592228179  

Now remove the SDCard and flash a new SDCard with raspbian and insert both into a computer:

$ df -h
Filesystem      Size   Used  Avail Capacity iused      ifree %iused  Mounted on  
/dev/disk2s1   252Mi   54Mi  198Mi    22%       0          0  100%   /Volumes/boot
/dev/disk3s1   252Mi   52Mi  200Mi    21%       0          0  100%   /Volumes/boot 1

Now copy the *.dat and *.elf files from the patched SDCard to the new SDCard:

$ cp /Volumes/boot/*.dat /Volumes/boot\ 1/
$ cp /Volumes/boot/*.elf /Volumes/boot\ 1/

Source:
- https://www.youtube.com/watch?v=zVhYvvrGhMU

Performance tests with USB:

Writes:  
sync; dd if=/dev/zero of=/root/tempfile bs=1M count=512; sync  
512+0 records in  
512+0 records out  
536870912 bytes (537 MB, 512 MiB) copied, 7.73295 s, 69.4 MB/s

Direct Read  
hdparm -t /dev/sda1  
/dev/sda1:
 Timing buffered disk reads: 256 MB in  2.14 seconds = 119.55 MB/sec

Cached Read:  
hdparm -T /dev/sda1  
/dev/sda1:
 Timing cached reads:   1748 MB in  2.00 seconds = 873.86 MB/sec

Performance tests with SDCard:

Writes:  
sync; dd if=/dev/zero of=/root/tempfile bs=1M count=512; sync  
512+0 records in  
512+0 records out  
536870912 bytes (537 MB, 512 MiB) copied, 96.8187 s, 5.5 MB/s

Direct Read:  
hdparm -t /dev/mmcblk0p1  
/dev/mmcblk0p1:
 Timing buffered disk reads: 130 MB in  3.01 seconds =  43.23 MB/sec

Cached Read:  
hdparm -T /dev/mmcblk0p1

/dev/mmcblk0p1:
 Timing cached reads:   1616 MB in  2.00 seconds = 808.21 MB/sec
0
Subscribe to my newsletter

Read articles from Ruan Bekker directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ruan Bekker
Ruan Bekker

I have a passion for problem solving, building things and making businesses succeed. I’m madly curious by heart, so I’m very hungry for knowledge and you will always find my trying and testing out new things to stay ahead of the game.