Юрий Носков писал(а):
Естественно, что разработка конкретных АРМов лежит в адаптации
под что-то конкретное. И тут есть масса ниш, куда монстры не
полезут, для них это экономически не целесообразно. Да и пример
динозавров показывает, что не всегда монстры выигрывают в конкурентной
борьбе
Скорее, нужны и динозавры, и букашки. Вон, в 1980-х все, кому не лень, обещали гибель мэйнфреймов в ближайшем будущем -- а они по-прежнему живее всех живых, в следующем году будем отмечать 50-летие IBMовской архитектуры (ибо современные их мэйнфреймы по прикладному коду по-прежнему совместимы снизу вверх с Системой 360, анонсированной ещё в 1964 году).
Цитата:
насколько ОС под АРМ зависит от конкретных реализаций процессоров и архитектуры "мамы"? Насколько здесь поддерживается преемственность, то есть поддержка ранее имеющихся возможностей?
Никакой стандартизации даже контроллера прерываний под ARM долгое время не было, она появилась лишь в последних версиях архитектуры -- ARMv7 (ядра серии Cortex) и ARMv8 (64-разрядные процессоры). Однако до сих пор активно производятся и продаются процессоры и контроллеры предыдущих версий архитектуры вплоть до ARMv4T -- здесь дело как в инертности промышленной автоматизации, так и в том, что более высокая производительность и всякие дополнительные плюшки новых версий далеко не всегда нужны в конкретных применениях (это дубовым ОС на планшетах и телефонах сколько ни давай вычислительной мощности и памяти, им всё мало). Понятно, что о стандартных "мамах" тем более никакой речи не идёт.
Я у себя этот вопрос решаю просто. Общая часть кода системы мало зависит от конкретного процессора. Зависимость проявляется в наличии/отсутствии тех или иных команд, что решается мной с помощью условной трансляции и макросов. Например, у меня есть пара макросов _LDRD и _STRD, которые используются в случаях, если мне надо загрузить или сохранить в памяти пару регистров общего назначения. Если система транслируется под архитектуру, не поддерживающую систему команд Thumb-2 -- а это почти все старые версии архитектуры, кроме ARMv6T2, эти макросы разворачиваются в пару команд ldr или str, загружающих/сохраняющих один регистр, ну а если Thumb-2 поддерживается -- то в одну команду ldrd или strd. Благодаря этому у меня общая кодовая база под любую версию архитектуры.
Оставшаяся часть кода зависит от конкретной модели или семейства процессоров. Например, настройка процессора на конкретную тактовую частоту полностью зависит от модели процессора, ну а настройка контроллера памяти -- от процессора и платы, на которой он установлен (поскольку микросхемы памяти могут быть разными; то же самое имеет место быть и на ПК, но для обычного и даже системного программиста это не играет роли, поскольку всю настройку выполняет BIOS, который в мире АРМов отсутствует в принципе). Эти вещи решаются с помощью макросов: для каждой модели процессора и/или платы имеется свой их набор.
Наконец, периферия по понятным причинам также зависит от модели процессора и от платы. Здесь уже используются разные драйверы.
Что касается "преемственности", то она имеется лишь на уровне системы команд: совместимость "снизу вверх" сохраняется, за исключением некоторых случаев, но те случаи легко обойти, поскольку они весьма специфичны и в "нормальной жизни" просто не случаются. Ну, плюс ещё ошибки в процессорах, что тоже может создать проблемы, если их не учитывать.