user

Авторизация

Добро пожаловать!

Регистрация

Graf

Технологии

Может ли Cortex-M работать под управлением операционной системы Linux?

  • В чем разница между MCU, Cortex-M, Linux и встроенным?
  • Какой процессор мне нужен для работы операционной системы Linux? АРМ9, АРМ11?
  • Cortex-M новее ARM9, почему на нем нельзя запустить Linux?

 Полагаю, что подобные вопросы возникают у многих знакомых. Далее речь пойдет о Cortex-M, ARM и Linux.

АРМ и Cortex-М

 Архитектура процессора ARM определяет набор инструкций (ISA) и модель процессора, основанную на этой архитектуре. Набор инструкций ARM эволюционировал от ARMv1 до сегодняшнего ARMv9, и каждая архитектурная модификация будет добавлять практические технологии.

 До ARMv6 его основная архитектура набора инструкций была единого стиля, но, начиная с ARMv7, его архитектура набора инструкций стала тремя стилями, а именно хорошо известными Cotex-M, Cotex-R, Cotex-A или ARMv7-A, ARMv7-R, ARMv7-M.

  • Cotex-М: в основном относится к микропроцессору;
  • Cotex-R: в основном относится к процессору реального времени;
  • Cotex-A: в основном относится к процессору приложений;

 Стоит отметить, что процессоры под Cortex-M не имеют блока управления памятью MMU.

Блок управления памятью MMU

 MMU: блок управления памятью, блок управления памятью.

 Блок управления памятью в основном отвечает за сопоставление виртуальных адресов с физическими адресами и проверку прав доступа к памяти на аппаратном уровне.

 В многопользовательских и многопроцессорных операционных системах, таких как Linux, MMU позволяет каждому пользовательскому процессу иметь независимое адресное пространство, чтобы память не пересекала границы.

 Каждый MCU имеет набор адресов, который называется диапазоном виртуальных адресов. Взяв в качестве примера Cortex-M 32, диапазон виртуальных адресов составляет 0 ~ 0xFFFFFFFF (адресное пространство 4G).

 Когда контроллер обращается к памяти объемом 256 МБ, его доступный диапазон адресов ограничен 0 ~ 0x0FFFFFFFF (256 МБ).

 1. В процессорах без управления памятью виртуальные адреса отправляются непосредственно на шину памяти для чтения и записи физической памяти по этому адресу.

 2. В контроллере с управлением памятью виртуальный адрес сначала отправляется в MMU, сопоставляется с физическим адресом, а затем отправляется на шину памяти.

 Основная функция управления виртуальной памятью MMU — предоставить каждому процессу независимое адресное пространство.

 Один и тот же виртуальный адрес в разных процессах сопоставляется MMU с разными физическими адресами, и невозможно получить доступ к данным другого процесса при доступе к любому адресу в определенном процессе, так что любой процесс может быть вызван выполнением неправильных инструкций или злонамеренным Любой несанкционированный доступ к памяти не приведет к случайной перезаписи данных других процессов и не повлияет на работу других процессов, что обеспечит стабильность всей системы.

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

Операционная система Linux

 Операционные системы обычно делятся на операционные системы реального времени и операционные системы не реального времени.

 1. Большинство операционных систем реального времени являются однопроцессными и многопоточными (многозадачными), поэтому не предполагают выделения адресного пространства между потоками, и не нуждаются в использовании MMU, например ucos, FreeRTOS, RT — нить и т.д.

 2. Система Linux — это операционная система, не работающая в режиме реального времени, и ее основной особенностью является многопроцессорность.

 В качестве примера возьмем Ubuntu. Откройте оболочку и просмотрите диапазон адресов процесса bash. Его диапазон адресов — 0x0000000000400000 ~ 0xffffffffff600000.

 Открываем другую оболочку и проверяем диапазон адресов процесса bash в этой оболочке. Нетрудно обнаружить, что диапазоны адресов двух разных процессов bash совершенно одинаковы. Фактически ни операционной системе, ни пользователю не нужно учитывать распределение адресов физической памяти при разветвлении процесса, эту работу выполняет блок управления памятью MMU микроконтроллера.

 Поскольку несколько процессов зависят от модуля управления памятью, можно ли открыть только один процесс при использовании встроенного Linux? Это точно невыполнимо! Даже если пользователь ничего не делает после загрузки, десятки или сотни видимых процессов, необходимых для работы системы, уже запущены.

Подведем итог

 Из приведенного выше описания мы можем узнать, что операционная система Linux сильно зависит от MMU (блока управления памятью).Если вы запускаете Linux на процессоре без блока управления памятью, я боюсь, что вся система может оставаться только в этап Uboot.

 Поскольку процессор ARM Cortex-M не имеет блока управления памятью, обычно не рекомендуется запускать операционную систему Linux.

 Конечно, нет ничего абсолютного, если переписать ядро ​​Linux и сопоставить его с достаточно большой микросхемой памяти, то теоретически можно сэкономить MMU.

 Но стоит ли такая нагрузка? Фактически, MMU был создан для решения все более сложного управления памятью операционной системы.