Библиотека сайта 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-ти наиболее востребованным направлениям обмена.