Почему ARM SoC так сложно использовать с ядром?

Почему ARM SoC так сложно использовать с ядром?

Например, если у меня установлен какой-либо дистрибутив Linux на системе x64, я могу просто отключить свой накопитель, подключить его к другой машине x64, установить несколько драйверов HL, например, графический драйвер, и, скорее всего, он будет работать без каких-либо проблем.

Когда дело доходит до систем ARM, особенно ARM SoC, как и смартфонов любого типа, картина совершенно иная. Для каждого отдельного смартфона существует своя сборка одной и той же ОС (например, OEM-дистрибутив Android).

У меня вопрос: почему так?

Я понимаю, что в отличие от ПК с их стандартизированной архитектурой, существует множество микросхем SoC и архитектур. Но имея в виду дерево устройств, я задаюсь вопросом, почему нет способа поместить дерево устройств, как описание оборудования, вместе с загрузчиком на какой-нибудь микросхеме ROM и построить ОС Linux независимо от любых спецификаций оборудования, по крайней мере, в некоторых определенных пределах.

решение1

Я задаюсь вопросом, почему нет способа поместить дерево устройств, как описание оборудования, вместе с загрузчиком на какой-нибудь чип ПЗУ и собрать ОС Linux независимо от каких-либо спецификаций оборудования, по крайней мере, в некоторых определенных пределах.

Ответ: Дешевизна. Никто не хочет платить за чип ПЗУ. В SoC есть загрузочное ПЗУ, но дерево устройств меняется в зависимости от схемы, в которой находится SoC, так что это нехорошо. Вам понадобится отдельный "чип BIOS", как у плат x86, чтобы это работало.

Вы можете заставить это работать, рассматривая SD-карту, с которой загружается большинство плат ARM, как чип BIOS; просто поместите U-Boot и дерево устройств на нее, и пусть U-Boot загрузит ядро ​​с USB-накопителя. Тогда USB-накопитель будет (довольно) переносимым с платы ARM на плату ARM.

С точки зрения оптимизации, хотя вы можете выполнить компиляцию для ARM в общем случае, на самом деле имеет смысл ориентироваться на конкретный процессор (гораздо больше, чем на x86_64).

Связанный контент