- D -

DMA для устройств ISA

Общение с контроллером DMA

Регистрация использования DMA

- G -

get_free_page и друзья

scull, использующий целые страницы: scullp

Интерфейс alloc_pages

- I -

ioctl

Возвращаемое значение

Выбор команд ioctl

Использование аргумента ioctl

Предопределённые команды

Разрешения и запрещённые операции

Реализация команд ioctl

Управление устройством без ioctl

ioctl-ы

- K -

Kobject-ы, Kset-ы и Subsystem-ы

Иерархии kobject-а, kset-ы и subsystem-ы

Основы kobject

- N -

NuBus

- O -

open и release

Метод  release

Метод open

- P -

PC/104 и PC/104+

poll и select

Взаимодействие с read и write

Нижележащая структура данных

- R -

read и write

Метод read

Метод write

Функции readv и writev

- S -

SBus

- U -

USB и Sysfs

USB передачи без Urb-ов

usb_bulk_msg

usb_control_msg

Другие функции для работы с данными USB

- V -

vmalloc и друзья

scull использующий виртуальные адреса: scullv

- А -

Автоопределение номера прерывания

Проверка с помощью ядра

Самостоятельное тестирование

Альтернативы блокированию

seqlock-и

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

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

Последовательные блокировки

Прочитать-Скопировать-Обновить

Свободные от блокировки алгоритмы

Анатомия запроса

Барьерные запросы

Неповторяемые запросы

Поля структуры запроса

Структура bio

Аргумент flags

Зоны памяти

Асинхронное сообщение

С точки зрения драйвера

Асинхронный ввод/вывод

Пример асинхронного ввода/вывода

- Б -

Блоки запроса USB

struct urb

Завершение Urb-ов: завершающий обработчик с обратным вызовом

Отмена Urb-ов

Отправка Urb-ов

Создание и уничтожение Urb-ов

Блокирующий Ввод/Вывод

Блокирующие и неблокирующие операции

Знакомство с засыпанием

Подробности засыпания

Пример блокирующего ввода/вывода

Тестирование драйвера Scullpipe

Буферы сокетов

Важные поля

Функции, работающие с буферами сокетов

Быстрые и медленные обработчики

Внутренности обработки прерываний на x86

- В -

Ввод/вывод, управлемый прерыванием

Пример буферированной записи

Верхние и нижние половины

Микрозадачи

Очереди задач

Тасклеты

Взаимодействие с read и write

Запись в устройство

Сброс на диск в процессе вывода

Чтение данных из устройства

Взгляд назад: ISA

Аппаратные ресурсы

Программирование ISA

Спецификация Plug-and-Play

Внешние шины

Вопросы безопасности

Выполнение прямого ввода/вывода

Асинхронный ввод/вывод

- Г -

Генерация события горячего подключения

Операции горячего подключения

Глава 1, Введение в драйверы устройств

Вопросы безопасности

Классы устройств и модулей

Лицензионное соглашение

Нумерация версий

Обзор книги

Присоединение к сообществу разработчиков ядра Linux

Роль драйвера устройства

Строение ядра Linux

Глава 10, Краткая справка

Глава 10, Обработка прерываний

Ввод/вывод, управлемый прерыванием

Верхние и нижние половины

Краткая справка

Подготовка параллельного порта

Разделяемые прерывания

Реализация обработчика

Установка обработчика прерывания

Глава 11, Краткая справка

Глава 11, Типы данных в ядре

Другие вопросы переносимости

Использование стандартных типов языка Си

Краткая справка

Определение точного размера элементам данных

Связные списки

Типы, специфичные для интерфейса

Глава 12, PCI драйверы

NuBus

PC/104 и PC/104+

SBus

Взгляд назад: ISA

Внешние шины

Другие шины ПК

Интерфейс PCI

Краткая справка

Глава 12, Краткая справка

Глава 13, USB драйверы

USB и Sysfs

USB передачи без Urb-ов

Блоки запроса USB

Краткая справка

Написание USB драйвера

Основы USB устройства

Глава 13, Краткая справка

Глава 14, Краткая справка

Глава 14, Модель устройства в Linux

Kobject-ы, Kset-ы и Subsystem-ы

Генерация события горячего подключения

Горячее подключение

Классы

Краткая справка

Низкоуровневые операции в sysfs

Работа со встроенным программным обеспечением

Собираем всё вместе

Шины, устройства и драйверы

Глава 15, Краткая справка

Глава 15, Отображение памяти и DMA

Выполнение прямого ввода/вывода

Краткая справка

Операция устройства mmap

Прямой доступ к памяти

Управление памятью в Linux

Глава 16, Блочные драйверы

Краткая справка

Некоторые другие подробности

Обработка запроса

Операции блочного устройства

Регистрация

Глава 16, Краткая справка

Глава 17, Краткая справка

Глава 17, Сетевые драйверы

Буферы сокетов

Дополнительные команды ioctl

Изменение состояния соединения

Каким разработан snull

Краткая справка

Многоадресность

Несколько других подробностей

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

Открытие и закрытие

Передача пакетов

Подключение к ядру

Приём пакетов

Разрешение MAC адреса

Статистическая информация

Структура net_device в деталях

Уменьшение числа прерываний

Глава 18, TTY драйверы

ioctl-ы

Краткая справка

Настройки TTY линии

Небольшой TTY драйвер

Обработка TTY устройствами proc и sysfs

Структура tty_driver в деталях

Структура tty_operations в деталях

Структура tty_struct в деталях

Указатели на функции в tty_driver

Глава 18, Краткая справка

Глава 2, Краткая справка

Глава 2, Сборка и запуск модулей

Инициализация и выключение

Компиляция и загрузка

Краткая справка

Модуль Hello World

Отличия между модулями ядра и приложениями

Параметры модуля

Предварительные замечания

Работа в пространстве пользователя

Символьная таблица ядра

Установка вашей тестовой системы

Глава 3, Краткая справка

Глава 3, Символьные драйверы

open и release

read и write

Дизайн scull

Игра с новым устройством

Использование памяти в scull

Краткая справка

Некоторые важные структуры данных

Регистрация символьных устройств

Старший и младший номера устройств

Глава 4, Техники отладки

Отладка наблюдением

Отладка через запросы

Отладка через печать

Отладчик и соответствующие инструменты

Поддержка отладки в ядре

Система отладки неисправностей

Глава 5, Конкуренция и состояния состязаний

Альтернативы блокированию

Завершения

Конкуренция и управление ей

Краткая справка

Ловушки блокировок

Ловушки в scull

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

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

Глава 5, Краткая справка

Глава 6, Краткая справка

Глава 6, Расширенные операции символьного драйвера

ioctl

poll и select

Асинхронное сообщение

Блокирующий Ввод/Вывод

Контроль доступа к файлу устройства

Краткая справка

Произвольный доступ в устройстве

Глава 7, Время, задержки и отложенная работа

Измерение временных промежутков

Краткая справка

Микрозадачи

Определение текущего времени

Отложенный запуск

Очереди задач

Таймеры ядра

Тасклеты

Глава 7, Краткая справка

Глава 8, Выделение памяти

get_free_page и друзья

vmalloc и друзья

Заготовленные кэши

Как работает kmalloc

Копии переменных для каждого процессора

Краткая справка

Получение больших буферов

Глава 8, Краткая справка

Глава 9, Взаимодействие с аппаратными средствами

Использование памяти ввода/вывода

Использование портов ввода/вывода

Краткая справка

Порты ввода/вывода и память ввода/вывода

Пример порта ввода/вывода

Глава 9, Краткая справка

Горячее подключение

Динамические устройства

Использование /sbin/hotplug

Утилита /sbin/hotplug

- Д -

Дизайн scull

Длинные задержки

Время ожидания

Ожидание в состоянии занятости

Уступание процессора

Дополнительные команды ioctl

Драйверы устройств Linux, Третья Редакция

Другие вопросы переносимости

Выравнивание данных

Интервалы времени

Порядок байт

Размер страницы

Указатели и значения ошибок

Другие шины ПК

EISA

MCA

VLB

- З -

Завершения

Заготовленные кэши

scull, основанный на кешах кусков: scullc

Пулы памяти

Знакомство с засыпанием

Простое засыпание

- И -

Игра с новым устройством

Иерархии kobject-а, kset-ы и subsystem-ы

Kset-ы

Subsystem-ы

Операции с kset-ами

Изменение состояния соединения

Измерение временных промежутков

Использование счётчика тиков

Процессорно-зависимые регистры

Инициализация и выключение

Гонки при загрузке модуля

Перехват ошибок во время инициализации

Функция очистки

Интерфейс PCI

MODULE_DEVICE_TABLE

PCI прерывания

Адресация в PCI

Аппаратные абстракции

Доступ в пространство конфигурации

Доступ к пространствам ввода/вывода и памяти

Момент загрузки

Разрешение устройства PCI

Регистрация PCI драйвера

Регистры конфигурации и инициализация

Старый способ зондирования PCI

Использование /sbin/hotplug

udev

Скрипты горячего подключения Linux

Использование памяти в scull

Использование памяти ввода/вывода

ISA память ниже 1 Мб

isa_readb и друзья

Доступ к памяти ввода/вывода

Повторное использование short для памяти ввода/ввода

Получение памяти ввода/вывода и отображение

Порты как память ввода/вывода

Использование портов ввода/вывода

Доступ к портам ввода/вывода из пользовательского пространства

Зависимости от платформы

Назначение портов ввода/вывода

Пауза ввода/вывода

Строковые операции

Управление портами ввода/вывода

Использование стандартных типов языка Си

Использование файловой системы /proc

Интерфейс seq_file

Метод ioctl

Работа с файлами в /proc

Создание вашего файла в /proc

Устаревший интерфейс

- К -

Как работает kmalloc

Аргумент flags

Аргумент size

Каким разработан snull

Назначение IP адресов

Физический транспорт пакетов

Классы

Интерфейс class_simple

Полный интерфейс класса

Классы устройств и модулей

Компиляция и загрузка

Зависимость от версии

Зависимость от платформы

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

Компиляция модулей

Конкуренция и управление ей

Контроль доступа к файлу устройства

Блокирующее открытие как альтернатива EBUSY

Клонирование устройства при открытии

Ограничение доступа: один пользователей в один момент времени

Однократно-открываемые устройства

Копии переменных для каждого процессора

- Л -

Лицензионное соглашение

Ловушки блокировок

Правила очерёдности блокировки

Сомнительные правила

Точечное блокирование против грубого

Ловушки в scull

- М -

Микрозадачи

Многоадресность

Поддержка многоадресности в ядре

Типичная реализация

Модуль Hello World

- Н -

Написание USB драйвера

probe и disconnect в деталях

Какие устройства поддерживает драйвер?

Отправка и управление Urb

Регистрация USB драйвера

Настройки TTY линии

set_termios

tiocmget и tiocmset

Небольшой TTY драйвер

struct termios

Некоторые важные структуры данных

Структура file

Структура inode

Файловые операции

Некоторые другие подробности

Очереди помеченных команд

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

Несколько других подробностей

Netpoll

Поддержка Ethtool

Поддержка интерфейса, не зависящего от среды передачи

Низкоуровневые операции в sysfs

Атрибуты по умолчанию

Двоичные атрибуты

Нестандартные атрибуты

Символические ссылки

Нумерация версий

- О -

Обзор книги

Обзор передачи данных с прямым доступом к памяти

Самостоятельное выделение

Обработка TTY устройствами proc и sysfs

Обработка запроса

Анатомия запроса

Введение в метод request

Очереди запросов

Простой метод request

Функции завершения запроса

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

Операции блочного устройства

Метод ioctl

Методы open и release

Поддержка сменных носителей

Операция устройства mmap

Добавление операций VMA

Использование remap_pfn_range

Отображение памяти с помощью nopage

Переназначение заданных областей ввода/вывода

Перераспределение  виртуальных адресов ядра

Перераспределение ОЗУ

Простая реализация

Определение текущего времени

Определение точного размера элементам данных

Основы kobject

Внедрение kobject-ов

Инициализация kobject

Манипуляция счётчиком ссылок

Функции освобождения и типы kobject

Основы USB устройства

Интерфейсы

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

Оконечные точки

Открытие и закрытие

Отладка наблюдением

Отладка через запросы

Использование файловой системы /proc

Отладка через печать

printk

Включение и выключение сообщений

Как получить сообщения из лога

Ограничение скорости

Перенаправление сообщений консоли

Печать номеров устройств

Отладчик и соответствующие инструменты

Dynamic Probes

Linux Trace Toolkit

Вариант Linux для пользовательского режима

Использование gdb

Отладчик ядра kdb

Патчи kgdb

Отличия между модулями ядра и приложениями

Конкуренция в ядре

Несколько дополнительных деталей

Пространство пользователя и пространство ядра

Текущий процесс

Отложенный запуск

Длинные задержки

Короткие задержки

Очереди задач

Общая очередь

Очереди запросов

Создание и удаление очереди

Функции для очереди

Функции управления очередью

- П -

Параметры модуля

Передача пакетов

Ввод/вывод с разборкой/сборкой

Таймауты при передаче

Управление конкуренцией при передаче

Перераспределение ОЗУ

Перераспределение ОЗУ с помощью метода nopage

Подготовка параллельного порта

Поддержка отладки в ядре

Подключение к ядру

Выгрузка модуля

Инициализация каждого устройства

Регистрация устройства

Подробности засыпания

Детали пробуждения

Древняя история: sleep_on

Как процесс засыпает

Ручное управление засыпанием

Эксклюзивные ожидания

Полный интерфейс класса

Интерфейсы класса

Управление классами

Устройства класса

Получение больших буферов

Получение выделенного буфера во время загрузки

Порты ввода/вывода и память ввода/вывода

Регистры ввода/вывода и обычная память

Предварительные замечания

Приём пакетов

Пример порта ввода/вывода

Обзор параллельного порта

Пример драйвера

Присоединение к сообществу разработчиков ядра Linux

Произвольный доступ в устройстве

Реализация llseek

Прямой доступ к памяти

DMA для устройств ISA

Выделение DMA буфера

Обзор передачи данных с прямым доступом к памяти

Универсальный уровень DMA

Шинные адреса

- Р -

Работа в пространстве пользователя

Работа со встроенным программным обеспечением

Интерфейс ядра для встроенного программного обеспечения

Как это работает

Разделяемые прерывания

Интерфейс /proc и разделяемые прерывания

Работа обработчика

Установка обработчика разделяемого прерывания

Разрешение MAC адреса

Использование ARP с Ethernet

Не-Ethernet заголовки

Подмена ARP

Разрешение и запрет прерываний

Запрет всех прерываний

Запрет одного прерывания

Реализация обработчика

Аргументы обработчика и возвращаемое значение

Разрешение и запрет прерываний

Регистрация

Замечание о размерах секторов

Инициализация в sbull

Регистрация блочного драйвера

Регистрация диска

Регистрация диска

Операции блочного устройства

Структура gendisk

Регистрация символьных устройств

Регистрация устройства в scull

Старый способ

Роль драйвера устройства

- С -

Связные списки

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

Использование семафоров в scull

Реализация семафоров в Linux

Чтение/Запись семафоров

Символьная таблица ядра

Система отладки неисправностей

Зависания системы

Сообщения Oops

Собираем всё вместе

Добавление драйвера

Добавление устройства

Удаление драйвера

Удаление устройства

Создание и уничтожение Urb-ов

Urb-ы прерывания

Изохронные Urb-ы

Поточные Urb-ы

Управляющие Urb-ы

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

Знакомство с API спин-блокировки

Спин-блокировки и контекст атомарности

Функции спин-блокировки

Чтение/Запись спин-блокировок

Старший и младший номера устройств

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

Динамическое выделение старших номеров

Получение и освобождение номеров устройств

Статистическая информация

Строение ядра Linux

Загружаемые модули

Структура net_device в деталях

Вспомогательные поля

Информация об интерфейсе

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

Методы устройства

Общая информация

Структура tty_driver в деталях

Структура tty_operations в деталях

Структура tty_struct в деталях

- Т -

Таймеры ядра

API таймера

Реализация таймеров ядра

Тасклеты

Типы, специфичные для интерфейса

- У -

Указатели на функции в tty_driver

open и close

Движение данных

Другие функции буферизации

Нет функции read?

Уменьшение числа прерываний

Универсальный уровень DMA

Двухадресный цикл отображения PCI

Одностраничные потоковые отображения

Отображения DMA

Преобразования разборки/сборки

Простой пример DMA для PCI

Пулы DMA

Работа с проблемным оборудованием

Создание потоковых отображений DMA

Создание согласованных отображений DMA

Управление памятью в Linux

Верхняя и нижняя память

Карта памяти и структура page

Карта памяти процесса

Области виртуальной памяти

Структура vm_area_struct

Таблицы страниц

Типы адресов

Физические адреса и страницы

Установка вашей тестовой системы

Установка обработчика прерывания

Автоопределение номера прерывания

Быстрые и медленные обработчики

Интерфейс /proc

Устройства

Атрибуты устройства

Внедрение структуры устройства

Регистрация устройства

Утилита /sbin/hotplug

IEEE1394 (FireWire)

PCI

S/390 и zSeries

SCSI

USB

Ввод

Сеть

Установочные станции ноутбуков

- Ф -

Функции завершения запроса

Блочные запросы и DMA

Работа без очереди запросов

Работа с bios

- Ш -

Шины

Атрибуты шины

Методы шины

Перебор устройств и драйверов

Регистрация шины

Шины, устройства и драйверы

Внедрение структуры драйвера

Драйверы устройств

Устройства

Шины