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