Neden bu kadar çok farklı Android çekirdeği var (lütfen teknik cevap)


17

Android, tüm cihazlarda kullanılan ortak bir çekirdek değil mi? Örneğin CentOS, Dell, HP ve diğer çeşitli donanımlara yüklenir. Elbette farklı modüller var ama yine de CentOS.

CyanogenMod'un her zaman "kırık" olmasının nedeni nedir? Forumlarda her zaman bu sürücüyü veya bu sürücüyü taşımaya çalıştıklarını duyuyorum. Aynı çekirdeği kullanırlarsa, sürücüler sadece onunla çalışmaz mı? Ayrıca farklı cihazlar için milyonlarca farklı Çekirdek türü görüyorum.

Yanıtlar:


24

Çekirdekler üreticiden üreticiye değişir. Bu çekirdeklerin çoğu CAF'ta bulunan saf stok çekirdeği kaynaklarından geliyor, bu üreticilerin yaptığı bu stok kaynaklarını almak, kullanılan tahta / yonga setine göre uygun hale getirmek, kendi sürücülerini uygulamak.

Etrafınıza iyi bakın, dokunmatik ekran varyasyonları, wifi yonga setlerinin varyasyonları, bahsetmiyorum, ivmeölçer, sensörler, piller, pusula, ses, grafik var.

Bir çekirdek kaynağını örneğin HTC'den almak bir Samsung'da çalışmaz, bunun tersi de geçerlidir.

Üreticiler, devre kartına dahil edilen çeşitli bitleri kiraz toplama veya dışarı kaynak yapmakta serbesttirler. Herhangi bir zor ya da hızlı kural yoktur. Bu nedenle çekirdeğin düzgün çalışması için birçok hack / değişiklik.

Tamamen farklı bir top parkı oyunu olduğu için PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet'in bulunduğu masaüstü Linux dağıtım çekirdekleriyle karşılaştırmamalısınız. CentOS ve Android'in Linux Çekirdeği ile büyük farklar şudur - TÜM sürücüler modüller veya yerleşik olarak derlenir, bu nedenle herhangi bir Linux dağıtımı basitçe "kutunun dışında çalışır". Yine, masaüstü Linux dağıtımları ile - bir mimariniz var - x86, dolayısıyla bir Dell PC'den gelen bir Linux çekirdeği , bataklık standart sürücülerinin derlenmesi şartıyla Lenovo'daki kutunun dışında çalışabilir .

Unutmayın, Android dünyasında, ARMv6, ARMv7 gibi belirli ARM yonga kümeleri için oluşturulmuş çekirdeğin varyasyonları var, TEGRA var, EXYNOS var ve bunlar ikili ile uyumsuz. Bu nedenle, TEGRA için bir çekirdek derlenmişse, unutun, ARMv7 üzerinde çalışmaz!

Android'deki bazı çekirdeklerin "bozuk" görünmesinin nedeni üreticiye bağlıdır. Bazıları (Zte çok iyi bir örnektir), kaynaktan derlenebilecek ancak GPLv2 veya GPLv3 lisansı kapsamında olmayan eksik bir sürücü nedeniyle önyükleme yapamayan kasık bir kaynak yayınlar. Sorun bu, bu nedenle bazı bilgisayar korsanları bazı ipuçlarını aramak için github etrafında ovmak zorunda; hepsi olmasa da bazı üreticiler uymaktadır. Zte'nin kaynağının mevcut enkarnasyonunun 2.6.35.7 olduğu iddia ediliyor, ancak gerçekte birçok değişiklik içeren 2.6.32.9 kaynak tabanı, bu nedenle 2.6.35.7 için gerçek çekirdek kaynağını temsil etmiyor!

Bu, üreticilerin sadece GPLv2 veya sonraki sürümlerle uyumlu olmakla kalmayıp aynı zamanda topluluğun modifiye edebilmesi için hız aşırtma yetenekleri eklemek gibi ilgili kaynaklarını serbest bırakmaları gerektiği yerdir.

Bu nedenle sahne arkasında korsanlık ve işe yaramaya çalışan sürücülerle ilgili çok fazla karışıklık var ve hata ayıklamak kolay değil. Bazı sürücüler çapraz lisanslı olabilir , ancak cümle ve koşullara bağlı olarak dağıtılamaz anlaşmalı.

Neyse ki, Android sürücüleri artık ana kaynaklara entegre edildiğinden, tüm bunlar çekirdek 3.xx kaynak hattı ile değişti. Ama bir sorun var!

Yaklaşık 12-18 aylık mevcut bir el cihazına 3.xx çekirdeği taşımaya çalışın; Bir kartopunun cehennemdeki şansı işe yaramazdı, çünkü farklı faktörlerden dolayı, 3.xx kaynakları 2.6.x kaynağından büyük ölçüde farklıdır ve çalışmasını sağlamak için çok fazla hack alacaktı - bilmeliyim, denedim 2.6.38.6 Zte Blade için kaynak taşıma ve başarısız oldu.

Benzer şekilde, en son çekirdek sürümü 3.0.1 - Modaco üzerinde ics4blade projesi üzerinde çalışırken, onu taşımak için çok sayıda girişimde bulundu, ancak bu, Zte'nin taşımayı neredeyse imkansız hale getiren kaynağın çok kötü bir karmaşasını yarattığı gerçeğine bağlı. .


Her yerde upvotes !!! Detaylı cevap için teşekkürler.
user974896

Çok rica ederim! Bilmeniz gereken başka bir şey! : D
t0mm13b

Söylediklerinizden, sürücülerin hepsi modül olarak derlenmemiş ancak Çekirdeğin kendisine entegre edilmiştir, bu nedenle CM bir cihazda çalışan bir çekirdek alsa bile, sadece XXX modüllerini yeni yapıya taşıyamaz ve çalıştıramaz çünkü XXX moduels olmayabilir. Sürücüler avlanmalı, saldırıya uğratılmalı (muhtemelen) ve yeniden derlenmelidir.
user974896

2
Doğru ve aynı zamanda sürücüler farklıdır, bu nedenle bir el cihazındaki dokunmatik ekran için bir sürücü, farklı bir dokunmatik ekran kullanan başka bir el cihazında çalışmaz. Ayrıca, dikkat edilmesi gereken bir başka önemli nokta - bazı sürücüler çekirdek sürümüne bağlıdır - Zte Blade için Atheros Wifi sürücüsünün bir sürümünü çıkardı ve çekirdek 2.6.35.7 sürümü, başka bir sürüm olmadığı sürece sürücü çalışmaz, WiFi tatili - bu bağımlılık gibi hackish ve kırık bir şekilde böyle şeyler yapmak göstermek için.
t0mm13b

12

PC mimarisi, belirli parçalarla ve bu nedenle birbiriyle uyumlu olacak şekilde özel olarak tasarlanmış belirli bir ürünün, IBM PC'nin klonları olarak başladığı için emtia parçaları üzerine inşa edilmiştir. Genel olarak konuşursak, bir PC uyumlu bir programdan veya çevrebirim aygıtından alıp başka bir programa koyabilir ve çalışmasını bekleyebilirsiniz. Bu yetenek, teknoloji geliştikçe bile insanların talep etmeye devam edebileceği kadar faydalıdır. O zamanlar herhangi bir PC klonuna bir ISA kartı koyabileceğiniz gibi, herhangi bir modern PC'ye bir PCI Express kartı koyabilirsiniz.

Akıllı telefonların böyle bir geçmişi yok. Monolitik ürünler olarak, "olduğu gibi çalışan" donanım ve yazılımdan oluşan eksiksiz bir sistem olarak tasarlanmıştır. İnsanların bir telefondan parça alıp başka bir telefona yerleştirmeleri beklenir, bu nedenle mühendisler ürünlerini tasarlarken birlikte çalışabilirliği hesaba katmak zorunda kalmazlar.

Linux çekirdeği kaynak ağacında bile, ARM platformları için sürücülerde çok fazla parçalanma var . Telefonlar genellikle kapalı kapılar ardında tasarlandığından, farklı şirketlerdeki mühendislik ekipleri genellikle yinelenen işler yapar, temel olarak rakipleriyle aynı donanımı tasarlar ve daha sonra kendi tasarımları için kendi sürücülerini yazarlar. İşleri bittiğinde ve ürün piyasaya sürüldükten sonra, doğrudan bir sonraki ürün üzerinde çalışmaya başlarlar; geçmiş ürünler için sürücüleri geri almak ve onları rakiplerinin sürücüleri ile birleştirmek için zaman ayırmaya değmez. Sonuç, benzer ancak tam olarak aynı olmayan aygıtlar için tek seferlik sürücülerin çokluğudur.

Ayrıca, akıllı telefonlar genellikle işlemciyle tümleşik özel donanıma sahip SOC'lere dayanır . Bunlardan bazıları için, belirli bir sürücünün yüklenip yüklenmeyeceğinden daha fazlası olabilir; çekirdeğin bir bütün olarak, bir SOC üzerinde çalıştırmak için başka bir SOC üzerinde çalıştırmak için gereken özel seçeneklerle uyumlu olmayan özel yapılandırma seçenekleriyle oluşturulması gerekebilir.


5

Bunun nedeni, Android'in Linux çekirdeğinin genellikle Android'in kendisinde derlenmemesi, bunun yerine başka bir bilgisayardan çapraz derlenmesi gerektiğidir. Aygıt yapılandırması derleme zamanında kullanılamadığından ve alan sınırlaması nedeniyle genel bir çekirdeğin tüm sürücülerle derlenmesi mümkün olmadığından (çeşitli masaüstü dağıtımlarının tüm sürücüler bir initramfs'den yüklenen modüllere derlendiğinden), bu çeşitli sorunlara neden olur. . Bu nedenle geliştiriciler, her bir aygıt için hangi sürücüleri paketleyeceklerini bulmak zorundaydı. Sadece bu değil, her sürücünün genellikle çeşitli sürücü özelliklerini değiştirmek için bir düzine kadar derleme zamanı seçeneği vardır ve üreticiler genellikle resmi yapılandırmalarını yayınlamazlar (en kötü suçlular sürücülerini bile açık kaynak yapmazlar veya yukarı akışta kalmazlar) sürücülerin güncel kopyası).

Sürücü programlama, uygulama programlamasından çok daha zordur, çünkü sizi belirli bir gerçek zamanlı zamanlama gereksinimi ve benzeri olan fickle donanımından koruyan bir çekirdek olmadığından ve bu da farklı bir performans özelliğine sahip olmanın sürücünün kaçırmasına neden olabileceği anlamına gelir. donanımdan bazı gerçek zamanlı olaylar; bu eksiklikler hata veya performans sorunları olarak ortaya çıkabilir.

Başka bir sorun ikili uyumsuzluktur. İkili uyumsuzluğun iki nedeni vardır, birincisi t0mm13b tarafından iyi kapsanan CPU tipidir, ancak taşıma ile daha ilgili olan diğer konu ABI uyumsuzluğudur (uygulama ikili arayüzü). Üreticiler sürücülerini açık kaynak yapmazlarsa, geliştiriciler derlenmiş modülü stok ROM'dan kullanmak zorunda kaldılar. Sürücü modüllerinin kendisi, örneğin yapı düzeni ve işlev çağırma parametreleri hakkında belirli beklentilere sahip olduğundan ve çekirdek derlendiğinde, sürücü anında ABI'yi tanımlamak için başlık dosyasına sahip olmadığından bu, çeşitli ABI uyumsuzluk sorunlarını gündeme getirir. derlendi, bu nedenle geliştiriciler bir üstbilgi dosyası oluşturmak için sürücüyü tersine çevirmek zorunda kaldılar ya da sürücü derlendiğinden ve geliştiricilerin çekirdeği sürücünün ABI'sıyla tekrar uyumlu hale getirmek için bu değişiklikleri geri almak zorunda kaldıkları için kaynak ağacındaki üstbilgi dosyaları büyük ölçüde değiştirilmiş olabilir. Kaynaktan derlemenin aksine, ikili sürücü için derleme işlev parametresi uyuşmazlığı veya yapı uyumsuzluğu nedeniyle derleme hatasını tetiklemez, sadece çalışırken cihazınızı kilitler ve bu sorunları ayıklamak çok zordur. PC dünyasında, nVidia ve ATi'nin sadece ikili sürücüleri serbest bırakma konusundaki ısrarları nedeniyle, tüm sürücüler için bu karmaşaya sahip olduğunu hayal edin, yarattığı "eğlenceyi" hayal edin.

PC donanımı da genellikle mobil donanımdan daha iyi standartlaştırılmıştır, çoğu PC'nin vibratörler, ivmeölçer, jiroskop, 3G radyo, yakınlık sensörü, NFC, vb. İçin sürücülere ihtiyacı yoktur. PCMCIA veya PCI-E gibi bağlantılar.


4

Eh ... sürücüler ve çekirdek tam olarak aynı değil.

Sürücüler, hücre antenini, wifi, bluetooth vb.

Çekirdek, işletim sistemi / uygulama ve gerçek sürücüler (veya işlemci veya bellek veya diğer herhangi bir donanım) arasındaki bir ara düzeydir. İşletim sisteminizin / uygulamalarınızın bu donanım bileşenleri ile arayüz oluşturmasına izin veren şeydir.

Gördüğünüz milyonlarca çekirdeğin hepsi birbirinden çok da farklı değil. Tipik olarak bir programcı / modder mevcut çekirdeği alır ve bundan farklı bir performans elde etmek için onu "değiştirir". Temel olarak, çekirdeğin "yapılandırmasını" (çoğunlukla) ayarladıklarını söyleyebilirsiniz. Android dünyasında, bu modüller öncelikle şunlara bakıyor: CPU saatinin aşırı veya yetersiz olması (pil ömründen tasarruf etmek veya video oyunu emülatörleri veya video oynatma gibi işlem yoğun uygulamaları çalıştırmaya çalışmak için önemlidir) veya volting (CPU'nuzu orijinal ayar parametrelerinin dışında çalıştırarak pil ömründen tasarruf etmek için ... iki CPU% 100 aynı olmadığından, gerçekte kişiden kişiye değişir).


Demek istediğim, örneğin CyanogenMod ile her zaman wifi, bluetooth vb. Şikayetleri çalışmıyor. Neden bu sürücülerin CyanogenMod'a "taşınması" gerekiyor? Neden sadece hisse senedi sürücülerini alıp cihaza kopyalayıp CyanogenMod ile çalıştırmıyorlar
user974896

aygıtlar için "stok" sürücüsü diye bir şey yoktur. Her cihazın kamera, wifi yongası vb.
Ryan Conrad

1
Evet ama neden saldırıya gerek var. OEM çekirdeği ile çalışırlarsa, çekirdek temelde aynı olduğundan, neden sürücü dosyalarını ve ilgili kitaplıkları Cyanogen mod yüklemesine taşıyamazsınız.
user974896

1

Telefonlar ve diğer gömülü donanımlar, işletim sistemi dağıtıldığı donanım için derlendiğinden, donanım ve işletim sistemi arasında soyutlama sağlayacak bir BIOS'a sahip değildir. Aynı yonga setini kullanan cihazlar bile farklı şekillerde yapılandırılabilir (alternatif iletişim veri yolları vb. Kullanılarak) \ sonuç, çekirdeğin buna göre derlenmesi gerektiğidir. Donanımda değişiklik beklentisi olmadığından, herhangi bir donanım algılaması yapılmaz. Çekirdek daha hızlı önyükleme yapar ve sonuç olarak daha küçüktür - bu yerleşik bir işletim sisteminin standart ilkesidir


0

CentOS farklı donanıma yüklenir, ancak,

  1. Telefonlardan daha az farklı olan tüm bilgisayarlar,
  2. Bir Ubuntu çekirdeği, Debian çekirdeği ve Temel çekirdek farklı çekirdek kaynaklarıdır.

İkinci noktanıza gelince, daha önce gönderilen cevaplara bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.