Почему нет стандартных установщиков ОС для телефонов? [дубликат]

Я привык устанавливать и удалять различные операционные системы на своих ПК, даже имея несколько одновременно.

Обычно под установку новой ОС подразумевают:

  1. Запишите ISO на CD/DVD/USB.

  2. Вставьте его.

  3. Ботинок. (Возможно, вам сначала нужно немного настроить BIOS).

Единственная разница между ПК заключается в архитектуре процессора: x86, x86_64, arm и т. д. В зависимости от этого вам нужно скачать тот или иной ISO. Но мне никогда не приходится беспокоиться о том, какая у него графическая карта, мышь, клавиатура, экран, сетевая карта и т. д. Мастер установки автоматически обнаружит это и установит соответствующие драйверы. Иногда, если они не входят в комплект, установщик их также загружает. В любом случае, ключевым моментом здесь является то, что ISO всегда один и тот же .

Сейчас выходит много мобильных ОС: Ubuntu, Tizen, Firefox OS, вездесущий Android и почему бы и нет дистрибутива Linux ARM! К сожалению, у меня есть случайный китайский мобильный телефон, который никогда не получит официальной поддержки ни на одной платформе, и я никогда не смогу их протестировать.

Но... Разве сегодняшние телефоны не просто крошечные ARM-ПК? Почему установка такая разная? Почему мне всегда нужно иметь предварительно скомпилированное монолитное ПЗУ, специально предназначенное для моей модели телефона? Почему бы не использовать единый «ISO» для каждой ОС для любого телефона, который автоматически определяет и устанавливает необходимые драйверы, как это всегда было на рынке ПК?

Примечание: я понимаю проблему с приватными драйверами, но я помню, как Debian спрашивал меня о них, когда при установке не было бесплатных альтернатив, и я мог установить их тогда или позже. Я полагаю, что обходной путь можно использовать и в этих случаях. Поправьте меня если я ошибаюсь.

Драйверы... телефоны сильно различаются в зависимости от чипсета и вариаций, одно ПЗУ для одного телефона точно не подойдет для другого телефона... подумайте об этом, не стандартизировано, но с появлением ICS/JB Google работает к этой предпоследней цели стандартизации.
Вы искали CyanogenMod для своего устройства нужной вам версии?

Ответы (3)

Короче говоря, это из-за разных способов распространения Android и MS Windows. MS Windows — это розничный продукт, который продается непосредственно владельцам ПК. Таким образом, Microsoft несет ответственность за его работу на ПК. ПК стандартизированы и (в настоящее время) имеют механизм обнаружения оборудования, поэтому Microsoft может разработать установщик Windows таким образом, чтобы он мог работать на любой ПК-совместимой машине. В их интересах сделать драйверы для старых версий Windows совместимыми с более новыми версиями, чтобы они могли продолжать продавать новые версии Windows пользователям.

В этом есть и технический аспект. Телефоны — это не просто «крошечные ARM-компьютеры», как вы предполагаете. Отличительной чертой ПК является то, что он удовлетворяет спецификации ПК , созданной IBM, но теперь установленной отраслевым консорциумом. Есть еще несколько стандартов взаимодействия компонентов ПК, и именно они позволяют автоматически настраивать драйверы, как на настольном ПК. Графические карты предлагают интерфейс VESA, который позволяет отображать графику до того, как будет настроен драйвер графического процессора.

В настоящее время все аппаратное обеспечение ПК поддерживает технологию Plug N Play, которая позволяет операционной системе обнаруживать аппаратное обеспечение и настраивать карту памяти при загрузке. До Plug N Play вам приходилось менять физические перемычки на каждой плате PCI, а затем сообщать программному обеспечению, какой диапазон памяти, IRQ и т. д. вы установили на перемычках. А до появления DirectX и ему подобных приходилось делать это отдельно для каждой игры, которая хотела использовать это оборудование. Plug N Play появился в основном для того, чтобы производители звуковых карт (и других дискретных компонентов) могли упростить установку оборудования.

Напротив, Android — это не продукт, который продается пользователям: он «продается» производителям устройств. Телефоны (а также планшеты, STB, медиаплееры и т. д.) не имеют ничего общего со спецификацией ПК, поэтому Google не может создать «установщик Android», который может работать на любом устройстве. Даже отображение анимации батареи при выключенном телефоне требует загрузки ядра Linux с драйвером фреймбуфера и драйвером батареи. Производитель устройства несет ответственность за изменение исходного кода Android, чтобы он мог работать на его устройстве, и полученный образ прошивки Android принадлежит производителю: они не (должны) передавать эти изменения Google или кому-либо еще.

В мире телефонов нет таких стандартов, потому что на них нет спроса. Никто не пытается продавать компоненты телефона, которые вы собрали сами. Никто в телефонной индустрии не заинтересован в создании ОС, которую можно установить на любой телефон — только такие, как Ubuntu и Mozilla, которые являются аутсайдерами и не вносят никакого вклада в аппаратные стандарты.

Первая проблема — это пространство. У большинства телефонов до недавнего времени было слишком мало места для хранения, чтобы вместить все общее ядро ​​​​и структуру Android. Проблема усугубляется тем, что аппаратное обеспечение телефона, как правило, более разнообразно и менее стандартизировано, чем аппаратное обеспечение ПК, что может быть неизбежно из-за ограниченного пространства.

Другая проблема заключается в том, что среди стандартных загрузчиков нет единого стандарта для метода прошивки. С ПК у вас есть стандартная загрузка с компакт-диска и загрузка с USB-накопителя; в стандартном методе загрузки с внешнего диска ПК является USB-хостом, но Android обычно действует как USB-клиент. Это также отражается в выборе кабелей, сторона USB-кабеля для Android обычно представляет собой USB-микро, а большинство внешних накопителей также используют USB-мини, это означает, что для физического подключения требуется кабель USB-микро-USB-микро, который относительно редко.

Наконец, последняя проблема — политическая. Производители и операторы связи не заинтересованы в изменении статус-кво, лишь очень небольшое количество пользователей собирается прошивать свои устройства, что обычно приводит к аннулированию гарантии. У них нет стимула поощрять людей устанавливать загрузчик, который позволяет легко аннулировать гарантию и часто вызывает кошмар поддержки.

Помимо моментов, упомянутых в ответе Ли Райана , есть одна большая проблема, которую люди склонны недооценивать: Drivers .

Помните Windows 95? Большинство людей помнят ее как плохую и нестабильную ОС. Почему он был нестабилен? Потому что драйвера изначально поставлялись не от Microsoft, а от производителей оборудования, и некоторые (большинство?) из них были некачественными, что приводило к краху всей системы. Конечно, пользователь перед ПК обвинил ОС, потому что это было то, что, по-видимому, давало сбой, а не драйвер.

Написание драйверов оборудования — непростая задача: вы должны знать API ОС, вы должны знать аппаратное обеспечение, вы должны знать архитектуру компьютера, и если вы сделаете небольшую ошибку, большинство ОС (без хорошей изоляции) рухнет.

Давайте посмотрим на другие операционные системы с открытым исходным кодом, большинство из них имеют превосходную архитектуру и используют больше аппаратных функций, чем Linux. Тогда почему не все ими пользуются? Я бы сказал, что это потому, что им не хватает драйверов . Почему я должен выбирать ОС, которая не поддерживает мое оборудование WiFi?

Теперь давайте посмотрим на целевую платформу, и вы задаетесь вопросом, почему нет доступного установочного носителя. Устройства Android являются узкоспециализированными и используют аппаратное обеспечение,

  1. недоступно для широких масс (например, вы обычно не можете использовать звуковой чип, используемый в типичном устройстве Android)
  2. нужен проприетарный драйвер (т.е. только производитель оборудования имеет доступ к источнику драйвера)
  3. многообразен

это затрудняет создание установочного носителя, который работает для всех или даже для большинства устройств.

Обычно для установки GNU/Linux на Android-устройство используется доступная среда (загрузчик, ядро ​​(включая драйверы), libc). Это позволяет избежать всех проблем, упомянутых в ответах.

Текущий источник драйверов Android, доступный в Интернете, вероятно, охватывает большую часть оборудования. Проблема, о которой не упоминается в этом ответе, заключается в отсутствии возможности обнаружения оборудования. Даже если вы поставляете стандартный Android со всеми драйверами в мире, причина, по которой он не будет работать, не в том, что он будет слишком большим, а в том, что ядро ​​не будет знать, какие драйверы использовать без дерева устройств.