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








Книги по Linux (с отзывами читателей)

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

Русский вариант Linux Device Driver 2-nd edition

Дата создания документа: 03.08.2004
Дата последнего изменения: 03.12.2004
Автор: Князев Алексей. knzsoft@mail.ru

ICQ: 194144861

Представляю вам часть работы над переводом известного фундаментального труда по написанию драйверов в Linux - Linux Device Driver 2-nd edition от Alessandro Rubini & Jonatan Corbet. В процессе чтения оригинального материала я принял решение построить русский вариант этого материала не в виде дословного перевода, а скорее "по мотивам" перевода. Из-за отсутствия фантазии и серьезного опыта в разработке драйверов под Linux я придерживаюсь оригинального материала, но с некоторыми, иногда обширными отступлениями. Эти отступления относятся, во-первых, к ядру 2.6.x, которое просто не представлено в оригинале по причине относительной давности материала, а, во-вторых, я попытался, на свой взгляд, ввести дополнения к оригиналу, в целях упрощения усвоения материала новичками. Ну, возможно, есть и будет что-то еще. Вообще, я собираюсь дополнить материал дополнительными примерами.

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

Просьба!!! Поскольку я не имею возможности средствами сайта определять посещаемость данного материала, то у меня будет просьба к тем, кому этот материал нужен. Отписывайтесь мне на e-mail. Так я смогу оценить востребованность материала. Присылайте, также, номера еще не переведенных глав, которые были бы вам интересны. Я буду стараться акцентировать внимание на наиболее востребованных главах. Кроме того, мне было бы интересно знать: какими задачами вы занимаетесь, для души или по работе, и как вы попали на эту страницу моего перевода. Также, напишите, считаете ли вы полезным публикацию данного материала в виде печатного издания - С уважением, Князев Алексей.

Для распаковки tar.bz2 архива можно воспользоваться командой tar xjf *tar.bz2.

Здесь вы сможете скачать оригинал и примеры, сопровождающие книгу

Содержание

Preface + части глав 1, 2 и 3.

Данный материал любезно предоставлен мне Андреем Киселевым (kis_an [at] mail.ru).
Рекомендую. Интересен, прежде всего нулевой главой, которую я даже не пытался перевести. Кроме того, можете оценить качество перевода и оформления - там даже картинки русифицированы.

Скачать материал. ldd2_ch0_kiselev.tar.bz2 (510k)

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

• Роль драйверов устройств
• Структура ядра
• Классы устройств и модулей
• Замечания о безопасности
• Нумерация версий
• Условия лицензии
• Вступление в общество разработчиков ядра (Kernel Development Community)
• Обзор книги

Скачать Главу 1. ldd2_ch1.tar.bz2 (43k)

Глава 2. Формирование и запуск модулей

• Hello world!
• Оригинальный Hello world!
• Различия между модулями и приложениями
• • Пользовательское пространство и пространство ядра
• • Распараллеливание в ядре
• • Информация о текущем процессе
• Компиляция и загрузка модулей
• • Зависимости версий
• • Зависимость от платформы
• • Особенности ядра 2.6
• Таблица символов ядра
• Инициализация и завершение модулей
• • Обработка ошибок в init_module
• • Счетчик использования модуля
• • Выгрузка модуля
• • Явное определение функций завершения и инициализации
• • Подведение итогов
• Использование ресурсов
• • Порты и память ввода/вывода
• • Порты
• • Память
• • Распределение ресурсов в Linux 2.4
• Автоматическое и ручное конфигурирование
• Что можно сделать с устройством в пользовательском процессе
• Вопросы обратной совместимости
• • Изменения в системе управления ресурсами
• • Компиляция для многопроцессорных систем
• • Экспортирование символов в Linux 2.0
• • Параметры конфигурации модуля
• Краткий справочник определений

Скачать Главу 2. ldd2_ch2.tar.bz2 (77k)

Глава 3. Драйверы символьных устройств

• Архитектура драйвера scull
• Старший и младший номера устройств
• • Динамическое распределение старших номеров устройств
• • Выгрузка драйвера из системы
• Файловые операции – обращение к драйверу через файловый интерфейс
• Структура file
• Методы open() и release()
• Использование памяти драйвером scull
• Краткое знакомство с проблемой Race Conditions (состязание)
• Методы read и write
• • Метод read()
• • Метод write()
• • Методы readv() и writev()
• Пробуем новый драйвер
• Файловая система devfs
• • Практическое использование devfs
• • Замечания о портируемости кода при использовании devfs
• Вопросы обратной совместимости
• • Изменения в структуре file_operations
• • Счетчик использования модуля
• • Изменения в поддержке семафоров
• • Изменения в доступе к адресному пространству пользователя из ядра
• Краткий справочник определений

Скачать Главу 3. ldd2_ch3.tar.bz2 (59k)

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

• Отладка через печать
• • Функция printk()
• • Как работает система логирования сообщений
• • Включение/выключение отладочных сообщений
• Получение отладочной информации по запросу
• • Использование файловой системы /proc
• • Метод ioctl()
• Отладка с использованием strace – трассировка системных вызовов
• Отладка при возникновении “System Faults”
• • Сообщение “oops”
• • Использование klogd
• • Использование ksymoops
• • Зависание системы
• Отладчики и дополнительные отладочные инструменты
• • Использование gdb
• • Отладчик ядра kdb
• • Патч IKD (Integrated Kernel Debugger)
• • Патч kgdb
• • “User-Mode Linux” порт
• • Набор утилит “Linux Trace Toolkit”

Скачать Главу 4. ldd2_ch4.tar.bz2 (26k)

Глава 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
• Краткий справочник определений

Скачать Главу 5. ldd2_ch5.tar.bz2 (95k)

Глава 6. Течение времени в ядре Linux

• Интервалы времени в ядре
• • Процессоро-зависимые регистры
• Получение текущего времени
• Выполнение временной задержки
• • Длительные временные задержки
• • Короткие временные задержки
• Очереди задач
• • Природа очереди задач
• • Принципы работы очередей задач
• • Предопределенные очереди задач (predefined task queue)
• • Пояснение работы примера
• • Очередь планировщика задач (scheduler queue)
• • Очередь таймера (timer queue)
• • Срочная очередь (immediate queue)
• • Запуск собственной очереди
• • Тасклеты (tasklets)
• Таймеры ядра
• Вопросы обратной совместимости
• Краткий справочник определений

Скачать Главу 6. ldd2_ch6.tar.bz2 (54k)


Если вы имеете электронные кошельки разных систем, то вам будет полезен сайт, осуществляющий мониторинг обменников электронных денег. В приведенной на сайте таблице представлены сведения о наиболее выгодных курсах обмена по 20-ти наиболее востребованным направлениям обмена.