DOMANDA Domanda su linux e android

vale1234

Nuovo Utente
95
21
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?
 

pabloski

Utente Èlite
2,868
916
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.
 
U

Utente cancellato 371741

Ospite
Il punto piu che altro e' che i dispositivi android/aarch64 sono dispositivi embedded, oltre al fatto che nei dispositivi embedded si crea un kernel ad hoc, con abilitati solo i device + driver per quel dispositivo (platform devices), e a livello di boot e di bootloader cambia tutto rispetto a un pc. Lasciando perdere il secure boot, che e' un passaggio preliminare sugli arm64 che partono in secure world (vedi arm trustzone) che si puo utililzzare per la "chain of trust", nei dispositivi android si lavora su delle eMMC (protocololo sdio, considera un sd card su chip) divise in partizioni, il che assomiglierebbe al disco nvme di un pc, ma i bootloader dei sistemi android utilizzano dei pacchetti rom (in genere zip) con dentro divisi i binari da scrivere nelle varie partizioni. E' un sistema piu complesso, e il bootloader semplicemente gestisce queste "rom" che devono essere degli zip creati con determinati binari. Android poi utilizza una partizionie readonly per i ripristini, in genere bloccata con dm-verity. Insomma, rispetto a un PC cambiano molte, molte cose.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili