Подтвердить что ты не робот

Программирование драйвера ядра Linux

Я хочу изучить программирование драйвера ядра Linux. Так кто может, пожалуйста, разместите хорошие страницы учебников или ссылки здесь. Я новичок в среде ядра Linux. Я искал его, но я не знаю, с чего начать, и какой из них читать для понимания. Заранее спасибо.

4b9b3361

Ответ 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, отформатированным с помощью нашей собственной файловой системы - поиск авторов дальнейших статей):

Исходный код знаменитой книги LDD3, перенесенной в новейшие ядра: https://github.com/martinezjavier/ldd3/

Видео:

Возможно, другие курсы:

  1. http://www.skilledup.com/courses?keyword=linux+kernel&price_filter=0..0

Некоторые примеры:

Книги (без упоминания в этом потоке LDD3):

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 и т.д., Если вы хотите получить помощь, которую вы можете найти скелетный код для всего этого в дереве исходного кода ядра.