Русский вариант Linux Device Driver 2-nd edition Дата создания документа: 03.08.2004
Дата последнего изменения: 03.12.2004
Автор: Князев Алексей. knzsoft[gav]mail[dot]ru
Цитата | Quote
Представляю вам часть работы над переводом известного фундаментального труда по написанию драйверов в Linux - Linux Device Driver 2-nd edition от Alessandro Rubini & Jonatan Corbet. В процессе чтения оригинального материала я принял решение построить русский вариант этого материала не в виде дословного перевода, а скорее "по мотивам" перевода. Из-за отсутствия фантазии и серьезного опыта в разработке драйверов под Linux я придерживаюсь оригинального материала, но с некоторыми, иногда обширными отступлениями. Эти отступления относятся, во-первых, к ядру 2.6.x, которое просто не представлено в оригинале по причине относительной давности материала, а, во-вторых, я попытался, на свой взгляд, ввести дополнения к оригиналу, в целях упрощения усвоения материала новичками. Ну, возможно, есть и будет что-то еще. Вообще, я собираюсь дополнить материал дополнительными примерами.
Надеюсь на вашу помощь в тестировании и исправлении ошибок материала.
Просьба!!! Поскольку я не имею возможности средствами сайта определять посещаемость данного материала, то у меня будет просьба к тем, кому этот материал нужен. Отписывайтесь мне на e-mail. Так я смогу оценить востребованность материала. Присылайте, также, номера еще не переведенных глав, которые были бы вам интересны. Я буду стараться акцентировать внимание на наиболее востребованных главах. Кроме того, мне было бы интересно знать: какими задачами вы занимаетесь, для души или по работе, и как вы попали на эту страницу моего перевода. Также, напишите, считаете ли вы полезным публикацию данного материала в виде печатного издания - С уважением, Князев Алексей.
Для распаковки tar.bz2 архива можно воспользоваться командой tar xjf *tar.bz2.
Оригинал и примеры, сопровождающие книгу_
http://www.oreilly.co...g/linuxdrive2/» "Содержание" «
Глава 1. Введение в драйвера устройств
• Роль драйверов устройств
• Структура ядра
• Классы устройств и модулей
• Замечания о безопасности
• Нумерация версий
• Условия лицензии
• Вступление в общество разработчиков ядра (Kernel Development Community)
• Обзор книги
Глава 2. Формирование и запуск модулей
• Hello world!
• Оригинальный Hello world!
• Различия между модулями и приложениями
• • Пользовательское пространство и пространство ядра
• • Распараллеливание в ядре
• • Информация о текущем процессе
• Компиляция и загрузка модулей
• • Зависимости версий
• • Зависимость от платформы
• • Особенности ядра 2.6
• Таблица символов ядра
• Инициализация и завершение модулей
• • Обработка ошибок в init_module
• • Счетчик использования модуля
• • Выгрузка модуля
• • Явное определение функций завершения и инициализации
• • Подведение итогов
• Использование ресурсов
• • Порты и память ввода/вывода
• • Порты
• • Память
• • Распределение ресурсов в Linux 2.4
• Автоматическое и ручное конфигурирование
• Что можно сделать с устройством в пользовательском процессе
• Вопросы обратной совместимости
• • Изменения в системе управления ресурсами
• • Компиляция для многопроцессорных систем
• • Экспортирование символов в Linux 2.0
• • Параметры конфигурации модуля
• Краткий справочник определений
Глава 3. Драйверы символьных устройств
• Архитектура драйвера scull
• Старший и младший номера устройств
• • Динамическое распределение старших номеров устройств
• • Выгрузка драйвера из системы
• Файловые операции – обращение к драйверу через файловый интерфейс
• Структура file
• Методы open() и release()
• Использование памяти драйвером scull
• Краткое знакомство с проблемой Race Conditions (состязание)
• Методы read и write
• • Метод read()
• • Метод write()
• • Методы readv() и writev()
• Пробуем новый драйвер
• Файловая система devfs
• • Практическое использование devfs
• • Замечания о портируемости кода при использовании devfs
• Вопросы обратной совместимости
• • Изменения в структуре file_operations
• • Счетчик использования модуля
• • Изменения в поддержке семафоров
• • Изменения в доступе к адресному пространству пользователя из ядра
• Краткий справочник определений
Глава 4. Техника отладки
• Отладка через печать
• • Функция printk()
• • Как работает система логирования сообщений
• • Включение/выключение отладочных сообщений
• Получение отладочной информации по запросу
• • Использование файловой системы /proc
• • Метод ioctl()
• Отладка с использованием strace – трассировка системных вызовов
• Отладка при возникновении “System Faults”
• • Сообщение “oops”
• • Использование klogd
• • Использование ksymoops
• • Зависание системы
• Отладчики и дополнительные отладочные инструменты
• • Использование gdb
• • Отладчик ядра kdb
• • Патч IKD (Integrated Kernel Debugger)
• • Патч kgdb
• • “User-Mode Linux” порт
• • Набор утилит “Linux Trace Toolkit”
Глава 5. Дополнительные операции в драйвере символьного устройства
• Системный вызов
• • Выбор команд ioctl()
• • Возвращаемое значение
• • Предопределенные команды
• • Использование аргумента команды в ioctl()
• • Концепция "мандатов" (capabilities) и привилегированные операции
• • Реализация команд ioctl()
• • Управление устройством не используя ioctl()
• Блокировка ввода/вывода
• • Уход в сон и пробуждение
• • Углубленный взгляд на очередь ожидания
• • Написание реентерабельного кода
• • Блокируемые и неблокируемые операции
• • Пример реализации: scullpipe
• Системные вызовы poll() и select()
• • Взаимодействие с методами read() и write()
• • Flushing - принудительный сброс выходного буфера
• • Структуры данных для poll() и select()
• Асинхронные уведомления (Asynchronous Notification)
• • Взгляд со стороны драйвера
• • Seeking a Device - перемещение по данным в устройстве
• • Реализация метода llseek()
• Дополнительное управление доступом к файлу устройства
• • Устройства single-open - одно открытие за раз
• • Отступление в проблему Race Conditions (борьба за ресурсы)
• • Ограничение доступа по принципу "Один пользователь за раз"
• • Блокировка метода open() как альтернатива EBUSY
• • Клонирование устройства в методе open()
• Вопросы обратной совместимости
• • Очереди ожидания в Linux 2.2 и 2.0
• • Асинхронные уведомления
• • Метод fsync()
• • Доступ к пространству пользователя в ядре Linux 2.0
• • "Мандаты" (Capabilities) в ядре 2.0
• • Метод select() в ядре Linux 2.0
• • Перемещение по файлу в ядре Linux 2.0
• • Ядро 2.0 и SMP
• Краткий справочник определений
Глава 6. Течение времени в ядре Linux
• Интервалы времени в ядре
• • Процессоро-зависимые регистры
• Получение текущего времени
• Выполнение временной задержки
• • Длительные временные задержки
• • Короткие временные задержки
• Очереди задач
• • Природа очереди задач
• • Принципы работы очередей задач
• • Предопределенные очереди задач (predefined task queue)
• • Пояснение работы примера
• • Очередь планировщика задач (scheduler queue)
• • Очередь таймера (timer queue)
• • Срочная очередь (immediate queue)
• • Запуск собственной очереди
• • Тасклеты (tasklets)
• Таймеры ядра
• Вопросы обратной совместимости
• Краткий справочник определений
Источник_
http://rus-linux.net/
Downloads (~857 Kb)_
https://softoroom.org/...ks/01/17/Linux Device Driver 2-nd edition.7z