Also x86 hat (siehe zum warum die Geschichte:
https://de.wikipedia.org/wiki/X86-Prozessor#Geschichte):
- einen einheitlichen Basisbefehlssatz (den haben alle CPUs ab dem Intel 8086 und sind damit abwärtskompatibel zum Intel 8086) + neuere zusätzliche Befehle, welche effizienter sind, aber nicht zwingend unterstützt werden müssen, damit die CPU läuft
- eine einheitliche Art wie das System gebootet wird (was muss wie und in welcher Reihenfolge angesprochen werden?)
- einheitliche Bussysteme, denn x86-CPUs sind keine System-on-a-Chip-Konstruktionen (d. h. GPU, CPU, Speicher, Taktgeber, etc. sind ein einzelnes Modul), sondern müssen mit austauschbaren Komponenten zusammenarbeiten können
- keine speziellen Treiber für die CPU und Peripherie (RAM, GPU, etc.) ist normalerweise unabhängig von der CPU
ARM hat:
- einen hoffentlich einheitlichen Befehlssatz innerhalb einer Generation (ARMv6, ARMv7, etc.) mit ggf. herstellerspezifischen Erweiterungen
- keine einheitliche Art das System zu booten -> deswegen braucht es für fast jede ARM-Hardware ein separates Image, manchmal wird sowas wie ein UEFI verwendet, ein andermal muss man irgendwas auf einen Flashspeicher schreiben, etc.
- proprietäre Bussysteme, da sich alles auf einem einzelnen Chip befindet, dadurch unterscheiden sich diese Systeme ggf. von Hersteller zu Hersteller
- spezielle Treiber für den SoC, da dieser nicht nur die standardisierten CPU-Befehle, sondern auch Speicher, GPU, Sensoren, usw. enthält.
Bei ARM ist also alles variabel, außer dem Befehlssatz für die CPU. Aber wie die restlichen Komponenten im Chip angesprochen werden müssen, ist nicht bekannt (z. B. das im Chip enthaltene Kameramodul oder der enthaltene Helligkeitssensor). Um überhaupt eine Verbindung z. B. zur Kamera zu bekommen, musst Du also erst einmal herausfinden wie die Elektronik im jeweiligen ARM-Chipsatz geschalten ist. Hast Du dann eine Verbindung zur Kamera, benötigst Du noch die passenden Treiber, um deren Daten auch korrekt auswerten zu können. Eine Kamera kannst Du bei ARM auch via USB anschließen, aber es kann eben sein, dass der Chiphersteller die Kamera zu einem Teil vom SoC gemacht hat. Und da jeder SoC anders ist, braucht man auch für jeden SoC (abseits der CPU) wieder neuen Support im Kernel.
Bei x86 hast Du hingegen Standards, z. B. BIOS/UEFI zum Booten, PCIe und USB für hinzugefügte Peripherie (z. B. Sensoren, Kameras, etc.). Du weißt also bereits wie Du alle verbundenen Geräte ansprechen musst, da USB oder PCIe immer gleich funktioniert und in der CPU selbst keine Peripherie enthalten ist. Die Kamera in diesem Beispiel ist also z. B. immer über USB angeschlossen und damit musst Du nicht mehr herausfinden, wie Du überhaupt eine Verbindung zur Kamera bekommst. Du musst nur mittels Treiber die Datensignale korrekt auswerten und bist fertig.
Evtl. hilft auch diese Seite von Debian weiter:
https://www.debian.org/releases/jessie/arm64/ch02s01.html.de
Besser kann ich das heute nicht erklären, ich kann ansonsten noch reddit (z. B. /r/linux) empfehlen, da ich dort heute einige Diskussionen zu dem Thema gesehen habe. Dort sind auch mehr Leute, die sich wirklich gut mit Hardware auskennen (mein Fokus liegt ja eher auf Software).
EDIT:
Beim Raspberry Pi ist übrigens kein UEFI für den Systemstart verantwortlich, auch nicht die CPU, sondern die GPU! (Quelle: c't Artikel:
https://books.google.de/books?id=4w3lDAAAQBAJ&pg=PA18&lpg=PA18&source=bl&ots=48jznD90Ws&sig=ACfU3U0NZX596n44GR2izMBW0MsbTjUFfw&hl=en&sa=X&ved=2ahUKEwiB5YjLyJjqAhWjnVwKHU9TDaYQ6AEwAHoECAoQAQ#v=onepage&f=false und dieser Thread bei Hackernews:
https://news.ycombinator.com/item?id=22014393)
Btw.: Hier ist einer dieser langen Threads auf Reddit:
https://www.reddit.com/r/linux/comments/hedo9j/