It is difficult to see what may be wrong. Here are some general tries I would start with. First make a working copy of your running installation and verify that the copy is still running on the RPi 3B. Only work with the copy.
Then I would use the serial debug console in the hope the kernel will tell me some errors before getting stuck. You have to purchase a serial to TTL adapter like this one https://www.amazon.com/ADAFRUIT-Industries-954-Serial-Raspberry/dp/B00DJUHGHI. There are much cheaper adapter from china and they are as good as that from adafruit but it takes weeks to get them. With a serial terminal program on your laptop you can manage the RasPi. On Linux I suggest to use tio /dev/ttyUSB0
, that's made for this. On the RasPi you have to enable the serial console with enable_uart=1
in /boot/config.txt
.
Then I would chroot
into the copy and perform a full-upgrade in the hope it will update the latest firmware for the RPi 4B. So insert the copied SD Card into your portable card reader and attach it to the RPi 4B. Then boot it with Raspbian Buster Lite as you already have done. Now you should find the SD Card maybe on /dev/sda
. Chroot to it:
rpi ~$ sudo -Es
rpi ~# mkdir /mnt/p2
rpi ~# mkdir /mnt/p2/boot
rpi ~# mount /dev/sda2 /mnt/p2
rpi ~# mount /dev/sda1 /mnt/p2/boot
rpi ~# cd /mnt/p2
rpi ~# mount --bind /proc proc
rpi ~# mount --bind /sys sys
rpi ~# mount --bind /dev dev
rpi ~# mount --bind /dev/pts dev/pts
rpi ~# mkdir run/udev
rpi ~# mount --bind /run/udev run/udev
rpi ~# LANG=C.UTF-8 chroot /mnt/p2 /bin/bash
rpi ~# apt update
rpi ~# apt full-upgrade
rpi ~# exit # from chroot
rpi ~# umount proc
rpi ~# umount sys
rpi ~# umount dev/pts
rpi ~# umount dev
rpi ~# umount run/udev
rpi ~# exit # from sudo
rpi ~$ sudo poweroff
Now boot with the upgraded SD Card. Good luck :-)
If it still doesn't work you can look at a very early bootup stage what debug messages the bootloader you give with the serial to TTL adapter. A Raspberry Pi 4B has its bootloader stored in an EEPROM so you can reflash it with another config. How to do it look at Raspberry Pi 4 boot EEPROM and in man rpi-eeprom-update
. Here in short the steps I have tested. Get the default configuration:
rpi ~$ rpi-eeprom-config /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2019-09-10.bin --out bootconf.txt
In bootconf.txt
I set BOOT_UART=1
and cleaned up spaces behind the last entry and blank lines at the end. I don't know why they are there. To make a new image with the modified configuration and flash it then do:
rpi ~$ rpi-eeprom-config /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2019-09-10.bin --config bootconf.txt --out pieeprom-new.bin
rpi ~$ sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
Now on reboot I get this additional output on the serial console where it should be able to see where booting get stuck:
[ 1284.473982] reboot: Restarting system
PM_RSTS: 0x00001020
RPi: BOOTLOADER release VERSION:f626c772 Sep 10 2019 10:41:52 BOOTMODE: 0x00000006 part: 0 BUILD_TIMESTAMP=1568112110
uSD voltage 1.8V
GLOBAL_RESET
PM_RSTS: 0x00001000
RPi: BOOTLOADER release VERSION:f626c772 Sep 10 2019 10:41:52 BOOTMODE: 0x00000006 part: 0 BUILD_TIMESTAMP=1568112110
uSD voltage 3.3V
SD HOST: 200000000 CTL0: 0x00000000 BUS: 100000 Hz div: 2000 status: 0x1fff0000 delay-ticks: 1080
SD HOST: 200000000 CTL0: 0x00000f00 BUS: 100000 Hz div: 2000 status: 0x1fff0000 delay-ticks: 1080
CID: 001b534d3030303030107ce814ef00f3
CSD: 400e00325b590000775d7f800a400000
CSD: VER: 1 logical blocks: 30557 mult: 1024 rd(len: 512 partial: 0 misalign: 0) sectors: 31291392
SD: bus-width: 4 spec: 2 SCR: 0x02358003 0x00000000
SWITCH_FUNC: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000038001800180018001800180c800
SD HOST: 200000000 CTL0: 0x00000f04 BUS: 40000000 Hz div: 6 status: 0x1fff0000 delay-ticks: 2
MBR: 0x00002000, 258048 type: 0x0c
MBR: 0x00041000,31025152 type: 0x8e
MBR: 0x00000000, 0 type: 0x00
MBR: 0x00000000, 0 type: 0x00
part-offset: 8192 oem: mkfs.fat volume: BOOT
rsc: 32 sectors-per-fat: 1985 clusters: 254046 cluster-size: 1 root-dir: 2 root-sectors: 0
WEL: 0x00002fa2 0x00040fff
PM_RSTS: 0x00001000
Partition: 0
part-offset: 8192 oem: mkfs.fat volume: BOOT
rsc: 32 sectors-per-fat: 1985 clusters: 254046 cluster-size: 1 root-dir: 2 root-sectors: 0
Loading config.txt hnd: 0x0001596f
Initialising SDRAM 'Micron' 16Gb x1 total-size: 16 Gbit 3200
Loading recovery.elf hnd: 0x00000000
Failed to read recovery.elf error: 6
Loading start4.elf hnd: 0x00024d8f
Loading fixup4.dat hnd: 0x0002efda
MEM GPU: 76 ARM: 948 TOTAL: 1024
FIXUP src: 128 256 dst: 948 1024
Starting start4.elf @ 0xfec00200
sudo apt-get update; sudo apt-get install --reinstall raspberrypi-bootloader raspberrypi-kernel
on the Pi3 which will put it back to the latest supported kernel/bootcode.rpi-update
in addition. It is only for testing unstable firmware and may increase trouble.