Различия ОС на x86_64 и ARM

Я не могу понять, почему существует такая проблема в стандартизации операционных систем для ARM.

В ПК я могу загрузиться с ISO благодаря UEFI и ACPI, но не в телефонах из-за того, что U-Boot не даёт такой возможности. Если попробовать прошить ОС через Fastboot или Heimdall, сталкиваюсь с огромной проблемой нахождения прошивки под моё устройство, в то время, как на ПК я ставлю образ и запускаю, причём все драйверы работают, а если и нет, то просто ставятся из пакетного менеджера или GIT.

Почему нельзя реализовать общую прошивку того же PostmarketOS для ARM устройств и других устройств, использующих U-Boot в качестве загрузчика и "инициализатора" компонентов?


Ответы (1 шт):

Автор решения: Intelligent Shade of Blue

Если коротко, то благодаря IBM (BIOS), а потом Intel (UEFI), ну и еще Phoenix Tech, которые зделали обратную разработку (reverse engineered) BIOS, различия в инициализации железа спрятаны в BIOS/UEFI. Поэтому можно сделать универсальный загрузчик который ими пользуется.

Также помогла монополия IBM/Intel/Microsoft в 80-90е года.

У ARM другая модель. Они лицензируют ядра и каждый разработчик затачивает их под себя. У них нет интереса (и экономического смысла) создавать универсальный API, if you will для загрузки.

Linux частично решила проблему отсутствия BIOS/UEFI using Device Tree, но это не совсем эквивалент.

Почему нельзя реализовать общую прошивку того же postmarket os для arm устройств и других устройств использующих как загрузчик и "инициализатор" компонентов uboot?

Потому что она будет отличаться от устройства к устройству. Во первых, нужно будет собрать тысячи если не миллионы устройств, и опредилить архитектуру их железа (вплоть до каждого i2c чипа например). Во вторых, во время загрузки необходимо определить тип устройства и подключить правильный DeviceTree. Это зачастую невозможно.

В случае с x86_64 это делается, например, разработчиком материнской платы и прописывается в BIOS/UEFI. А загрузчик просто делает BIOS call.

→ Ссылка