SlideShare a Scribd company logo
Как перестать бояться ядра Linux и начать
писать драйвера
Что такое ядро Linux
● Модули
● Загрузка-выгрузка
● Внешнее и внутреннее API
Мы хотим писать в ядре
● Высокая ответственность
– проверки
– обработка ошибок
● Непонятный control-flow
Модель взаимодействия в ядре
● Отличия от программы
– Нет простого «линейного» control-flow
– Асинхронность, множество точек входа
● Объектная модель взаимодействия
ta1_usb
Контексты и точки входа
● init / exit
● probe / disconnect
● struct *_driver
● struct device и driver_data
Инициализация
● Выделение и инициализация struct
my_device
● Инициализация устройства
Отключение
● exit / disconnect
● занятые устройства
● reference counters, krefs
Отложенные вызовы
● callbacks
● hrtimer
● kthread
user_ops (file_operations)
● Регистрация интерфейса с user-space
Подсистема
● Выделяет общую для класса драйверов
функциональность
● Как минимум интерфейс с user-space
Виртуальное устройство
● Регистрируется в подсистеме
● Эмулирует работу аппаратуры
Гонки и блокировки
● Контексты
● spinlock
● mutex
● completions
● wait_event / wake_up
● Нельзя оставлять блокировки на «потом»
Lock-free алгоритмы
● atomic_t
● test_and_set
● seqlock
● RCU
Структуры данных
● struct device
● driver_data
● container_of
● списки
● kref
● alloc / commit
Взаимодействие с пользователем
● *_ops
● file_operation
● ioctl
● copy_from/to_user
● mmap
Как устроена аппаратура
● Процессор
– Прошивка для FPGA
● Память
● Шины
– Внешняя
– Внутренняя
● Мост / контроллер внешней шины
● Интерфейс на внешней шине «Регистровая модель»
● Прерывания
Взаимодействие с аппаратурой
● i/o ports
● memory mapped IO
● dma
● кэширование и буферизация
● irq
● usb
Память и адресация в ядре
● user virtual
● kernel virtual
● physical
● bus
Отладка
● printk()
● BUG(), BUG_ON()
● Чтение dump'ов
● Serial
– тайминги
● Виртуализация
● Есть еще хитрое кунг фу
Coding style
● conventions
● checkpatch.pl
Как со всем этим жить?
● LDD
– Неплохо структурирован
– «Вводная информация»
– Много воды
– Стремительно устаревает
– Далеко не все подсистемы описаны
Linux drivers
Read the source, Luke
– cscope/ctags
– Linux Cross Reference
Всем спасибо, приходите еще

More Related Content

PDF
Михаил Корепанов — Profiler: Профилирование кода
PDF
REPL в Node.js: улучшаем быт разработчик
PDF
Фвтоматизированное тестирование с чего начать Part1
PDF
автоматизированное тестирование. С чего начать Part2
PPT
Основы Symfony и отличия Sf 3.x от Sf 2.x
PDF
Алексей Фомкин, Практическое применение Web Workers
PDF
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
PPTX
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Михаил Корепанов — Profiler: Профилирование кода
REPL в Node.js: улучшаем быт разработчик
Фвтоматизированное тестирование с чего начать Part1
автоматизированное тестирование. С чего начать Part2
Основы Symfony и отличия Sf 3.x от Sf 2.x
Алексей Фомкин, Практическое применение Web Workers
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven

What's hot (20)

PPTX
course js day 1
PPTX
ППП (Пишем Плагины Правильно)
PDF
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
PPTX
курс Java 2016. занятие 03. интерфейсы, generic, исключения
PPTX
системы сборок проектов
PDF
Continuous integration
PDF
Testing with Selenium
PPT
Maven как средство сборки проекта
PDF
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
PPTX
антон веснин Rails Application Servers
PDF
Symfony как микрофреймворк
PDF
JavaScript Unit Testing Using Jasmine And Tools
POTX
Разработка надежных параллельных, распределенных приложений: быстро и дешево
PPTX
Cистемы автоматической сборки проектов (Полина Фоминых)
PPT
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
PPTX
Полный цикл разработки на Python + Django
PDF
Как это будет: ASP.NET Core
PDF
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
PPTX
Автоматизация тестирования многопоточности
course js day 1
ППП (Пишем Плагины Правильно)
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
курс Java 2016. занятие 03. интерфейсы, generic, исключения
системы сборок проектов
Continuous integration
Testing with Selenium
Maven как средство сборки проекта
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
антон веснин Rails Application Servers
Symfony как микрофреймворк
JavaScript Unit Testing Using Jasmine And Tools
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Cистемы автоматической сборки проектов (Полина Фоминых)
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Полный цикл разработки на Python + Django
Как это будет: ASP.NET Core
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Автоматизация тестирования многопоточности
Ad

Viewers also liked (12)

ODP
В поисках эффективного middleware
PPT
Инструменты разработки ПО в *nix
ODP
Package maintaining in Debian
ODP
ODP
Data storage systems
ODP
Лицензирование ПО в современном мире
PPTX
Brands.i look v5-n6
PPTX
Кластеризации поисковых запросов в Ipython
ODP
RnDM MSU CMC 7.5 Управление процессом разработки
ODP
В поисках эффективного middleware
Инструменты разработки ПО в *nix
Package maintaining in Debian
Data storage systems
Лицензирование ПО в современном мире
Brands.i look v5-n6
Кластеризации поисковых запросов в Ipython
RnDM MSU CMC 7.5 Управление процессом разработки
Ad

Similar to Linux drivers (20)

PPTX
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
PDF
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
PPTX
Theme 07
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
Dev collaboration
PDF
еще один недостаток современных клиент серверных приложений
PDF
20100314 virtualization igotti_lecture06
PDF
Ievgen Kulyk - Advanced reverse engineering techniques in unpacking
PDF
доклад про Llvm
PPTX
Презентация 5
PDF
Операционные системы и среды
PDF
Построение систем автоматического протоколирования Си/Си++ кода
PPT
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
PDF
IT-инфраструктура. FAQ для разработчика
PPTX
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
PDF
Linuxvirt seminar-csc-2015
PDF
И снова разработка под iOS. Павел Тайкало
PDF
Robot Framework: универсальный инструмент автоматизатора
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Theme 07
2014.12.23 Александр Андреев, Parallels
Dev collaboration
еще один недостаток современных клиент серверных приложений
20100314 virtualization igotti_lecture06
Ievgen Kulyk - Advanced reverse engineering techniques in unpacking
доклад про Llvm
Презентация 5
Операционные системы и среды
Построение систем автоматического протоколирования Си/Си++ кода
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
IT-инфраструктура. FAQ для разработчика
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Linuxvirt seminar-csc-2015
И снова разработка под iOS. Павел Тайкало
Robot Framework: универсальный инструмент автоматизатора

Linux drivers