Описание
Ядро Linux используется в большинстве современных смартфонов за счет применения в популярной платформе Android. Кроме того, не следует забывать и про лидирующее положение Linux в сегменте суперкомпьютеров (485 из  топ 500 суперкомпьютеров под данным www.top500.org), второе место в сегменте интернет-серверов и высокую популярность в корпоративном сегменте. GNU Compilers Collection является лидером в списке аналогичного программного обеспечения по популярности среди средств разработки решений с открытым исходным кодом.

Приобретаемые на курсе навыки:
  • Понимать отличия драйверов устройств от прикладного ПО
  • Знать специфику и ограничения, присущие драйверам устройств
  • Понимать влияние ошибок в драйверах устройств на безопасность всей системы в целом
  • Понимать отличия в реализации символьных драйверов устройств от блочных
  • Знать особенности файловой системы /proc и специфику работы с ней
  • Понимать конкуренцию и ситуацию гонок в ядре, проблемы и их решения
  • Знать аспекты, связанные с совместимостью, специфику использования стандартных типов данных 
  • Получите опыт, достаточный, чтобы начать работать в качестве системного программиста Linux
Целевая аудитория

Курс рассчитан на программистов окончивших курс «Программирование в Linux на C/C++» или имеющих эквивалентную подготовку.

Программа
  • Модуль 1-5

    Модуль 1

    • Архитектура ядра linux
    • Отличия разработки драйверов от прикладного ПО
    • Потенциальные проблемы с безопасностью
    • Лицензирование модулей ядра

    Модуль 2

    • Простейший модуль ядра
    • Знакомство с printk()
    • Сборка модулей ядра
    • Макроопределения __init и __exit
    • Вопросы документирования модулей
    • Передача модулю параметров командной строки
    • Модули, состоящие из нескольких файлов
    • Сборка модулей под существующее ядро

    Модуль 3

    • Модули ядра и прикладные программы
    • Функции, которые доступны из модулей
    • Пространство пользователя и пространство ядра
    • Пространство имен
    • Адресное пространство
    • Старший и младший номер устройства

    Модуль 4

    • Файлы символьных устройств
    • Структура file_operations
    • Структура file
    • Регистрация устройства
    • Отключение устройства
    • Пример драйвера символьного устройства c доступом только на чтение
    • Специфика поддержки записи для символьных устройств
    • Пример драйвера символьного устройства c доступом на чтение и запись

    Модуль 5

    • Особенность файловой системы /proc
    • Пример драйвера, создающего файл в /proc c доступом на чтение
    • Пример драйвера, создающего файл в /proc c доступом на чтение
    • Блокировка процессов при конкурентном доступе к устройству
    • Пример драйвера, приостанавливающего работу процессов
  • Модуль 6-9

    Модуль 6

    • Специфика управления памятью в ядре Linux
    • Преобразование адреса в ядре
    • Отображение файла в память ядра
    • Управление отображением в память

    Модуль 7

    • Блочные устройства
    • Регистрация блочного устройства
    • Операции, поддерживаемые для блочных устройств
    • Обработка запросов к блочному устройству
    • Детали реализации блочного устройства
    • Пример драйвера блочного устройства

    Модуль 8

    • Конкуренция и ситуация гонок
    • Семафоры и мьютексы
    • Реализация семафора в ядре Linux
    • Семафоры на чтение и запись
    • Взаимоблокировки
    • Пример драйвера, использующего семафоры

    Модуль 9

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