kernel

Урок 0 Введение

Начальная страница курса


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

Baking Pi – Разработка операционной системы

Недавно мне попался занятный курс Alex Chadwick'а из Кембриджа.
Представляю Вашему вниманию вольный перевод уроков данного курса.
Обратите внимание, что оригинальный курс не адаптирован для Raspberry Pi B+, 2 и 3. В свою очередь для я приведу код для B+.
Надеюсь будет полезно!

I2C драйвер в Linux

С I2C в Linux вполне можно работать из пространства пользователя. Тем не менее это не очень удобно. Весьма удобнее и правильнее сделать модуль ядра.

Для создания драйвера в ядре Linux предусмотрены вспомогательные макросы. Если Вам не нужно ничего выполнять при инициализации модуля, можно воспользоваться макросом module_i2c_driver.

Сборка ядра для Raspberry Pi

В этой статье посмотрим как кроcскомпилировать ядро для raspberry pi (у меня b+).
Я буду производить махинации в Fedora, но суть идентична для всех дистрибутивов.
Для сборки нам понадобиться компилятор. Его можно собрать самому, скачать из репозиториев Вашей ОС или же с git raspberry.

Поставим из малинового гита.

Собственный SPI драйвер для Linux на Raspberry Pi

В распространенных дистрибутивах для Raspberry Pi уже есть драйвер SPI. Но иногда, по тем или иным причинам, нужно сделать свой. Например если вы хотите сделать драйвер для spi дисплея и пофиг что он уже давно есть готовый. Мы не ищем легких путей.

Для того, чтобы подсунуть ядру свой драйвер SPI нужно поправить файл порта для raspberry. Для других плат этот файл будет отличаться, во всем остальном же статья подойдет для любого встраиваемого решения.

Потоки в модуле ядра Linux

Рано или поздно наступает необходимость выполнения в модуля ядра полезных операций. И наверное самым полезным в этом плане инструментом являются потоки ядра.
В качестве примера создания потока в модуле ядра я решил написать модуль, который будет каждую секунду вываливать в dmesg сообщение. Такой себе флудо-модуль ядра.

Прерывания GPIO в модуле ядра Raspberry Pi B+

В данной статье рассмотрим как настроить прерывание ядра по сигналу на GPIO, замерим сколько времени на это уходит.
О том как настроить GPIO в модуле ядра linux.

Для замера скорости обработки прерывания я решил сделать модуль ядра, в нем настроим два вывода GPIO. Один настроим на прерывание, у другой будем переключаться в обработчике этого прерывания.

Для работы с GPIO и прерываниями включаем такие заголовки:

GPIO в модуле ядра Linux на Raspberry Pi

В данном модуле речь пойдет о том, как моргать светодиодом из модуля ядра Linux. Для своих экспериментов я использую Raspberry Pi B+, но тоже можно повторить на любой другой платформе.
Я предполагаю, что вы уже умеете передавать параметры в модуль ядра через командную строку, если нет воспользуйтесь статьями из раздела Ядро Linux. Также нам понадобятся таймеры.
Моргать будем постоянно с заданным периодом таймера.

Таймеры в ядре Linux

В этой статье пойдет речь о таймерах. В ядре Linux есть несколько разновидностей таймеров.
Мы займемся наиболее бородатыми таймерами.
Сразу хочу отметить, что о точности говорить не приходится. Получить же времена меньше системного тика вообще не получилось.
Создадим модуль ядра, который при загрузке настраивает таймер, по срабатыванию выведем сообщение в dmesg.

Передача параметров в модуль ядра

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