Я хочу изучить программирование драйвера ядра Linux. Так кто может, пожалуйста, разместите хорошие страницы учебников или ссылки здесь. Я новичок в среде ядра Linux. Я искал его, но я не знаю, с чего начать, и какой из них читать для понимания. Заранее спасибо.
Программирование драйвера ядра Linux
Ответ 1
Зависит от ваших текущих навыков. Если вы действительно новичок в Linux, возможно, вам следует начать с программирования пользовательской космической системы с помощью Advanced Linux Programming. Вы получите хорошее знание системных вызовов Unix и других концепций, таких как сигналы, процессы/потоки и т.д. С помощью этого бесплатного ресурса. Это необходимо (понимание API пользовательского пространства), если вы разрабатываете на стороне ядра, так как роль ядра предоставляет безопасные услуги пользователям.
В противном случае часто упоминается книга Драйверы устройств Linux, третье издание (LDD3). Имейте в виду, что это издание было написано во время Linux 2.6.10, и с тех пор некоторые вещи изменились. В этой статье показаны различия по мере развития 2.6 (до 2.6.31, то есть так не очень полезно). Я должен упомянуть martinezjavier/ldd3, который содержит примеры драйверов LDD3, обновленных для более свежих ядер (благодаря 42n4 для указания этого).
Еще одна интересная книга, которая не так часто упоминается, - Основные драйверы устройств Linux. Вы не найдете бесплатную версию этого, но он по-прежнему имеет интересный подход. Что мне нравится в этом, так это то, что он охватывает множество различных типов устройств и обновлен с 2.6.24, что немного лучше LDD.
Наконец, одна великая книга о самом ядре (не специально для драйверов) - Понимание ядра Linux, 3-е издание. Это охватывает глубинные ядровые средства и внутренние механизмы. Он обновлен с 2,6.11.
Что касается онлайн-учебников, я нашел этот пост в блоге Пита - действительно отличный пример. Он не только показывает, как создать персональное устройство (самый простой тип драйвера ядра, то есть тот, с которого вы должны начать), он использует современные возможности ядра Linux в удобном для понимания виде, в том числе:
- использование udev
- использование структуры данных ядра (FIFO)
- использование синхронизации ядра (mutex)
- использование Sysfs с пользовательскими атрибутами
- параметры модуля для
insmod
Плюс: он нацелен на Linux 3.0, что означает, что он более современный по сравнению с другими ресурсами.
Вам также может понравиться этот пост о том, как создавать записи Sysfs вручную, хотя модель устройства Linux будет заботиться о регистрации вашего устройства как записи Sysfs, если вы Не нужны дополнительные узлы или атрибуты.
Изменить. Я должен добавить, что лучший способ изучить настоящую версию драйверов устройств Linux - это посмотреть на фактические драйверы. В drivers
есть тысячи драйверов. Начните читать и понимать концепцию простых, таких как drivers/leds
, и вы увидите, насколько это полезно.
Ответ 2
Сайт с очень важными ссылками: http://elinux.org/Device_drivers
Отличный учебник с реальными примерами (заканчивается с usbpen, отформатированным с помощью нашей собственной файловой системы - поиск авторов дальнейших статей):
- http://www.linuxforu.com/tag/linux-device-drivers-series/
- http://sysplay.in/index.php?pagefile=lfy_articles
Исходный код знаменитой книги LDD3, перенесенной в новейшие ядра: https://github.com/martinezjavier/ldd3/
Видео:
Возможно, другие курсы:
Некоторые примеры:
- http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
- http://www.freesoftwaremagazine.com/articles/drivers_linux
- http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
- http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/
Книги (без упоминания в этом потоке LDD3):
- http://www.coopj.com/ с обновленным исходным кодом http://www.coopj.com/LPD/
KernelHacking: http://kernelnewbies.org/KernelHacking
Визуальная карта ядра linux: http://www.makelinux.net/kernel_map/
Книги для Linux и ядра для начинающих:
Ответ 3
Вам может быть интересна недавно выпущенная Linux Driver Templates. Как следует из названия, он предоставляет шаблоны и демонстрирует часто используемые средства Linux для быстрого запуска.
Ответ 4
Я понимаю, что это отложенный ответ!
Вы можете выбрать любую книгу, это действительно отличные книги, предложенные выше.
Но вам действительно нужно работать практически. Постарайтесь как можно больше задействовать ядро.
В основном вам нужно изучить исходный код ядра.
И самый интересный документ, который вы можете найти в папке Documentation в дереве ядра.
Ответ 5
лучшая книга для обучения драйверов устройств "LDD"
Ответ 6
Профессиональная архитектура ядра Linux также хорошо читается.
Ответ 7
Лучший источник - это страницы руководства linux, но они очень важны для понимания для новичков. Непосредственное программирование драйверов устройств - непростая задача. Я рекомендую вам просмотреть указатели и структуры через следующие книги.
Основные книги C 1. Программирование C - Byron gottfried 2. Язык программирования C - Dennis Ritchie
Промежуточные книги 1. Указатели на C Kenneth Reek 2. Эксперт C Программирование Deep Secrets - Linden
Прибытие на устройство Драйверы Я загрузил исходную документацию ядра в формате pdf https://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharing Вы можете скачать по этой ссылке.
Основы драйверов устройств (Программирование пользовательского режима)
Интерфейс программирования Linux - Майкл Керриск Начало программирования Linux Wrox Publishers Драйверы устройств (Kernel Deleopment) 1. Linux Kernel Development - Robert Love 2. Внутренние ядра ядра Linux - m beck
Драйверы устройств (программирование драйверов) 1. Драйверы устройств Linux - третье издание (бесплатная загрузка доступна для ядра 2.6) 2. Основные драйверы устройств Linux - Venkateswaran
Для основных знаний о драйверах Следуйте этому сайту http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html
Мой опыт Прежде всего, мы должны получить хорошие знания по программированию на C, в основном по структурам и указателям, прежде чем переходить через Программирование драйверов, иначе будет сложно выполнять программирование драйверов.
Приступая к запуску: -
-
Программирование пространства пользователя Основы gcc-генерации обработанных, ассемблерных и объектных файлов с использованием gcc-команд для анализа объектных файлов с использованием различных объектных инструментов, базового программирования в linux, потоков (блокировок, методов синхронизации), сигналов, процессов (fork, exec), таймеров (Posix). Это поможет вам понять концепцию ядра.
-
Программирование ядра Понимая исходное дерево ядра, разные ветки и их важность, используя ctags и cscope для просмотра исходного кода ядра, это поможет вам в просмотре исходного кода ядра.
-
Программирование драйверов Прежде всего, изучите различные классы драйверов, char, блок и т. Затем изучите протоколы устройств, передачу и прием, руководство по продуктам является лучшим источником для этого. Затем начните писать простой драйвер char, например, RTC (устройство с отображением портов), IOAPIC (устройство с отображением памяти), затем перейдите на USB, PCI, Network, I2C, SPI и т.д., Если вы хотите получить помощь, которую вы можете найти скелетный код для всего этого в дереве исходного кода ядра.