Изучить исходные файлы драйвера устройства?

Я хочу изучить исходные файлы некоторых драйверов устройств, которые установлены и загружены на raspberry pi(raspian), beaglebone(debian) или на моем ноутбуке (ubuntu).

Моя цель - научиться правильно реализовывать свои собственные модули, изучая исходные файлы некоторых драйверов, которые действительно работают.

Я особенно заинтересован в драйверах, которые взаимодействуют с реальным оборудованием (USB, I2C, SPI, UART и т. Д.).

Может кто-нибудь сказать мне, как найти эти источники? они доступны в какой-то конкретной папке, например, в /usr/src/****, или мне нужно загрузить все исходные файлы ядра из определенного выпуска ядра?

Все советы, мнения и рекомендации наиболее ценны.

ps Я читал "Linux Kernel Development 3rd edition", но, пожалуйста, скажите, знаете ли вы какие-либо другие книги с открытым исходным кодом на эту тему.

С наилучшими пожеланиями Хенрик

3 ответа

Решение

Linux Source каталог и описание:

  • arch / - Подкаталог arch содержит весь специфический для архитектуры код ядра.

    Example :
    1. 'arch/arm/' will have your board related configuration file.
        like 'arch/arm/mach-omap/' will have omap specific source code.
    2. 'arch/arm/config' Generates a new kernel configuration with the
        default answer being used for all options. The default values
        are taken from a file located in the arch/$ARCH/defconfig
        file,where $ARCH refers to the specific architecture for which
        the kernel is being built.
    3. arch/arm/boot have kernel zImage, dtb image after compilation.
    
  • block / - эта папка содержит код для драйверов блочных устройств. Блочные устройства - это устройства, которые принимают и отправляют данные в блоках. Блоки данных - это куски данных, а не непрерывный поток.

  • crypto / - эта папка содержит исходный код для многих алгоритмов шифрования.

     example, “sha1_generic.c” is the file that contains the code for
               the sha1 encryption algorithm.
    
  • Документация / - Содержит информацию о ядре в текстовом формате.

  • drivers / - Все драйверы устройств системы находятся в этом каталоге. Далее они подразделяются на классы драйверов устройств.

     Example,
     1. drivers/video/backlight/ has blacklight driver source which
        will control display brightness.
     2. drivers/video/display/ has display driver source. 
     3. drivers/input/ has input driver source code. like touch,
        keyboard and mouse driver.
     4. drivers/char/ has charter driver source code.
     5. drivers/i2c/ has i2c subsystem and driver source code.
     6. drivers/pci/ has pci subsytem and driver related source code.
     7. drivers/bluetooth  has Bluetooth driver file.
     8. drivers/power has power and battery driver.
    
  • firmware / - Папка прошивки содержит код, который позволяет компьютеру считывать и понимать сигналы от устройств. Для иллюстрации, веб-камера управляет своим собственным оборудованием, но компьютер должен понимать сигналы, которые веб-камера посылает компьютеру.

  • fs / - Весь код файловой системы. Далее он подразделяется на каталоги, по одному на поддерживаемую файловую систему, например, vfat и ext2.

  • kernel / - код в этой папке управляет самим ядром. Например, если отладчику необходимо отследить проблему, ядро ​​будет использовать код, исходящий из исходных файлов в этой папке, для информирования отладчика обо всех действиях, которые выполняет ядро. Здесь также есть код для отслеживания времени. В папке ядра находится каталог с названием "power". Некоторый код в этой папке позволяет компьютеру перезагружаться, выключаться и приостанавливаться.

  • net / - net Сетевой код ядра. lib Этот каталог содержит код библиотеки ядра. Код библиотеки для конкретной архитектуры можно найти в arch / * / lib /. скрипты Этот каталог содержит скрипты (например, скрипты awk и tk), которые используются при настройке ядра.

  • lib / - Этот каталог содержит код библиотеки ядра. Код библиотеки для конкретной архитектуры можно найти в arch / * / lib /.

  • scripts / - Этот каталог содержит сценарии (например, сценарии awk и tk), которые используются при настройке ядра.

  • мм / - этот каталог содержит весь код управления памятью. Архитектурно-ориентированный код управления памятью записывается в arch / * / mm /, например, arch / i386 / mm / fault.c.

  • ipc / - Этот каталог содержит код межпроцессного взаимодействия ядра.

  • ** init / - ** Папка init содержит код, который запускает ядро ​​(INITiation). Файл main.c является ядром ядра. Это основной файл исходного кода, который связывает все остальные файлы.

  • sound / - Здесь находятся все драйверы звуковой карты.

Есть еще несколько сертификатов каталогов, шифрование, безопасность, include, virt, usr и т. Д....

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

  1. Зайдите на сайт https://www.kernel.org/ и загрузите ядро ​​по вашему выбору. Вы найдете источник, связанный с драйвером под /<path to your downloaded kernel>/drivers, Например, я скачал и извлек ядро ​​4.5.5 для/usr/src/linux-4.5.5и получить доступ к источнику для моих драйверов через/usr/src/linux-4.5.5/drivers,

  2. Используйте веб-сайт перекрестных ссылок Linux. Лично я использую тот, который размещен на свободных электронах. Эти сайты хороши для поиска в свободном тексте или по идентификатору.

  3. Просмотрите репозиторий Linus Torvalds, размещенный на github.

Неважно, я нашел исходные файлы под

~/linux/drivers/

пример:

nano ~/linux/drivers/spi/spi-bitbang.c

Приносим извинения за доставленные неудобства!

Другие вопросы по тегам