Почему мы должны портировать ROM
Мы можем установить Windows на несколько машин, но когда кто-то пытается прошить ROM на другом устройстве Android, это не работает. Я предполагаю, что это потому, что оптимизация ядра и системы совместима только с конкретным SOC, батареей. BIOS информирует Windows о возможностях различных устройств через таблицы ACPI и работает с различными аппаратными средствами. Есть ли причина, по которой на устройствах с Android нет уровня аппаратной абстракции в обычном смысле, это просто выигрыш производителей?
1 ответ
Есть ли причина, по которой на устройствах Android нет уровня аппаратной абстракции в обычном смысле?
Экономические причины:
Устройства Android, как правило, представляют собой одноплатные устройства на базе ARM со всем встроенным оборудованием, и это оборудование не изменится в течение срока службы устройства. Пользователь обычно просто покупает новое устройство.
Android - это встроенный тип операционной системы. Оборудование, работающее под управлением Android, обычно не поддерживает и не запускает другие операционные системы.
ACPI - сложный стандарт, который сложно реализовать.
Для таких вещей, как телефоны, время выхода на рынок стоит для компаний больше, чем разработка стандартов, которые используют другие компании. Windows, желая продавать операционные системы, которые работают на разных производителях оборудования на базе Intel, явно предпочитала иметь этот стандарт (и Intel, и Microsoft приложили руку к разработке ACPI).
Технические причины:
Windows во многом зависит от прошивки (BIOS или UEFI) во время запуска и во время работы. Linux может быть настроен так, чтобы вообще не полагаться на прошивку после загрузки, и для платформ ARM это, вероятно, типично.
- Столь более простые (и менее дружественные) схемы можно использовать в Linux, например, в виде деревьев устройств или просто с помощью встроенных в ядро драйверов, которые знают, где находится их оборудование на платформе, без необходимости какого-либо обнаружения.
но когда кто-то пытается прошить ROM на другом устройстве Android, он не работает
Загрузчик в устройствах Android часто настраивается на загрузку только подписанного образа - если образ, содержащий ОС, не подписан, он не будет работать.
Сам загрузчик часто зависит от аппаратного обеспечения и предназначен для конкретной платы. (Вы не можете взять BIOS для одной модели ноутбука и ожидать, что он будет работать на другой модели ноутбука - вам, как OEM, придется создавать новый BIOS для новой платформы). Если образ ROM содержит загрузчик и вы пытаетесь запустить его на неправильной платформе, он, вероятно, не будет работать.
Драйверы Linux для аппаратных устройств во многих устройствах Android не являются открытым исходным кодом. Включает в себя такие вещи, как дисплей, Wi-Fi, сотовая связь. Поэтому они не будут работать с более поздними версиями ядра. Вероятно, это основная причина, по которой разные ПЗУ не будут работать, потому что версия ядра - более поздняя, более качественная, но более новый драйвер недоступен (и его нельзя создать без исходного кода).
Параметры командной строки, передаваемые ядру загрузки, могут иметь решающее значение - например, эти параметры могут указывать ядру избегать определенных диапазонов памяти, которые приводят к блокировке системы при обращении к ней.