Я хочу научиться программированию драйверов устройств ядра Linux. Так что может ли кто-нибудь опубликовать хорошие страницы учебников или ссылки здесь. Я новичок в среде ядра Linux. Я искал его, но я не знаю, с чего начать и какой читать для легкого понимания основ. Заранее спасибо.
Программирование драйверов устройств ядра Linux
- Это также немного помогает linuxseekernel.blogspot.ie/2015/08 / 26.11.2015
- Минимальная автоматизированная установка модуля ядра QEMU + Buildroot + BusyBox: github.com/cirosantilli/linux-kernel -module-cheat 19.06.2017
Ответы:
Зависит от ваших текущих навыков. Если вы действительно новичок в Linux, возможно, вам следует начать с системного программирования пользовательского пространства с Advanced Linux Programming. а>. С помощью этого бесплатного ресурса вы получите хорошие знания о системных вызовах Unix и других концепциях, таких как сигналы, процессы/потоки и т. д. Это необходимо (понимание API пользовательского пространства), если вы разрабатываете на стороне ядра, поскольку роль ядра заключается в предоставлении услуг пользователям безопасным способом.
В других случаях часто цитируется книга Драйверы устройств Linux, третье издание (LDD3). Имейте в виду, что эта редакция была написана во времена Linux 2.6.10, и с тех пор кое-что изменилось. В этой статье показаны различия по мере развития версии 2.6 (до версии 2.6.31, то есть не очень полезной). Я должен упомянуть martinezjavier/ldd3, который содержит примеры драйверов LDD3, обновленных для более поздних ядер (спасибо 42n4 em> за указание на это).
Еще одна интересная книга, которую не так часто цитируют, — Essential Linux Device Drivers. Вы не найдете бесплатную версию этой программы, но она по-прежнему имеет интересный подход. Что мне нравится в этом, так это то, что он охватывает множество различных типов устройств и обновлен до версии 2.6.24, что немного лучше, чем LDD.
Наконец, одна замечательная книга о самом ядре (не конкретно о драйверах) называется Understanding the Linux Kernel, 3rd Edition. Это охватывает всесторонние возможности ядра и внутренние механизмы. Он актуален по состоянию на 2.6.11.
Что касается онлайн-учебников, я нашел этот пост в блоге Пита. это действительно отличный пример. Он не только показывает, как создать символьное устройство (самый простой тип драйвера ядра, то есть тот, с которого вы должны начать), но и использует современные функции ядра Linux в простой для понимания форме, в том числе:
- использование udev
- использование структуры данных ядра (FIFO)
- использование синхронизации ядра (мьютекс)
- использование Sysfs с пользовательскими атрибутами
- параметры модуля для
insmod
Плюс: он предназначен для Linux 3.0, а значит, более актуален по сравнению с другими ресурсами.
Вам также может понравиться это сообщение о том, как создать Sysfs записи вручную, хотя модель устройства Linux позаботится о регистрации вашего устройства в качестве записи Sysfs, если вам не нужны дополнительные узлы или атрибуты.
Редактировать: я должен добавить, что лучший способ научиться программированию реальных драйверов устройств Linux — это посмотреть на настоящие драйверы. В drivers
тысячи драйверов. Начните читать и понимать концепцию простых, таких как drivers/leds
, и вы увидите, насколько это полезно.
Сайт с очень важными ссылками: 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 и ядру для начинающих:
Вас могут заинтересовать недавно выпущенные шаблоны драйверов Linux. Как следует из названия, он предоставляет шаблоны и демонстрирует часто используемые средства Linux для быстрого начала работы.
Я понимаю, что это запоздалый ответ!!
Вы можете выбрать любую книгу, это действительно отличные книги, предложенные выше.
Но нужно действительно работать практически. Старайтесь как можно больше участвовать в работе ядра.
В основном вам нужно заглянуть в сам исходный код ядра.
И самый интересный документ вы можете найти в папке Documentation в дереве ядра.
Профессиональная архитектура ядра Linux также является хорошим чтением.
Лучшим источником являются справочные страницы Linux, но они несколько важны для понимания новичком. Непосредственное программирование драйверов устройств — непростая задача. Я рекомендую вам пройтись по указателям и структурам в следующих книгах
Книги по основам C 1. Programming 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 (развертывание ядра) 1. Разработка ядра Linux — Роберт Лав 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 для просмотра исходного кода ядра, это поможет вам в просмотре исходного кода ядра.
Программирование драйвера Прежде всего, изучите различные классы драйверов, символы, блоки и т. д. Затем изучите протоколы устройства, передачу и прием, руководство по продукту является лучшим источником для изучения этого. Затем начните писать простой символьный драйвер, например, RTC (устройство с отображением портов), IOAPIC (устройство с отображением памяти), затем перейдите к USB, PCI, Network, I2C, SPI и т. д., если вам нужна помощь, вы можете найти скелет код для всего этого в дереве исходного кода ядра.