RPi model 4b with 8 GB RAM + 64 bit + USB SSD

@lxn

RPi 4b 8GB + 64 bit

Here is the latest on RPi 4b with 8GB RAM.
If one installs the 64 bit OS provided by Archlinux Arm on a uSD card, it will not work on a RPi 4 8GB RAM model. It starts to boot, tries to find the USB controllers, resets and starts to boot again in a constant loop.

To fix this, I simply put the uSD card in a RPi 4b with 4GB RAM. It boots properly. Then basically I do a pacman -Syu which updates to the latest packages. Now the uSD can be put back in the RPi 4b 8GB RAM and it will boot properly. I assume when Arch Linux Arm refreshes their base image, the problem just might go away.

In the mean time, I have provided an image that has been fixed in the above manner.
See this post for instructions for doing this.

RPi 4b 8GB + 64 bit + USB SSD

The 32 bit OS will run on a RPi 4b 8GB device from a USB SSD just fine. A 64 bit OS on RPi4 8GB will not work at this time. Here is where I am at on this

Install the 64 bit OS on a USB SSD. On a working Linux computer in a Temporary folder, create two mount points, I use MP1 and MP2
$ mkdir MP1 MP2

$ lsblk -f
you should see the USB SSD listed, probably as /dev/sda1 and /dev/sda2 or perhaps /dev/sdb
/dev/sda1 will be the vfat boot directory of the uSD

Then mount /dev/sda1 to MP1 and mount /dev/sda2 to MP2
$ sudo mount /dev/sda1 MP1
$ sudo mount /dev/sda2 MP2
$ cd MP1

You can now do a ls -l and see the contents of the uSD boot directory. Here is a snippet
-rwxr-xr-x 1 root root 708 May 27 12:44 boot.scr
-rwxr-xr-x 1 root root 636 May 27 12:44 boot.txt
-rwxr-xr-x 1 root root 239 May 27 12:44 mkscr

These appear to be the files of importance for informing the device where to look for the uSD cards root directory.
boot.txt contains configuration information in text form
mkscr is a script which creates boot.scr from the info in boot.txt
boot.scr is the file the uSD device looks at during boot up.

$ cat boot.txt
# After modifying, run ./mkscr

# Set root partition to the second partition of boot device
part uuid ${devtype} ${devnum}:2 uuid

setenv bootargs console=ttyS1,115200 console=tty0 root=PARTUUID=${uuid} rw rootwait smsc95xx.macaddr="${usbethaddr}"

if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /Image; then
  if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile}; then
    if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} /initramfs-linux.img; then
      booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
    else
      booti ${kernel_addr_r} - ${fdt_addr_r};
    fi;
  fi;
fi

Notice the first comment. # After modifying, run ./mkscr

# Set root partition to the second partition of boot device
part uuid ${devtype} ${devnum}:2 uuid

As the comment states, this line sets the root partition to the second partition of boot device
I am baffled by the syntax of this line. The first word “part” must be a function somewhere. Maybe in uboot? I assume the rest are parameters?

setenv bootargs console=ttyS1,115200 console=tty0 root=PARTUUID=${uuid} rw rootwait smsc95xx.macaddr="${usbethaddr}

This line sets the environment info. The key is

root=PARTUUID=${uuid}

To find the uuid of the uSD card

$ ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 Sep 22 08:44 3DFB-71CA -> ../../sda1
lrwxrwxrwx 1 root root 10 Sep 22 08:44 7f766f0a-2150-440d-9792-682b113717b1 -> ../../sda2

To find the PARTUUID of the uSD

ls -l /dev/disk/by-partuuid
total 0
lrwxrwxrwx 1 root root 10 Sep 22 08:44 0cf15fa9-01 -> ../../sda1
lrwxrwxrwx 1 root root 10 Sep 22 08:44 0cf15fa9-02 -> ../../sda2

Now, when the RPi 4b tries to boot from the uSD card, the error code refers to not finding device 0cf15fa9-02.

For a remedy, I have tried manually to set

setenv bootargs ..... root=PARTUUID=0cf15fa9-02 .....

Major fail.

I am hoping that @jonathon or someone else can perhaps provide some insight on this.

Pudge

3 Likes

Thank you very much for sharing this! It will be very useful to me in a very short time because I’ve got hooked on the pi and ordered the 8GB RAM model.

However, for now I have the 4 GB RAM model and would like to boot it from the SDD with the 64 bit OS.

(It didn’t work out installing with the instructions in the archlinuxarm.org website and the result was the same with your script in https://github.com/endeavouros-arm/image-install).

Should this just work? I think you haven’t referred to this situation here or on the "recommendation for SD cards" post.

1 Like

Ooops, my bad. It should just work, and it did work at one time. When it worked, in /boot was a file named “cmdline.txt” which contained the setenv bootargs which could be edited to “root=/dev/sda2”

Now they are doing as described above in the

RPi 4b 8GB + 64 bit + USB SSD

section which is to set the root device via a PARTUUID which I haven’t figured out what they doing in order to edit it for USB devices.

Pudge

1 Like