Linux Device Drivers, Third Edition
This book is available under the terms of the Creative Commons Attribution-ShareAlike 2.0 license. That means that you are free to download and redistribute it. The development of the book was made possible, however, by those who purchase a copy from O’Reilly or elsewhere.
LDD3 is current as of the 2.6.10 kernel. See the LWN 2.6 API changes page for information on subsequent changes.
LDD3 chapter files
Title page Copyright and credits Table of Contents Preface Chapter 1: An Introduction to Device Drivers Chapter 2: Building and Running Modules Chapter 3: Char Drivers Chapter 4: Debugging Techniques Chapter 5: Concurrency and Race Conditions Chapter 6: Advanced Char Driver Operations Chapter 7: Time, Delays, and Deferred Work Chapter 8: Allocating Memory Chapter 9: Communicating with Hardware Chapter 10: Interrupt Handling Chapter 11: Data Types in the Kernel Chapter 12: PCI Drivers Chapter 13: USB Drivers Chapter 14: The Linux Device Model Chapter 15: Memory Mapping and DMA Chapter 16: Block Drivers Chapter 17: Network Drivers Chapter 18: TTY Drivers Index
Downloads
Copyright © 2021, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds
Источник
Как написать свой первый Linux device driver
Здравствуйте, дорогие хабрачитатели.
Цель данной статьи — показать принцип реализации драйверов устройств в системе Linux, на примере простого символьного драйвера.
Для меня же, главной целью является подвести итог и сформировать базовые знания для написания будущих модулей ядра, а также получить опыт изложения технической литературы для публики, т.к. через полгода я буду выступать со своим дипломным проектом (да я студент).
Это моя первая статья, пожалуйста не судите строго!
Получилось слишком много букв, поэтому я принял решение разделить статью на три части:
Часть 1 — Введение, инициализация и очистка модуля ядра.
Часть 2 — Функции open, read, write и trim.
Часть 3 — Пишем Makefile и тестируем устройство.
Перед вступлением, хочу сказать, что здесь будут изложены базовые вещи, более подробная информация будет изложена во второй и последней части данной статьи.
Подготовительные работы
Спасибо Kolyuchkin за уточнения.
Символьный драйвер (Char driver) — это, драйвер, который работает с символьными устройствами.
Символьные устройства — это устройства, к которым можно обращаться как к потоку байтов.
Пример символьного устройства — /dev/ttyS0, /dev/tty1.
К вопросу про проверсию ядра:
Драйвер представляет каждое символьное устройство структурой scull_dev, а также предостовляет интерфейс cdev к ядру.
Устройство будет представлять связный список указателей, каждый из которых указывает на структуру scull_qset.
Для наглядности посмотрите на картинку.
Для регистрации устройства, нужно задать специальные номера, а именно:
MAJOR — старший номер (является уникальным в системе).
MINOR — младший номер (не является уникальным в системе).
В ядре есть механизм, который позволяет регистрировать специализированные номера вручную, но такой подход нежелателен и лучше вежливо попросить ядро динамически выделить их для нас. Пример кода будет ниже.
После того как мы определили номера для нашего устройства, мы должны установить связь между этими номерами и операциями драйвера. Это можно сделать используя структуру file_operations.
В ядре есть специальные макросы module_init/module_exit, которые указывают путь к функциям инициализации/удаления модуля. Без этих определений функции инициализации/удаления никогда не будут вызваны.
Здесь будем хранить базовую информацию об устройстве.
Последним этапом подготовительной работы будет подключение заголовочных файлов.
Краткое описание приведено ниже, но если вы хотите копнуть поглубже, то добро пожаловать на прекрасный сайт: lxr
Инициализация
Теперь давайте посмотрим на функцию инициализации устройства.
Первым делом, вызывая alloc_chrdev_region мы регистрируем диапазон символьных номеров устройств и указываем имя устройства. После вызовом MAJOR(dev) мы получаем старший номер.
Далее проверяется вернувшееся значение, если оно является кодом ошибки, то выходим из функции. Стоит отметить, что при разработке реального драйвера устройства следует всегда проверять возвращаемые значения, а также указатели на любые элементы (NULL?).
Если вернувшееся значение не является кодом ошибки, продолжаем выполнять инициализацию.
Выделяем память, делая вызов функции kmalloc и обязательно проверяем указатель на NULL.
Стоит упомянуть, что вместо вызова двух функций kmalloc и memset, можно использовать один вызов kzalloc, который выделят область памяти и инициализирует ее нулями.
Продолжаем инициализацию. Главная здесь функция — это scull_setup_cdev, о ней мы поговорим чуть ниже. MKDEV служит для хранения старший и младших номеров устройств.
Возвращаем значение или обрабатываем ошибку и удаляем устройство.
Выше были представлены структуры scull_dev и cdev, которые реализуют интерфейс между нашим устройством и ядром. Функция scull_setup_cdev выполняет инициализацию и добавление структуры в систему.
Удаление
Функция scull_cleanup_module вызывается при удалении модуля устройства из ядра.
Обратный процесс инициализации, удаляем структуры устройств, освобождаем память и удаляем выделенные ядром младшие и старшие номера.
С удовольствием выслушаю конструктивную критику и буду ждать feedback’a.
Если вы нашли ошибки или я не правильно изложил материал, пожалуйста, укажите мне на это.
Для более быстрой реакции пишите в ЛС.
Источник
Драйверы устройств для Linux, 3-е издание
Год публикации: 2005
Авторы: Джонатан Корбет, Александро Рубини, Грег Кроах-Хартман
Издательство: ORelly
Лицензия: Creative Commons Attribution-NonCommercialShareAlike
2.0
Язык: русский
Страниц: 567
ISBN: 0-596-00590-3
В отличие от других операционных систем, ядро Linux полностью доступно для анализа, и даже изменения. Книга Linux Device Drivers, Third Edition вышла еще в 2005 году, но все еще содержит актуальную и полезную информацию для разработчиков, которые хотят программировать драйверы ядра. Здесь рассмотрены базовые концепции разработки драйверов, роль драйверов, создание различных типов драйверов, как для символьных так и для блочных устройств. В книге освещены все новые возможности, которые появились в версии ядра 2.6. Эти возможности позволили улучшить производительность ядра, а также упростили код и сделали создание драйверов намного легче.
Книга «Драйверы устройств для Linux 3-е издание» распространяется под лицензией Creative Commons Attribution-NonCommercialShareAlike
2.0, а это значит что вы можете ее бесплатно скачивать и распространять. Доработка книги тоже возможна, но только для тех, кто купил копию в ORelly.
Источник
Litgu.ru — Литературный Гуру
Linux Device Drivers, Third Edition
Название: Linux Device Drivers, Third Edition
Автор: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
Издательство: O’Reilly Media, Inc.
Год: 2005
Формат: PDF
Страниц: 632
Размер: 12,27 МБ
Язык: English
Device drivers literally drive everything you’re interested in—disks, monitors, keyboards, modems—everything outside the computer chip and memory. And writing device drivers is one of the few areas of programming for the Linux operating system that calls for unique, Linux-specific knowledge. For years now, programmers have relied on the classic Linux Device Drivers from O’Reilly to master this critical subject. Now in its third edition, this bestselling guide provides all the information you’ll need to write drivers for a wide range of devices.Over the years the book has helped countless programmers learn:
how to support computer peripherals under the Linux operating system
how to develop and write software for new hardware under Linux
the basics of Linux operation even if they are not expecting to write a driver
The new edition of Linux Device Drivers is better than ever. The book covers all the significant changes to Version 2.6 of the Linux kernel, which simplifies many activities, and contains subtle new features that can make a driver both more efficient and more flexible. Readers will find new chapters on important types of drivers not covered previously, such as consoles, USB drivers, and more.Best of all, you don’t have to be a kernel hacker to understand and enjoy this book. All you need is an understanding of the C programming language and some background in Unix system calls. And for maximum ease-of-use, the book uses full-featured examples that you can compile and run without special hardware.Today Linux holds fast as the most rapidly growing segment of the computer market and continues to win over enthusiastic adherents in many application areas. With this increasing support, Linux is now absolutely mainstream, and viewed as a solid platform for embedded systems. If you’re writing device drivers, you’ll want this book. In fact, you’ll wonder how drivers are ever written without it.
Изменил: alex66 по причине: обновлена ссылка
Источник
Linux device drivers third edition
Device drivers literally drive everything you’re interested in — disks, monitors, keyboards, modems—everything outside the computer chip and memory. And writing device drivers is one of the few areas of programming for the Linux operating system that calls for unique, Linux-specific knowledge. For years now, programmers have relied on the classic Linux Device Drivers from O’Reilly to master this critical subject. Now in its third edition, this bestselling guide provides all the information you’ll need to write drivers for a wide range of devices.
Over the years the book has helped countless programmers learn:
- how to support computer peripherals under the Linux operating system
- how to develop and write software for new hardware under Linux
- the basics of Linux operation even if they are not expecting to write a driver
The new edition of Linux Device Drivers is better than ever. The book covers all the significant changes to Version 2.6 of the Linux kernel, which simplifies many activities, and contains subtle new features that can make a driver both more efficient and more flexible. Readers will find new chapters on important types of drivers not covered previously, such as consoles, USB drivers, and more.
About the Authors
- Greg Kroah-Hartman has been building the Linux kernel since 1996 and started writing Linux kernel drivers in 1999. He is currently the maintainer of the USB, PCI, driver core and sysfs subsystems in the kernel source tree and is also one half of the -stable kernel release team. He created the udev program and maintains the Linux hotplug userspace project. He is a Gentoo Linux developer as well as the co-author of the third edition of the «Linux Device Drivers» book and a contributing editor to Linux Journal. He also created and maintains the Linux Device Driver Kit. He currently works for SuSE Labs/Novell, doing various Linux kernel related tasks.
Reviews, Ratings, and Recommendations:
- Amazon
- Amazon (Linux Kernel Development)
Related Book Categories:
- Unix/Linux Programming — System and Applications
- Core Lunx
- Unix/Linux System Administration
- Unix and Lunx
- Assembly and Machine Languages Programming
- Books by O’Reilly®
Read and Download Links:
- Linux Device Drivers, 3rd Edition (Jonathan Corbet, et al)
- The Mirror Site (1) — PDF
Similar Books:
- O’Reilly® Linux Device Drivers, 2nd Edition (Alessandro Rubini, Jonathan Corbet)
- The Linux Kernel Module Programming Guide (Peter Jay Salzman)
- Advanced Linux Programming (Mark L. Mitchell, et al)
Источник