I kernel variano da produttore a produttore. Molti di questi kernel provengono dalla linea pura di sorgenti di kernel disponibili su CAF, ciò che questi produttori fanno è prendere quelle fonti di stock, modificarle in base alla scheda / chipset utilizzata e implementare i propri driver.
Dai un'occhiata in giro, ci sono variazioni di touchscreen, variazioni di chipset wifi, per non parlare di accelerometro, sensori, batterie, bussola, suono, grafica.
Prendendo ad esempio un sorgente del kernel da HTC, non funzionerà su un Samsung e viceversa.
I produttori sono liberi di scegliere i vari bit che vengono incorporati nel circuito. Non ci sono regole rigide o veloci. Da qui il sacco di hacking / modifiche per far funzionare correttamente il kernel.
Non devi mai confrontarti con i kernel di distribuzione Linux desktop in cui sono presenti PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet in quanto sono un gioco a sfera completamente diverso. La differenza principale con CentOS e il kernel Linux di Android è questa: TUTTI i driver sono compilati come moduli o integrati, quindi qualsiasi distribuzione Linux "funzionerà immediatamente". Ancora una volta, con le distribuzioni Linux desktop - hai un'architettura - x86 quindi un kernel Linux, ad esempio un PC Dell, può funzionare immediatamente su un Lenovo a condizione che i driver standard siano compilati.
Non dimenticare, nel mondo Android, ci sono variazioni del kernel create per specifici chipset ARM, come ARMv6, ARMv7, c'è TEGRA, c'è EXYNOS e sono binari incompatibili tra loro. Quindi se un kernel è compilato per TEGRA, dimenticalo, non funzionerà su ARMv7!
Il motivo per cui alcuni kernel su Android sembrano essere "rotti" dipende dal produttore. Alcuni (Zte è un ottimo esempio) rilasciano una fonte macellata che può essere compilata dalla fonte ma non si avvia a causa di un driver mancante non coperto dalla licenza GPLv2 o GPLv3. Questo è il problema, quindi alcuni hacker devono andare in giro per github alla ricerca di alcuni indizi; alcuni produttori, se non tutti, rispettano. L'attuale incarnazione del sorgente di Zte è presumibilmente 2.6.35.7, ma in realtà la sua base di sorgente 2.6.32.9 con molte modifiche non rappresenta quindi il vero sorgente del kernel per 2.6.35.7!
È qui che i produttori devono rilasciare le rispettive fonti, non solo per essere conformi a GPLv2 o versioni successive, ma piuttosto perché la comunità sia in grado di modificarlo, come l'aggiunta di funzionalità di overclocking.
Quindi ci sono hacking coinvolti dietro le quinte e molti problemi con i driver che cercano di farlo funzionare, e non è nemmeno facile eseguire il debug. Alcuni driver possono essere concessi in licenza incrociata, MA NON possono essere distribuiti a seconda della clausola e delle condizioni come negoziata.
Per fortuna, tutto è cambiato ora con la linea di fonti del kernel 3.xx, poiché i driver Android sono ora integrati nelle fonti tradizionali. Ma c'è un gotcha!
Prova a trasferire un kernel 3.xx su un telefono esistente che ha circa 12-18 mesi; Non una possibilità di una palla di neve all'inferno avrebbe funzionato, perché, a causa dei diversi fattori, le fonti 3.xx sono molto diverse dalla fonte 2.6.xe richiederebbero un sacco di hacking per farlo funzionare - dovrei sapere, ho provato porting della sorgente 2.6.38.6 per Zte Blade e fallito.
Allo stesso modo, l'ultima versione del kernel 3.0.1 - lavorando sul progetto ics4blade su Modaco, ha fatto numerosi tentativi per portarlo, ma questo è dovuto al semplice fatto che Zte ha fatto un brutto pasticcio del sorgente che ha reso quasi impossibile il porting .