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

Читайте полезные статьи впервые

1

STM32 — микроконтроллер производства STMicroelectronics. ST — это аббревиатура от STMicroelectronics, M относится к первой английской букве микроконтроллера (то есть однокристального микрокомпьютера) MCU, 32 относится к 32-битному процессору, а его процессор использует дизайн ядра серии ARM Cortex-M.

1. Расположение Кортекса-М

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

Рис. 1. Серия Cortex® под Arm®v7

До ARMv6 его базовая архитектура набора команд была единым стилем, но начиная с ARMv7 архитектура набора команд стала тремя стилями, которые в настоящее время известны как Cotex-M, Cotex-R, Cotex-A или ARMv7-A, ARMv7- Р, АРМв7-М.

  • Стиль А:Высокопроизводительная платформа на уровне процессора,Производительность сравнима с компьютером.
  • Стиль Р:Предназначен для высокопроизводительных встраиваемых систем,Высокая надежность и высокая своевременность.
  • Стиль М:для глубокого встраивания、Индивидуальные встроенные системы.

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

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

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

Рис. 2. Статус MMU

Любой микроконтроллер имеет набор адресов, которые может генерировать программа, называемый диапазоном виртуальных адресов. Если взять в качестве примера 32-битную машину, диапазон виртуальных адресов составляет 0 ~ 0xFFFFFFFF (4G). Когда контроллер обращается к памяти объемом 256 МБ, его доступный диапазон адресов ограничен 0x00000000~0x0FFFFFFF (256 МБ). В контроллерах без MMU виртуальный адрес отправляется непосредственно на шину памяти для чтения и записи физической памяти по этому адресу. В контроллере с MMU виртуальный адрес сначала отправляется в MMU, сопоставляется с физическим адресом, а затем отправляется на шину памяти.

Рис. 3. Механизм управления памятью

3. Система Linux

Операционные системы обычно делятся на операционные системы реального времени и операционные системы нереального времени. Большинство операционных систем реального времени являются однопроцессными и многопоточными (многозадачными), поэтому они не предполагают распределения адресного пространства между потоками и не нуждаются в использовании MMU, как, например, VxWorks. Система Linux — это операционная система, не работающая в режиме реального времени, и ее основной особенностью является многопроцессность.

На примере Ubuntu откройте оболочку и просмотрите диапазон адресов процесса bash, как показано на рисунке 4. Диапазон его адресов — 0x0000000000400000~0xffffffffff600000.

Рисунок 4. Адрес bash в оболочке 1.

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

Рисунок 5. Адрес bash в оболочке 2.

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

Рисунок 6. Дерево процессов

4. Резюме

Исходя из вышесказанного, система Linux имеет сильную зависимость от блока управления памятью. Если Linux будет работать на процессоре без MMU, боюсь, что вся система останется только в стадии Uboot. Поскольку процессор Cortex®-m не имеет блока управления памятью, он не может запускать систему Linux. Ничто не является абсолютным. Если вы перепишете ядро ​​Linux и используете достаточно большую микросхему памяти, вы теоретически сможете исключить MMU. Но стоит ли того такой объем работы? Фактически, MMU был создан для решения все более сложных проблем управления памятью операционных систем.

Рекомендовано в прошлом

Советы по продвинутому языку C, слабые символы и слабые ссылки

Такая ситуация в этом году. . . Давайте следить

Сухая информация | Подробное объяснение онлайн-обновления IAP stm32

Как настроить персональный сервер, работающий постоянно?

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода