Nano Hash - криптовалюты, майнинг, программирование

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

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

27.06.2012


Ответы:


1

Зависит от ваших текущих навыков. Если вы действительно новичок в Linux, возможно, вам следует начать с системного программирования пользовательского пространства с Advanced Linux Programming. . С помощью этого бесплатного ресурса вы получите хорошие знания о системных вызовах Unix и других концепциях, таких как сигналы, процессы/потоки и т. д. Это необходимо (понимание API пользовательского пространства), если вы разрабатываете на стороне ядра, поскольку роль ядра заключается в предоставлении услуг пользователям безопасным способом.

В других случаях часто цитируется книга Драйверы устройств Linux, третье издание (LDD3). Имейте в виду, что эта редакция была написана во времена Linux 2.6.10, и с тех пор кое-что изменилось. В этой статье показаны различия по мере развития версии 2.6 (до версии 2.6.31, то есть не очень полезной). Я должен упомянуть martinezjavier/ldd3, который содержит примеры драйверов LDD3, обновленных для более поздних ядер (спасибо 42n4 за указание на это).

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

27.06.2012

2

Сайт с очень важными ссылками: http://elinux.org/Device_drivers

Отличный туториал с реальными примерами (заканчивается usbpen, отформатированным под нашу файловую систему - ищите автора в дальнейших статьях):

  1. http://www.linuxforu.com/tag/linux-device-drivers-series/
  2. http://sysplay.in/index.php?pagefile=lfy_articles

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

Видео:

  1. https://www.youtube.com/playlist?list=PL16941B715F5507C5

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

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

Несколько примеров:

  1. http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
  2. http://www.freesoftwaremagazine.com/articles/drivers_linux
  3. http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
  4. http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/

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

  1. http://www.coopj.com/ с обновленным исходным кодом http://www.coopj.com/LPD/

KernelHacking: http://kernelnewbies.org/KernelHacking

Визуальная карта ядра Linux: http://www.makelinux.net/kernel_map/

Книги по Linux и ядру для начинающих:

  1. http://www.kroah.com/lkn/
  2. http://swift.siphos.be/linux_sea/
14.03.2014
  • +1, хотя имейте в виду, что старые вопросы такого рода - согласно современным рекомендациям по переполнению стека - не по теме, поскольку они считаются слишком широкими. 14.03.2014

  • 3

    Вас могут заинтересовать недавно выпущенные шаблоны драйверов Linux. Как следует из названия, он предоставляет шаблоны и демонстрирует часто используемые средства Linux для быстрого начала работы.

    13.11.2012
  • Эй, не могли бы вы объяснить, как пройти LDT ?? 29.09.2014

  • 4

    Я понимаю, что это запоздалый ответ!!

    Вы можете выбрать любую книгу, это действительно отличные книги, предложенные выше.

    Но нужно действительно работать практически. Старайтесь как можно больше участвовать в работе ядра.

    В основном вам нужно заглянуть в сам исходный код ядра.

    И самый интересный документ вы можете найти в папке Documentation в дереве ядра.

    02.04.2013

    5

    лучшей книгой для изучения программирования драйверов устройств является
    "LDD"

    29.06.2012

    6

    Профессиональная архитектура ядра Linux также является хорошим чтением.

    22.02.2014

    7

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

    Переходим к запуску: -

    1. Программирование в пользовательском пространстве Основы gcc, создание пропроцессированных, ассемблерных и объектных файлов с использованием команд gcc, анализ объектных файлов с использованием различных объектных инструментов, базовое программирование в Linux, потоки (блокировки, методы синхронизации), сигналы, процессы (fork, exec), таймеры (Posix). ). Это очень поможет вам в понимании концепций ядра.

    2. Программирование ядра Понимание дерева исходного кода ядра, различных ветвей и их важности, использование ctags и cscope для просмотра исходного кода ядра, это поможет вам в просмотре исходного кода ядра.

    3. Программирование драйвера Прежде всего, изучите различные классы драйверов, символы, блоки и т. д. Затем изучите протоколы устройства, передачу и прием, руководство по продукту является лучшим источником для изучения этого. Затем начните писать простой символьный драйвер, например, RTC (устройство с отображением портов), IOAPIC (устройство с отображением памяти), затем перейдите к USB, PCI, Network, I2C, SPI и т. д., если вам нужна помощь, вы можете найти скелет код для всего этого в дереве исходного кода ядра.

    05.10.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование