Had also the problem that my raspbian card from pi3 did not run in pi4 after upgrade to buster.
I found out that the install skript of bootloader and kernel do skip the installation of rpi4 support when there is not enough space on /boot/. My boot partition was around 100 Mb, its from the time when rpi2 was new. You can check the size of your partition with:
df -H
or
mount
you can also check if the install skript says you havn’t enough space by reinstalling and checking the output of:
apt-get install --reinstall raspberrypi-bootloader* raspberrypi-kernel*
if you see the following output, you have the same Problem:
You do not have enough space in /boot to install this package.
Skipping Pi 4 support
To solve this problem i used a separate computer and changed the size of the /boot partition to at least 500Mb (usual size on other Linux) by the following steps. (assuming first partition is boot, second is root, using gparted for partion manipulation)
Backup whole SD
shrinking root Partition to the right to have free space for boot
copy content of boot partition to separate backupfolder
remember boot partition flags
delete and recreate boot partiton with the same filesystem in free space
set the partition flag from point 4
copy content of backupfolder (see point 3) into boot partion folder
check your /etc/fstab is still valid to boot (more to this following)
boot sdcard in rpi3 and reinstall “raspberrypi-bootloader* raspberrypi- kernel*”
boot sd in rpi4
my /etc/fstab did not reference /boot by uuid, if your fstab file has a entry like:
UUID=2e45-11ea /boot vfat defaults,noatime 0 2
you need to change the uuid to the new uuid of the new boot partition. You can find the uuid in gparted under information. i had no problem with my /etc/fstab, it has this entry:
/dev/mmcblk0p1 /boot vfat defaults,noatime 0 2