Архитектура встраиваемых систем
Разработка защищенных и подключенных устройств с примерами кода на C
Покупка
Новинка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Лакамера Даниэле
Перевод:
Яценков Валерий Станиславович
Под науч. ред.:
Романов Артемий Юрьевич
Год издания: 2023
Кол-во страниц: 334
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное профессиональное образование
ISBN: 978-5-93700-206-8
Артикул: 855984.01.99
Книга, которую вы держите в руках, продолжает серию «Книжная полка Истового Инженера», которая издается при поддержке компании YADRO. Это издание подготовлено к публикации Московским институтом электроники и математики им. А. Н. Тихонова НИУ ВШЭ совместно с «ДМК Пресс».
В книге описываются принципы работы и взаимодействия различных компонентов в реальных системах. Представлен общий обзор процесса разработки встраиваемых систем; показано, как настроить среду разработки, рассматриваются структура, механизмы загрузки и управление памятью встраиваемой системы. Вы изучите программный интерфейс и драйверы устройств, узнаете, как устанавливать связь через TCP/IP, как повысить безопасность устройств интернета вещей. Наконец, вы на практике познакомитесь с многопоточными операционными системами, самостоятельно разработав планировщик, и научитесь использовать механизмы доверенного выполнения с аппаратной поддержкой.
Издание предназначено для программистов и инженеров, желающих освоить область разработки встраиваемых систем.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Даниэле Лакамера Архитектура встраиваемых систем
Daniele Lacamera Embedded Systems Architecture Design and write software for embedded devices to build safe and connected systems BIRMINGHAM—MUMBAI
Даниэле Лакамера Архитектура встраиваемых систем Разработка защищенных и подключенных устройств с примерами кода на C Москва, 2023
УДК 004.04 ББК 32.371 Л19 Лакамера Д. Л19 Архитектура встраиваемых систем / пер. с англ. В. С. Яценкова; под науч. ред. А. Ю. Романова. – М.: ДМК Пресс, 2023. – 332 с.: ил. ISBN 978-5-93700-206-8 Книга, которую вы держите в руках, продолжает серию «Книжная полка Истового Инженера», которая издается при поддержке компании YADRO. Это издание подготовлено к публикации Московским институтом электроники и математики им. А. Н. Тихонова НИУ ВШЭ совместно с «ДМК Пресс». В книге описываются принципы работы и взаимодействия различных компонентов в реальных системах. Представлен общий обзор процесса разработки встраиваемых систем; показано, как настроить среду разработки, рассматриваются структура, механизмы загрузки и управление памятью встраиваемой системы. Вы изучите программный интерфейс и драйверы устройств, узнаете, как устанавливать связь через TCP/IP, как повысить безопасность устройств интернета вещей. Наконец, вы на практике познакомитесь с многопоточными операционными системами, самостоятельно разработав планировщик, и научитесь использовать механизмы доверенного выполнения с аппаратной поддержкой. Издание предназначено для программистов и инженеров, желающих освоить область разработки встраиваемых систем. УДК 004.04 ББК 32.371 Copyright © Packt Publishing 2023. First published in the English language under the title ‘Embedded Systems Architecture – Second Edition – (9781803239545)’. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-80323-954-5 (англ.) © 2023 Packt Publishing © Научное редактирование, НИУ ВШЭ, 2023 ISBN 978-5-93700-206-8 (рус.) © Перевод, оформление, издание, ДМК Пресс, 2023 Научный редактор Романов А. Ю. – канд. техн. наук, доцент Московского института электроники и математики им. А. Н. Тихонова Национального исследовательского университета «Высшая школа экономики».
Содержание От издательства.......................................................................................................11 Автор............................................................................................................................12 Рецензент...................................................................................................................12 Научный редактор русского перевода............................................................12 Предисловие.............................................................................................................13 Предисловие от научного редактора русского перевода........................17 Часть I. Введение в разработку встраиваемых систем..............................19 Глава 1. Встраиваемые системы с практической точки зрения..........................................................................................................................20 1.1. Определение предметной области.......................................................................20 1.1.1. Встраиваемые Linux-системы........................................................................21 1.1.2. 8-разрядные микроконтроллеры..................................................................22 1.1.3. Аппаратная архитектура................................................................................22 1.1.4. Типичные затруднения..................................................................................25 1.1.5. Многопоточность............................................................................................26 1.2. ОЗУ..........................................................................................................................27 1.3. Флеш-память..........................................................................................................28 1.4. Универсальный ввод/вывод (GPIO)......................................................................29 1.4.1. АЦП и ЦАП.......................................................................................................29 1.4.2. Таймеры и ШИМ.............................................................................................30 1.5. Интерфейсы и периферийные устройства...........................................................30 1.5.1. Асинхронная последовательная связь на основе UART...............................30 1.5.2. SPI....................................................................................................................31 1.5.3. I2C.....................................................................................................................32 1.5.4. USB...................................................................................................................32 1.6. Подключенные системы........................................................................................32 1.6.1. Особенности распределенных систем..........................................................34 1.7. Механизмы изоляции............................................................................................34 1.8. Базовая платформа................................................................................................35 1.8.1. Базовая архитектура ARM..............................................................................35 1.8.2. Микропроцессор Cortex-M.............................................................................36 1.9. Заключение.............................................................................................................37 Глава 2. Рабочая среда и оптимизация рабочего процесса.....................39
6 Содержание 2.1. Обзор рабочего процесса.......................................................................................40 2.1.1. Компилятор C..................................................................................................40 2.1.2. Компоновщик..................................................................................................41 2.1.3. Инструмент автоматизации сборки Make.....................................................43 2.1.4. Отладчик..........................................................................................................46 2.1.5. Цикл разработки встраиваемых систем........................................................46 2.2. Текстовый редактор или интегрированная среда?.............................................49 2.3. Инструментарий GCC............................................................................................50 2.3.1. Кросс-компилятор..........................................................................................51 2.3.2. Кто компилирует компиляторы?...................................................................53 2.3.3. Компоновка исполняемого файла.................................................................54 2.3.4. Преобразование двоичного формата............................................................58 2.4. Взаимодействие с целевым устройством.............................................................59 2.4.1. Сеанс GDB........................................................................................................62 2.5. Тестирование..........................................................................................................64 2.5.1. Функциональные тесты..................................................................................65 2.5.2. Аппаратные инструменты.............................................................................66 2.5.3. Внешнее тестирование...................................................................................67 2.5.4. Эмуляторы.......................................................................................................69 2.6. Заключение.............................................................................................................71 Часть II. Базовая архитектура встраиваемых систем.................................73 Глава 3. Шаблоны архитектуры встраиваемых систем.............................74 3.1. Управление конфигурацией проекта...................................................................74 3.1.1. Контроль версий.............................................................................................75 3.1.2. Отслеживание деятельности..........................................................................76 3.1.3. Проверка кода.................................................................................................77 3.1.4. Непрерывная интеграция..............................................................................78 3.2. Организация исходного кода................................................................................79 3.2.1. Аппаратная абстракция..................................................................................79 3.2.2. Промежуточный уровень...............................................................................80 3.2.3. Код приложения..............................................................................................81 3.3. Соображения безопасности...................................................................................82 3.3.1. Устранение уязвимостей................................................................................82 3.3.2. Применение криптографии...........................................................................83 3.3.3. Аппаратная криптография.............................................................................84 3.3.4. Запуск ненадежного кода...............................................................................84 3.4. Жизненный цикл проекта встраиваемой системы.............................................85 3.4.1. Определение этапов проекта.........................................................................86 3.4.2. Прототипирование.........................................................................................87 3.4.3. Рефакторинг....................................................................................................88 3.4.4. API и документация........................................................................................88 3.5. Заключение.............................................................................................................90 Глава 4. Процедура загрузки...............................................................................91 4.1. Технические требования.......................................................................................91 4.2. Таблица векторов прерываний.............................................................................91
Содержание 7 4.2.1. Код запуска......................................................................................................92 4.2.2. Обработчик сброса..........................................................................................94 4.2.3. Размещение стека...........................................................................................94 4.2.4. Обработчики отказов.....................................................................................95 4.3. Схема памяти.........................................................................................................96 4.4. Сборка и запуск загрузочного кода......................................................................99 4.4.1. Make-файл.......................................................................................................99 4.4.2. Запуск приложения.......................................................................................102 4.5. Загрузка в несколько этапов...............................................................................102 4.5.1. Загрузчик.......................................................................................................103 4.5.2. Сборка образа................................................................................................105 4.5.3. Отладка системы с поэтапным загрузчиком..............................................106 4.5.4. Общие библиотеки........................................................................................107 4.5.5. Удаленное обновление прошивки...............................................................109 4.5.6. Безопасная загрузка.....................................................................................109 4.6. Заключение...........................................................................................................110 Глава 5. Управление памятью...........................................................................111 5.1. Технические требования.....................................................................................111 5.2. Отображение памяти...........................................................................................111 5.2.1. Модель памяти и адресное пространство...................................................112 5.2.2. Область исполняемого кода.........................................................................113 5.2.3. Области оперативной памяти......................................................................114 5.2.4. Области доступа к периферийным устройствам........................................115 5.2.5. Системная область........................................................................................115 5.2.6. Порядок транзакций памяти.......................................................................115 5.3. Стек выполнения.................................................................................................116 5.3.1. Размещение стека.........................................................................................117 5.3.2. Переполнение стека......................................................................................119 5.3.3. Закрашивание стека.....................................................................................120 5.4. Управление динамическим выделением памяти..............................................121 5.4.1. Пользовательская реализация.....................................................................123 5.4.2. Использование библиотеки newlib..............................................................125 5.4.3. Ограничение кучи.........................................................................................127 5.4.4. Несколько пулов памяти..............................................................................128 5.4.5. Распространенные ошибки использования динамической памяти.....................................................................................................................130 5.5. Блок защиты памяти............................................................................................131 5.5.1. Регистры конфигурации MPU......................................................................132 5.5.2. Программирование MPU..............................................................................132 5.6. Заключение...........................................................................................................136 Часть III. Аппаратные модули и интерфейс связи.....................................137 Глава 6. Периферийные устройства общего назначения.......................138 6.1. Технические требования.....................................................................................139 6.1.1. Побитовые операции....................................................................................139 6.2. Контроллер прерываний.....................................................................................139 6.2.1. Настройка прерываний от периферийных устройств...............................140
8 Содержание 6.3. Системное время..................................................................................................142 6.3.1. Настройка состояний ожидания флеш-памяти..........................................142 6.3.2. Настройка источника тактовых импульсов................................................143 6.3.3. Распределение тактовых импульсов...........................................................147 6.3.4. Включение SysTick........................................................................................148 6.4. Таймеры общего назначения..............................................................................150 6.5. Линии ввода/вывода общего назначения (GPIO)..............................................153 6.5.1. Конфигурация выводов................................................................................154 6.5.2. Цифровой выход...........................................................................................155 6.5.3. Широтно-импульсная модуляция...............................................................157 6.5.4. Цифровой вход..............................................................................................161 6.5.5. Ввод, управляемый прерыванием...............................................................162 6.5.6. Аналоговый вход...........................................................................................164 6.6. Сторожевой таймер..............................................................................................168 6.7. Заключение...........................................................................................................171 Глава 7. Интерфейсы локальной шины..........................................................172 7.1. Технические требования......................................................................................172 7.2. Принцип работы последовательного канала.....................................................173 7.2.1. Синхронизация тактов и символов.............................................................173 7.2.2. Физические линии шины.............................................................................174 7.2.3. Программирование периферийных устройств...........................................176 7.3. Асинхронная последовательная шина на основе UART....................................176 7.3.1. Описание протокола.....................................................................................177 7.3.2. Программирование контроллера.................................................................178 7.3.3. Hello world!.....................................................................................................181 7.3.4. Функция printf библиотеки newlib.............................................................182 7.3.5. Получение данных........................................................................................183 7.3.6. Ввод/вывод с использованием прерываний...............................................184 7.4. Шина SPI................................................................................................................186 7.4.1. Описание протокола.....................................................................................186 7.4.2. Программирование приемопередатчика....................................................187 7.4.3. Транзакции по шине SPI...............................................................................190 7.4.4. Передача данных по шине SPI на основе прерываний..............................193 7.5. Шина I2C................................................................................................................194 7.5.1. Описание протокола.....................................................................................195 7.5.2. Затягивание тактов.......................................................................................197 7.5.3. Несколько ведущих на одной шине.............................................................198 7.5.4. Программирование контроллера.................................................................199 7.5.5. Обработка прерываний................................................................................202 7.6. Заключение...........................................................................................................202 Глава 8. Управление питанием и энергосбережение...............................204 8.1. Технические требования.....................................................................................205 8.2. Конфигурация системы.......................................................................................205 8.2.1. Аппаратная часть системы...........................................................................206 8.2.2. Управление тактированием.........................................................................206 8.2.3. Управление напряжением............................................................................209
Содержание 9 8.3. Режимы работы с низким энергопотреблением...............................................209 8.3.1. Конфигурация глубокого сна.......................................................................211 8.3.2. Режим остановки..........................................................................................213 8.3.3. Режим ожидания...........................................................................................216 8.3.4. Интервалы пробуждения.............................................................................220 8.4. Измерение мощности..........................................................................................221 8.4.1. Отладочные платы........................................................................................221 8.5. Проектирование встраиваемых приложений с низким энергопотреблением..................................................................................................222 8.5.1. Замена циклов ожидания спящим режимом..............................................222 8.5.2. Глубокий сон во время длительных периодов бездействия......................224 8.5.3. Выбор тактовой частоты..............................................................................224 8.5.4. Переключение профилей питания..............................................................225 8.6. Заключение...........................................................................................................226 Глава 9. Распределенные системы и архитектура интернета вещей.........................................................................................................................228 9.1. Технические требования.....................................................................................229 9.2. Сетевые интерфейсы...........................................................................................229 9.2.1. MAC................................................................................................................230 Ethernet...............................................................................................................231 Wi-Fi....................................................................................................................231 Низкоскоростные беспроводные персональные сети (LR-WPAN)..................232 Промышленные расширения канального уровня LR-WPAN..........................233 6LoWPAN.............................................................................................................233 Bluetooth.............................................................................................................234 Сети мобильной связи.......................................................................................235 Сети дальней связи с низким энергопотреблением (LPWAN)........................235 9.2.2. Выбор подходящих сетевых интерфейсов..................................................237 9.3. Интернет-протоколы...........................................................................................238 9.3.1. Частные реализации стандартных протоколов..........................................239 9.3.2. Стек TCP/IP....................................................................................................239 9.3.4. Драйверы сетевых устройств.......................................................................241 9.3.5. Выполнение стека TCP/IP.............................................................................243 9.3.6. Использование сокетов................................................................................246 9.3.7. Протоколы без установления соединения..................................................248 9.3.8. Mesh-сети и динамическая маршрутизация..............................................248 9.4. TLS.........................................................................................................................251 9.4.1. Защита связи через сокет.............................................................................253 9.5. Протоколы приложений......................................................................................256 9.5.1. Протоколы сообщений.................................................................................257 9.5.2. Архитектурный шаблон REST......................................................................258 9.5.3. Распределенные системы – единые точки отказа......................................259 9.6. Заключение...........................................................................................................259 Часть IV. Многопоточность.................................................................................261 Глава 10. Параллельные задачи и планирование.....................................262
10 Содержание 10.1. Технические требования...................................................................................263 10.2. Управление задачами........................................................................................263 10.2.1. Блок задач....................................................................................................264 10.2.2. Переключение контекста...........................................................................266 10.2.3. Создание задач............................................................................................268 10.3. Реализация планировщика...............................................................................271 10.3.1. Вызовы супервайзера.................................................................................271 10.3.2. Планировщик совместного выполнения..................................................273 10.3.3. Параллелизм и кванты времени................................................................274 10.3.4. Блокировка задач........................................................................................275 10.3.5. Ожидание ресурсов.....................................................................................279 10.3.6. Планирование в реальном времени..........................................................282 10.4. Синхронизация..................................................................................................286 10.4.1. Семафоры....................................................................................................287 10.4.2. Мьютексы....................................................................................................289 10.4.3. Инверсия приоритета.................................................................................290 10.5. Разделение системных ресурсов.......................................................................291 10.5.1. Уровни привилегий....................................................................................291 10.5.2. Сегментация памяти..................................................................................293 10.5.3. Системные вызовы.....................................................................................295 10.6. Встраиваемые операционные системы............................................................299 10.6.1. Выбор операционной системы..................................................................299 10.6.2. FreeRTOS......................................................................................................300 10.6.3. Riot...............................................................................................................303 10.7. Заключение.........................................................................................................306 Глава 11. Доверенная среда выполнения....................................................307 11.1. Технические требования...................................................................................308 11.2. Песочница...........................................................................................................308 11.3. TrustZone-M........................................................................................................310 11.3.1. Тестовая платформа...................................................................................310 11.3.2. Защищенные и незащищенные области выполнения.............................312 11.4. Разделение системных ресурсов.......................................................................313 11.4.1. Атрибуты безопасности и области памяти...............................................314 11.4.2. Флеш-память и водяные знаки..................................................................317 11.4.3. Конфигурация GTZC и защита SRAM на основе блоков...........................318 11.4.4. Настройка безопасного доступа к периферийным устройствам............319 11.5. Сборка и запуск примера..................................................................................321 11.5.1. Включение TrustZone-M.............................................................................321 11.5.2. Безопасная точка входа в приложение......................................................321 11.5.3. Компиляция и компоновка приложений защищенной среды................322 11.5.4. Компиляция и компоновка приложений незащищенной среды............324 11.5.5. Переходы между средами выполнения.....................................................324 11.6. Заключение.........................................................................................................328 Предметный указатель........................................................................................329