I am trying to install centos7 on Raspberry Pi 4b+ version.

Image for rpi4 of ARM64 and ARM32 on the official website (https://www.centos.org/download/) (https://ftp.yz.yamagata-u.ac.jp/pub/linux/centos-altarch/7.9 After downloading .2009/isos/aarch64/images/), I flashed it with balenaEtcher, but when I ran the Raspberry Pi, I faced an error saying "start4.elf is not compatible."

I tried Googling, and following the advice of a certain post, I pasted the start*.elf and fixup*.dat files inside the SD card where the raspberry pi OS was installed, which booted normally, to the SD card where CentOS was installed.

And the Raspberry Pi appears to have successfully booted into CentOS7.

I have no knowledge about bootloaders. What problems could the solution I applied cause? Are there any problems if I use it like this?

  • it is not clear what you are asking ... if you are having problems, then please describe them in your question
    – jsotola
    Nov 28, 2023 at 7:47
  • Create a new SDCard with the latest RaspiOS Bookworm on it. Copy /boot/firmware/fixup*.dat and /boot/firmware/start*.elf to /boot (or wherever Centos stores that stuff) on your Centos SDCard. That will then boot on your latest model of RPi 4B. (Note: there is no 4B+.)
    – Dougie
    Nov 28, 2023 at 9:45

1 Answer 1


When the Pi powers up, the first thing the SoC does is look for a (v)fat formatted partition at the beginning of the MBR style formatted SD card (unless you have configured it to use a different boot device). Non-EEPROM models (ie., everything but the 4 and 5) then load a preliminary bootloader from that partition. This (either the bootloader from the SD card or the EEPROM) then loads firmware consisting of a set of start[N][x|db|cd].elf files from the same partition into the GPU, which takes over and loads the OS kernel.

More details on that here: https://www.raspberrypi.com/documentation/computers/configuration.html#boot-folder-contents

So that stuff is important. It also works independently of the OS, meaning it is done the same way regardless of what OS is booted. The Linux kernel is also sort of independent of the OS userland, meaning you can use a variety of kernels, including custom ones and those compiled for another distro, as long as a corresponding set of modules can be found in /lib/modules/.1 The kernel is very specific about that.

Ideally IMO all distros should just use the official kernel and /boot files but many of them do not; this may result in broken installs that can be fixed as you did, by replacing them with stuff from the current RpiOS image.

Beware, however: The OS package manager keeps the /boot/ files updated. This only happens a few times a year, but it potentially means your distro will break the install again. Do your updates manually and watch for that or blacklist the package w/ the package manager and check an RpiOS image or this every so often. You could of course just use that git repo, I am not sure if it is actually ahead of the RpiOS distro but probably not by much. If you do that, be sure to also keep directories in /lib/modules current as well; unlike normal linux distros the policy on the Pi is to always replace the kernel, meaning there is only ever one (per model) in /boot as opposed to the previous one or two as well in case people want to regress easily.

  1. Actually a Pi using the proper kernel will boot without modules available but various things will not work.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.