Buongiorno a tutti,
Oggi vorrei farvi questa domanda:
Perché per installare Android su un dispositivo mobile devo trovare una rom specifica per esso, mentre con un pc desktop basta un file iso generale senza nulla di così specifico?
Perchè i dispositivi mobili non hanno il concetto di plug&play. In realtà non è vero del tutto per le nuove architetture basate su AArch64 e/o ARMv8a.
Il punto è che, su pc, il kernel si avvia e può enumerare tutti i dispositivi collegati al computer, semplicemente interrogando il bus pci ( e a cascata gli hub usb ). E grazie al plug&play, può impostare spazi dei registri, irq e altre risorse dinamicamente.
Nel mondo ARM è stato, per decenni, tutto hardcoded. Per cui, il kernel deve già contenere tutti i driver e quant'altro necessario a fare il boot su una certa piattaforma ed inizializzare correttamente tutto l'hardware presente. Prima era semplicemente un qualcosa di folle, ma per fortuna gli sviluppatori del kernel s'inventarono i Flattened Device Tree, che sono dei file che contengono una descrizione di tutte le periferiche e relative risorse ( irq, spazio dei registri, aperture, ecc... ) di un certo dispositivo. E sono compilati nel kernel però!! Da cui la necessità di avere un kernel ad hoc per ogni dispositivo.
Dovendo avere un kernel ad hoc, tanto vale avere anche tutto il resto, compresi alcuni programmi utente. Soprattutto se il SoC implementa cose non standard, come acceleratori particolari supportati solo dal software fornito dal produttore.
E tutto questo discorso vale tanto per Android ( che usa il kernel Linux come base ) che per GNU/Linux.
Poi c'è l'altra faccia della medaglia, cioè il boot loader. E lì c'è un altro vespaio, perchè è tutto custom, dal bootloader, a cosa fa esattamente, al layout delle partizioni, ai dispositivi supportati per il boot, fino ad eventuali protezioni ( simili al secure boot dei pc, ma più difficili da disabilitare ) e relative procedure per configurarli o disabilitarli. Spesso si risolve tutto con un "fastboot oem unlock", ma altre volte ci vogliono dei tool e/o chiavi crittografiche fornite dal produttore ( vedi Xiaomi per esempio ). A meno di non sfruttare qualche vulnerabilità della piattaforma e quindi bypassare i blocchi.
ARMv8 ha cambiato andazzo, accodandosi agli standard del mondo pc, a partire da pci ( con plug&play incluso ), uefi, secure boot, ecc... Ma non tutti i SoC sono così standardizzati!! Pensa al SoC M1 di Apple, AArch64, ma per il resto tutto custom e blindato.