Изучить исходные файлы драйвера устройства?
Я хочу изучить исходные файлы некоторых драйверов устройств, которые установлены и загружены на 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 и т. Д....
Есть несколько разных методов, которые я использую для просмотра связанных с ядром источников, и я уверен, что есть и несколько других хороших методов. Вы обнаружите, что методы в основном одинаковы.
Зайдите на сайт 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
,Используйте веб-сайт перекрестных ссылок Linux. Лично я использую тот, который размещен на свободных электронах. Эти сайты хороши для поиска в свободном тексте или по идентификатору.
Просмотрите репозиторий Linus Torvalds, размещенный на github.
Неважно, я нашел исходные файлы под
~/linux/drivers/
пример:
nano ~/linux/drivers/spi/spi-bitbang.c
Приносим извинения за доставленные неудобства!