Kernel bervariasi dari produsen ke produsen. Banyak dari kernel tersebut berasal dari sumber kernel murni yang ditemukan di CAF, yang dilakukan oleh produsen ini adalah mengambil sumber stok tersebut, memodifikasinya sesuai dengan papan / chipset yang digunakan, juga, mengimplementasikan driver mereka sendiri.
Perhatikan baik-baik di sekitar Anda, ada variasi layar sentuh, variasi chipset wifi, belum lagi, akselerometer, sensor, baterai, kompas, suara, grafik.
Mengambil satu sumber kernel dari HTC misalnya tidak akan berfungsi pada Samsung, dan sebaliknya.
Pabrikan bebas untuk memilih-ceri atau mengambil-out berbagai bit yang bisa dimasukkan ke dalam papan sirkuit. Tidak ada aturan keras atau cepat yang terlibat. Karenanya banyak peretasan / modifikasi agar kernel berfungsi dengan baik.
Anda tidak boleh, dibandingkan dengan kernel distribusi Linux desktop yang memiliki PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet karena mereka adalah permainan ball-park yang sama sekali berbeda. Perbedaan utama dengan CentOS dan dengan Kernel Linux Android adalah ini - SEMUA driver dikompilasi baik sebagai modul atau built-in, maka setiap distribusi Linux hanya akan "bekerja di luar kotak". Sekali lagi, dengan distribusi Linux desktop - Anda memiliki satu arsitektur - x86 karenanya satu kernel Linux dari katakanlah Dell PC, dapat bekerja di luar kotak pada Lenovo asalkan driver standar rawa dikompilasi.
Jangan lupa, di dunia Android, ada variasi dari kernel yang dibangun untuk chipset ARM tertentu, seperti ARMv6, ARMv7, ada TEGRA, ada EXYNOS, dan mereka biner tidak kompatibel satu sama lain. Karenanya jika kernel dikompilasi untuk TEGRA, lupakan saja, itu tidak akan berfungsi pada ARMv7!
Alasan beberapa kernel di Android tampaknya "rusak" adalah ke pembuatnya. Beberapa (Zte adalah salah satu contoh yang sangat baik) melepaskan sumber yang dibantai yang dapat dikompilasi dari sumber tetapi gagal untuk boot karena driver yang hilang yang tidak tercakup oleh lisensi GPLv2 atau GPLv3. Itulah masalahnya, oleh karena itu beberapa peretas harus pergi berkeliling github mencari beberapa petunjuk; beberapa produsen, jika tidak semua, patuh. Inkarnasi sumber Zte saat ini konon adalah 2.6.35.7, tetapi dalam kenyataannya basis sumber 2.6.32.9 sebenarnya dengan banyak modifikasi sehingga tidak mewakili sumber kernel sejati untuk 2.6.35.7!
Di sinilah produsen harus merilis sumbernya masing-masing, tidak hanya karena tidak sesuai dengan GPLv2 atau yang lebih baru, tetapi lebih bagi komunitas untuk dapat memodifikasinya, seperti menambahkan kemampuan overclocking.
Oleh karena itu ada peretasan yang terlibat di balik layar dan banyak mengotak-atik driver yang mencoba membuatnya berfungsi, dan tidak mudah untuk debug juga .. Beberapa driver mungkin memiliki lisensi silang, TETAPI tidak dapat didistribusikan tergantung pada klausa dan ketentuannya seperti dinegosiasikan.
Untungnya, itu semua berubah sekarang dengan sumber kernel 3.xx, karena driver Android sekarang terintegrasi ke sumber-sumber utama. Tapi ada gotcha!
Coba porting kernel 3.xx ke handset yang sudah ada yang berumur sekitar 12-18 bulan; Bukan peluang bola salju di neraka akan berhasil, itu karena, dari faktor yang berbeda, sumber 3.xx sangat berbeda dengan sumber 2.6.x dan akan mengambil banyak peretasan untuk membuatnya berfungsi - saya harus tahu, telah mencoba porting sumber 2.6.38.6 untuk Zte Blade dan gagal.
Demikian juga, rilis kernel 3.0.1 terbaru - ketika mengerjakan proyek ics4blade di Modaco, telah melakukan banyak upaya untuk port itu tetapi itu ke fakta sederhana bahwa Zte membuat kekacauan yang sangat buruk dari sumber yang membuat porting hampir tidak mungkin dilakukan .