Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Модули ядра Linux

Проект книги

Олег Цилюрик,

редакция 4.96

10.11.2011г.


Содержание

1. Предисловие от автора

Введение

Кому адресована эта книга

Структура книги

Соглашения принятые в тексте

Исходный код и замеченные опечатки

Замечания о версии ядра

Источники информации

2. Беглый взгляд на программирование модуля

Наш первый модуль ядра

Сборка модуля

Загрузка и исполнение

Структура модуля

Вывод диагностики модуля

Уровни диагностики в /proc

Основные ошибки модуля

Обсуждение итогов раздела 2

3. Архитектура и вокруг...

Ядро: монолитное и микроядро

Траектория системного вызова

Библиотечный и системный вызов из процесса

Возможен ли системный вызов из модуля?

Интерфейсы модуля

Взаимодействие модуля с ядром

Коды ошибок

Взаимодействие модуля с уровнем пользователя

Загрузка модулей

Параметры загрузки модуля

Подсчёт ссылок использования

Обсуждение итогов раздела 3

4. Окружение и инструменты

Основные команды

Системные файлы

Подсистема X11, терминал и текстовая консоль

Компилятор GCC

Ассемблер в Linux

Нотация AT&T

Инлайновый ассемблер GCC

Пример использования ассемблерного кода

О сборке модулей детальнее

Параметры компиляции

Как собрать одновременно несколько модулей?

Как собрать модуль и использующие программы к нему?

Пользовательские библиотеки

Как собрать модуль из нескольких объектных файлов?

Рекурсивная сборка

Инсталляция модуля

Нужно ли перекомпилировать ядро?

Обсуждение

5. Внешние интерфейсы модуля

Драйверы: интерфейс устройства

Примеры реализации

Управляющие операции устройства

Множественное открытие устройства

Счётчик ссылок использования модуля

Неблокирующий ввод-вывод и мультиплексирование

Блочные устройства

Интерфейс /proc

Интерфейс /sys

Сеть

Драйверы: сетевой интерфейс

Путь пакета сквозь стек протоколов

Протокол сетевого уровня

Протокол транспортного уровня

Статистики

6. Внутренние механизмы ядра

Механизмы управление памятью

Динамическое выделение участка

Распределители памяти

Слабовый распределитель

Страничное выделение

Выделение больших буферов

Динамические структуры и управление памятью

Циклический двусвязный список

Модуль использующий динамические структуры

Сложно структурированные данные

Обсуждение

Время: измерение и задержки

Информация о времени в ядре

Источник прерываний системного таймера

Дополнительные источники информации о времени

Три класса задач во временной области.

Измерения временных интервалов

Абсолютное время

Временные задержки

Таймеры ядра

Таймеры высокого разрешения

Часы реального времени (RTC)

Время и диспетчирование в ядре

Параллелизм и синхронизация

Потоки ядра

Синхронизации

Критические секции кода и защищаемые области данных

Механизмы синхронизации

Условные переменные и ожидание завершения

Атомарные переменные и операции

Битовые атомарные операции

Арифметические атомарные операции

Локальные переменные процессора

Предыдущая модель

Новая модель

Блокировки

Семафоры (мьютексы)

Спин-блокировки

Блокировки чтения-записи

Сериальные (последовательные) блокировки

Мьютексы реального времени

Инверсия и наследование приоритетов

Множественное блокирование

Предписания порядка выполнения

Обработка прерываний

Общая модель обработки прерывания

Регистрация обработчика прерывания

Отображение прерываний в /proc

Обработчик прерываний, верхняя половина

Управление линиями прерывания

Пример обработчика прерываний

Отложенная обработка, нижняя половина

Отложенные прерывания (softirq)

Тасклеты

Демон ksoftirqd

Очереди отложенных действий (workqueue)

Сравнение и примеры

Обсуждение и вопросы

7. Обслуживание периферийных устройств

Устройства на шине PCI

Подключение к линии прерывания

Отображение памяти

DMA

Устройства USB

8. Более экзотические возможности

Запуск процессов из ядра

Сигналы

Операции I/O пространства пользователя

Модификация системных вызовов

9. Отладка в ядре

Отладочная печать

Интерактивные отладчики

Отладка в виртуальной машине

Отдельные отладочные приёмы и трюки

Модуль исполняемый как разовая задача

Тестирующий модуль

Интерфейсы пространства пользователя к модулю

Комплементарный отладочный модуль

Некоторые мелкие советы в завершение

Чаще перезагружайте систему!

Используйте естественные POSIX тестеры

Тестируйте чтение сериями

10. Заключение

Приложения

Приложение А : сборка и установка ядра

Выбор ядра

Конфигурация

Компиляция

Установка

Обсуждение

Приложение Б: Краткая справка по утилите make

Приложение В: Пример - открытые VoIP PBX: Asterisk, FreeSwitch, и другие

Интерфейс устройств zaptel/DAHDI

Приложение Г: Тесты распределителя памяти

Источники информации

Архив примеров

Книга в формате OpenDocument (ODT, 346 599 байт)

Книга в формате PDF (1 519 449 байт)

Обсуждение книги на форуме нашего сайта

Обсуждение книги на форуме Linux.org.ru


Начинаем...


20.12.2011 О.И.Цилюрик подготовил обновленный вариант своей книги, теперь под названием "Программирование модулей ядра Linux":
- сделано достаточно много исправлений по замечаниям читателей (в одном случае это потребовало переписывания 3-х страниц текста);
- добавлена совершенно новая глава о работа с файлами из ядра;
- добавлена очень важная глава о деталях экспорта символов ядра для связывания модулей, и, в частности, о том, как в модуле использовать имена, не экспортируемые ядром;
- расширена библиография;
- существенно обновлены примеры к книге.
Версию книги от 15 декабря 2011 г. (редакция 3.111) вы можете скачать по следующим ссылкам:
в формате ODT (размер файла 393 150 байт).
в формате PDF (размер файла 1 315 600 байт).
обновленный файл примеров к книге Kexamples.BOOK.111.tgz (размер файла 3 537 785 байт).
28.02.2012 О.И.Цилюрик подготовил обновленный вариант приложения к своей книге "Программирование модулей ядра Linux". В примерах, кроме улучшения рекурсивной сборки, сделано много подчисток + всё проверено, теперь можете из корня дерева разархивированного сделать:
$ make
$ make clean
чтоб собрались все примеры за раз. make clean - не должен вас смущать: он потрёт только промежуточные и временные файлы.
Для полной очистки дерева в исходное состояние (только исходные коды):
$ make disclean
В архиве заметно больше примеров, чем в последних выложенных редакциях текста, это примеры, отработанные за прошедшее время.
Обновленный файл примеров к книге Kexamples.144.tgz (размер файла 809 769 байт).