Kärnor varierar från tillverkare till tillverkare. Många av dessa kärnor kommer från den rena kärnkällan som finns på CAF, vad dessa tillverkare gör är att ta dessa lagerkällor, ändra dem så att de passar utifrån kortet / chipset som används, också implementera sina egna drivrutiner.
Ta en titt runt dig, det finns variationer av pekskärmar, variationer av wifi-chipsets, för att inte tala om, accelerometer, sensorer, batterier, kompass, ljud, grafik.
Ta en kärnkälla från för exempel HTC fungerar inte på en Samsung och tvärtom.
Tillverkarna står fritt att plocka ut eller källa ut olika bitar som integreras i kretskortet. Det är inga hårda eller snabba regler inblandade. Därav mycket hacking / modifieringar för att få kärnan att fungera ordentligt.
Du får aldrig jämföra med Linux-distributionskärnor där den har PCI, PCI-Express, SATA, VGA, SVGA, USB , Ethernet eftersom de är ett helt annat bollpark-spel. De stora skillnaderna med CentOS och med Android Linux Kernel är detta - ALLA drivrutiner är sammanställda antingen som moduler eller inbyggda, all Linux-distribution kommer därför helt enkelt att "fungera ur lådan". Återigen, med Linux-distributioner på skrivbordet - du har en arkitektur - x86, därmed en Linux-kärna från säg en Dell-dator, kan fungera ur lådan på en Lenovo förutsatt att bog-standard-drivrutinerna är kompilerade.
Glöm inte, i Android-världen finns det variationer av kärnan byggd för specifika ARM-chipsets, till exempel ARMv6, ARMv7, det finns TEGRA, det finns EXYNOS, och de är binära inkompatibla med varandra. Därför, om en kärna är kompilerad för TEGRA, glöm den, den fungerar inte på ARMv7!
Anledningen till att vissa kärnor på Android verkar vara "trasiga" beror på tillverkaren. Vissa (Zte är ett mycket bra exempel) släpper en slaktad källa som kan kompileras från källan men inte startar på grund av en saknad drivrutin som inte täcks av GPLv2- eller GPLv3-licensen. Det är problemet, därför måste vissa hackare leta efter github och leta efter några ledtrådar; vissa tillverkare, om inte alla, följer det. Den aktuella inkarnationen av Ztes källa är enligt uppgift 2.6.35.7, men i själva verket representerar den faktiska 2.6.32.9-källbasen med många modifieringar således inte den sanna kärnkällan för 2.6.35.7!
Detta är där tillverkarna måste släppa sina respektive källor, inte bara för att vara kompatibla med GPLv2 eller senare, utan snarare för att samhället ska kunna modifiera det, till exempel att lägga till överklockningsmöjligheter.
Därför finns det hacking bakom kulisserna och mycket bråk med förare som försöker få det att fungera, och det är inte lätt att felsöka heller .. Vissa förare kan vara korslicensierade, MEN kan inte distribueras beroende på klausulen och villkoren som förhandlats fram.
Tack och lov ändras allt nu med kärna 3.x.x. linje av källor, eftersom Android-drivrutiner nu är integrerade i de vanliga källorna. Men det finns en gotcha!
Försök att portera en 3.x.x. kärna till en befintlig telefon som är ungefär 12-18 månader gammal; Inte en snöbolls chans i helvete skulle det fungera, det beror på att, av de olika faktorerna, är 3.xx-källorna väldigt annorlunda än 2.6.x-källan och skulle ta mycket hacking för att få det att fungera - jag borde veta, har försökt portering 2.6.38.6 källa för Zte Blade och misslyckades.
På samma sätt har den senaste kärnutgåvan 3.0.1 - när man arbetar på ics4blade-projektet på Modaco gjort många försök att porta det men det beror på det enkla faktum att Zte gjorde en mycket dålig röra av källa som gjorde det omöjligt att portera.