Разработка драйверов устройств в ОС Linux
Подробнее о курсе
Краткое описание курса
Этот курс предоставляет слушателям глубокие знания и навыки, необходимые для разработки драйверов устройств для ОС Linux.
Ядро Linux используется в большинстве современных смартфонов за счет применения в популярной платформе Android. Кроме того, не следует забывать и про лидирующее положение Linux в сегменте суперкомпьютеров (469 из топ 500 суперкомпьютеров под данным www.top500.org), второе место в сегменте интернет-серверов и высокую популярность в корпоративном сегменте. GNU Compilers Collection является лидером в списке аналогичного программного обеспечения по популярности среди средств разработки решений с открытым исходным кодом.
Получаемые знания и навыки
По окончании курса слушатели научатся
- Понимать отличия драйверов устройств от прикладного ПО
- Знать специфику и ограничения, присущие драйверам устройств
- Понимать влияние ошибок в драйверах устройств на безопасность всей системы в целом
- Понимать отличия в реализации символьных драйверов устройств от блочных
- Знать особенности файловой системы /proc и специфику работы с ней
- Понимать конкуренцию и ситуацию гонок в ядре, проблемы и их решения
- Знать аспекты, связанные с совместимостью, специфику использования стандартных типов данных
- Получите опыт, достаточный, чтобы начать работать в качестве системного программиста Linux
Предварительно рекомендуется прослушать курс(ы)
Краткое содержание курса
Модуль 1 — Ядро Linux
- Архитектура ядра Linux
- Отличия разработки драйверов от прикладного ПО
- Потенциальные проблемы с безопасностью
- Лицензирование модулей ядра
Модуль 2 — Модули ядра Linux
- Простейший модуль ядра
- Знакомство с printk()
- Сборка модулей ядра
- Макроопределения __init и __exit
- Вопросы документирования модулей
- Передача модулю параметров командной строки
- Модули, состоящие из нескольких файлов
- Сборка модулей под существующее ядро
Модуль 3 — Модули ядра, пространства и устройства
- Модули ядра и прикладные программы
- Функции, которые доступны из модулей
- Пространство пользователя и пространство ядра
- Пространство имен
- Адресное пространство
- Старший и младший номер устройства
Модуль 4 — Символьные устройства
- Файлы символьных устройств
- Структура file_operations
- Структура file
- Регистрация устройства
- Отключение устройства
- Пример драйвера символьного устройства c доступом только на чтение
- Специфика поддержки записи для символьных устройств
- Пример драйвера символьного устройства c доступом на чтение и запись
Модуль 5 — Файловая система /proc
- Особенность файловой системы /proc
- Пример драйвера, создающего файл в /proc c доступом на чтение
- Пример драйвера, создающего файл в /proc c доступом на чтение
- Блокировка процессов при конкурентном доступе к устройству
- Пример драйвера, приостанавливающего работу процессов
Модуль 6 — Управление памятью в ядре Linux
- Специфика управления памятью в ядре Linux
- Преобразование адреса в ядре
- Отображение файла в память ядра
- Управление отображением в память
Модуль 7 — Блочные устройства
- Блочные устройства
- Регистрация блочного устройства
- Операции, поддерживаемые для блочных устройств
- Обработка запросов к блочному устройству
- Детали реализации блочного устройства
- Пример драйвера блочного устройства
Модуль 8 — Семафоры
- Конкуренция и ситуация гонок
- Семафоры и мьютексы
- Реализация семафора в ядре Linux
- Семафоры на чтение и запись
- Взаимоблокировки
- Пример драйвера, использующего семафоры
Модуль 9 — Данные
- Типы данных и структуры ядра
- Специфика использования стандартных типов данных
- Назначение типам данных явного размера
- Специфичные типы данных
- Аспекты, связанные с совместимостью
- Измерение временных интервалов
- Размер страницы
- Порядок следования байт в словах
- Выравнивание данных
- Размер указателя