Чому так багато різних ядер Android (технічна відповідь, будь ласка)


17

Чи не Android є звичайним ядром, яке використовується на всіх пристроях? Наприклад, CentOS буде встановлюватися на Dell, HP та різноманітне інше обладнання. Звичайно, є різні модулі, але все ж це CentOS.

У чому причина CyanogenMod завжди "зламана"? Я завжди чую на форумах, що вони працюють над переносом цього драйвера чи того драйвера. Якби вони використовували одне ядро, чи не драйвери просто працюватимуть з ним? Я також бачу мільйон різних типів ядер для різних пристроїв.

Відповіді:


24

Ядра варіюються від виробника до виробника. Багато цих ядер походять з чистої лінійки базових ядер джерел, що знаходяться на CAF, що ці виробники роблять, це приймати ці запаси джерел, змінювати їх відповідно до використовуваної плати / чіпсету, а також впроваджувати власні драйвери.

Придивіться навколо себе, є варіанти сенсорних екранів, варіації наборів чіп-мереж Wifi, не кажучи вже про акселерометр, датчики, батареї, компас, звук, графіка.

Якщо взяти одне джерело ядра, наприклад, HTC не буде працювати на Samsung, і навпаки.

Виробники можуть безкоштовно вибирати або виводити різні біти, які вбудовуються в друковану плату. Тут немає жодних жорстких чи швидких правил. Звідси безліч злому / модифікацій, щоб ядро ​​працювало належним чином.

Ви ніколи не повинні порівнювати з настільними дистрибутивними ядрами Linux, в яких у ньому є PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet, оскільки вони є абсолютно різною грою з парковою грою. Основні відмінності як з CentOS, так і з Linux-ядром Android в цьому: всі драйвери збираються як модулі, так і вбудовані, отже, будь-який дистрибутив Linux просто «вийде з коробки». Знову ж таки, для настільних дистрибутивів Linux - у вас є одна архітектура - x86, отже, одне ядро ​​Linux, скажімо, Dell PC, може працювати з коробки на Lenovo за умови компіляції стандартних драйверів bog.

Не забувайте, що в світі Android є варіанти ядра, створеного для конкретних наборів чіт ARM, таких як ARMv6, ARMv7, є TEGRA, є EXYNOS, і вони бінарні несумісні між собою. Отже, якщо ядро ​​компілюється для TEGRA, забудьте, воно не працюватиме на ARMv7!

Причиною того, що деякі ядра Android є "зламаними", залежить від виробника. Деякі (Zte - це дуже хороший приклад) випускають заблокований джерело, яке може компілюватися з джерела, але не спрацьовує при завантаженні через відсутній драйвер, на який не поширюється ліцензія GPLv2 або GPLv3. У цьому проблема, отже, деяким хакерам доводиться шукати Github, шукаючи підказки; деякі виробники, якщо не всі, то відповідають. Поточне втілення джерела Zte, як передбачається, становить 2.6.35.7, але насправді його фактична база 2.6.32.9 з великою кількістю модифікацій, таким чином, не представляє справжнього джерела ядра для 2.6.35.7!

Тут виробники повинні випустити відповідні джерела, не тільки не сумісні з GPLv2 або пізнішими версіями, а навпаки, щоб спільнота змогла модифікувати це, наприклад, додавши можливості розгону.

Таким чином, хакерство задіяне за лаштунками і багато возиться з драйверами, які намагаються змусити його працювати, і його нелегко налагоджувати. Деякі драйвери можуть бути перекреслено ліцензованими, але НЕ можуть бути поширені залежно від пункту та умов, оскільки домовлялися.

На щастя, це все змінилося зараз з лінією джерел ядра 3.xx, оскільки драйвери Android тепер інтегровані в основні джерела. Але є єва!

Спробуйте перенести ядро ​​3.xx на існуючу трубку віком від 12 до 18 місяців; Не шанс снігової кулі в пеклі спрацює, це тому, що, з-за різних факторів, джерела 3.xx сильно відрізняються від джерела 2.6.x і знадобиться багато злому, щоб він працював - я повинен знати, спробував перенесення джерела 2.6.38.6 для клинка Zte і не вдалося.

Так само останній випуск ядра 3.0.1 - коли працював над проектом ics4blade над Modaco, зробив численні спроби перенести його, але це зводиться до простого факту, що Zte зробив дуже поганий безлад джерела, який зробив перенесення неможливим .


Оновлення всіх навколо !!! Дякую за детальну відповідь.
user974896

Ви дуже раді! Все, що вам потрібно знати! : D
t0mm13b

З того, що ви говорите, драйвери не всі компілюються як модулі, а інтегруються в саме ядро, тому навіть якщо CM отримує робоче ядро ​​на пристрої, він не може просто "перемістити модулі XXX" у нову збірку і працювати так, оскільки не може бути XXX моделей. Водіїв потрібно полювати, зламати (можливо) та перекомпілювати.
user974896

2
Правильні, а також драйвери відрізняються, тому один драйвер для сенсорного екрану на одній трубці не працюватиме на іншій трубці, яка використовує інший сенсорний екран. Також ще один ключовий момент, який слід зазначити - деякі драйвери залежать від версії ядра - Zte вивів версію драйвера Atheros Wifi для Blade, і драйвер не працюватиме, якщо ядро ​​не має версії 2.6.35.7, будь-яку іншу версію, перерви в wifi - це для демонстрації залежності досить хакерським і ламаним способом подібних дій.
t0mm13b

12

Архітектура ПК побудована навколо товарних частин, оскільки вона починається як клони конкретного продукту IBM PC, які були спеціально розроблені таким чином, щоб бути сумісними з нею, а отже, і між собою. Взагалі кажучи, ви можете взяти програму або периферійний пристрій з одного ПК, сумісного з ПК, і помістити його в інший, і очікувати, що він працює. Ця здатність є достатньо корисною, щоб люди продовжували вимагати її навіть у міру розвитку технології. Ви можете поставити карту PCI Express в будь-який сучасний ПК так само, як ви могли поставити ISA-карту в будь-який клон ПК тоді.

У смартфонів такої історії немає. Вони розроблені як монолітні продукти, повна система, що складається з апаратного та програмного забезпечення, яке "просто працює". Не очікується, що люди виймуть деталі з одного телефону і перенесуть їх в інший, тому інженерам не доведеться враховувати сумісність під час проектування своїх виробів.

Навіть у дереві джерела ядра Linux є багато фрагментації драйверів для платформ ARM . Оскільки телефони, як правило, розроблені за закритими дверима, інженерні команди в різних компаніях часто роблять дублюючі роботи, розробляючи в основному те саме обладнання, що й їх конкуренти, а потім виписують власні драйвери для власного дизайну. Після закінчення роботи та випуску продукту вони переходять до роботи над наступним; не варто витрачати їх на час повертатися та переробляти драйвери на минулі продукти або об'єднувати їх з драйверами конкурентів. Результат - безліч одноразових драйверів для подібних, але не зовсім однакових пристроїв.

Крім того, смартфони, як правило, базуються на SOC , які мають спеціалізоване обладнання, інтегроване разом із процесором. Для цього може бути більше, ніж завантажувати чи не завантажувати певний драйвер; ядро в цілому, можливо, буде потрібно будувати спеціальні параметри конфігурації для роботи на одному SOC, які несумісні зі спеціальними параметрами, необхідними для роботи на іншому SOC.


5

Причина полягає в тому, що ядро ​​Linux для Android, як правило, не збирається на самому Android, замість цього його потрібно було перехресно скласти з іншого комп'ютера. Це спричиняє різні проблеми, оскільки конфігурація пристрою недоступна під час компіляції, і неможливо компілювати загальне ядро ​​з усіма драйверами через обмеження місця (тоді як у більшості дистрибутивів на робочому столі просто всі драйвери були зібрані в модулі, завантажені з програми initramfs) . Тому розробникам довелося розібратися, які драйвери упакувати для кожного конкретного пристрою. Мало того, що кожен драйвер, як правило, має десяток або більше варіантів часу компіляції для перемикання різних функцій драйверів, а виробники зазвичай не випускають офіційну конфігурацію (найгірші правопорушники навіть не відкривають свої драйвери, або не тримають вгору по течії копія актуальних драйверів).

Програмування драйверів набагато складніше, ніж програмування прикладних програм, оскільки не існує ядра, яке захищає вас від непосидних апаратних засобів, які мають специфічні вимоги до термінів у режимі реального часу, тощо. Це означає, що навіть наявність різної характеристики продуктивності може призвести до пропуску водія деякі важкі події в реальному часі з обладнання; ці пропуски можуть виявитись як помилки, чи проблеми з роботою.

Інше питання - бінарна несумісність. Існує дві причини бінарної несумісності, перша - тип процесора, який добре охоплений t0mm13b, але інша проблема, яка більше стосується переносу, - це несумісність ABI (двійковий інтерфейс програми). Якщо виробники не відкривають свої драйвери, тоді розробникам довелося використовувати складений модуль із запасу ROM. Це викликає різні проблеми несумісності ABI, оскільки самі модулі драйверів мають певні очікування щодо, наприклад, компонування структури та виклику функцій функції, а коли ядро ​​компілюється, у нього немає файлу заголовка, який би описував ABI у той час, коли драйвер. складається, тому розробникам довелося інженерувати драйвер, щоб створити файл заголовка, або файли заголовків у вихідному дереві могли бути сильно змінені, оскільки драйвер компільований, і розробникам довелося повернути ці зміни, щоб ядро ​​знову було сумісним з ABI драйвера. На відміну від компіляції з джерела, компіляція для бінарного драйвера не призведе до помилки компіляції через невідповідність параметрів функції або несумісності структури, вона просто просто збоїть ваш пристрій під час роботи, і налагодити ці проблеми дуже складно. У світі ПК ми знайомі з тим безладом, який залишили нас nVidia та ATi, завдяки їх наполяганню випускати лише бінарні драйвери.

Програмне забезпечення для ПК також, як правило, краще стандартизоване, ніж мобільне обладнання; більшість ПК не потребують драйверів для вібраторів, акселерометра, гіроскопа, 3G радіо, датчика близькості, NFC тощо. Навіть на пристроях, які мають 3G, воно зазвичай підключається до апаратного забезпечення за допомогою стандартизованого з'єднання типу PCMCIA або PCI-E.


4

Ну .... драйвери та ядро ​​не зовсім однакові.

Драйвери - це те, що керує стільниковою антеною, wifi, bluetooth тощо. Це власні драйвери, оскільки виробник повинен створити спосіб (драйвери) спілкуватися зі своїм обладнанням.

Ядро - це посередницький рівень між ОС / додатком та власними драйверами (або процесором, або пам'яттю, або будь-яким іншим обладнанням). Саме це дозволяє вашій ОС / додаткам взаємодіяти з цими апаратними компонентами.

Усі мільйони ядер, які ви бачите, насправді не так сильно відрізняються один від одного. Як правило, програміст / моддер візьме існуюче ядро ​​і "настроїть" його, щоб спробувати отримати з нього різницю. Ви по суті можете сказати, що вони лише коригують (здебільшого) "конфігурацію" ядра. У світі Android ці модери в першу чергу дивляться на: надмірну або розблокування тактового процесора (важливо для економії заряду акумулятора або для запуску більшості інтенсивних процесів, таких як емулятори відеоігор або відтворення відео), або вони дивляться на вольтайнг (щоб заощадити час роботи батареї, запустивши ваш процесор поза його первісно встановленими параметрами ... що залежить від дії людини, оскільки жодні два процесори не зроблені на 100% абсолютно однаково)


Що я маю на увазі, наприклад, із CyanogenMod, завжди є скарги на мій wifi, bluetooth тощо. Чому цих драйверів доводиться «переносити» на CyanogenMod. Чому вони не можуть просто взяти драйвери акцій, скопіювати їх на пристрій та запустити їх із CyanogenMod
user974896

не існує такого поняття, як "запас" драйверів для пристроїв. Кожен пристрій має різні драйвери для апаратних засобів, таких як камера, чіп wifi тощо. І вони, як правило, з закритим джерелом, тому їм доводиться "зламати" свій шлях через те, щоб драйвери працювали.
Райан Конрад

1
Так, але навіщо потрібно рубати. Якщо вони працюють з ядром OEM, чому ви не можете просто перемістити файли драйверів та пов'язані з ними бібліотеки до інсталяції Cyanogen mod, оскільки ядро ​​в основному те саме.
user974896

1

Телефони та інші вбудовані пристрої не мають BIOS для забезпечення абстрагування між обладнанням та ОС, в результаті чого ОС складається для обладнання, в яке вона розгорнута. Навіть пристрої, що використовують один і той же набір мікросхем, можна налаштувати по-різному (використовуючи альтернативні шини comms тощо) \ в результаті, ядро ​​має бути відповідно скомпільовано. Оскільки не очікується змін апаратних засобів, не проводиться апаратне виявлення. Ядро завантажується швидше і в результаті менше - це стандартний принцип вбудованої ОС


0

CentOS встановлюється на іншому обладнанні, але,

  1. Це всі ПК, які відрізняються менше, ніж телефони,
  2. Ядро Ubuntu, ядро ​​Debian і ядро ​​Elementary - це всі різні джерела ядра.

Щодо вашого другого пункту, див. Відповідь, розміщений раніше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.