Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Архитектура и вокруг... | Вперед |
Обсуждение итогов раздела 3
Из этой части рассмотрения мы можем уже вынести следующие заключения:
1. Программирование модулей ядра Linux - это не только создание драйверов специфических устройств, но это вообще более широкая область: динамическое расширение функциональности ядра, добавление возможностей, которыми ранее ядро не обладало.
2. Программирование модулей ядра Linux так, чтобы принципиально, не отличается во многом от программирования в пространстве процессов. Однако, для его осуществления невозможно привлечь существующие в пространстве пользователя POSIX API и использовать библиотеки; поэтому в пространстве ядра предлагаются «параллельные» API и механизмы, большинство из них дуальны известным механизмам POSIX, но специфика исполнения в ядре (и историческая преемственность) накладывает на них отпечаток, что делает их отличающимися как по наименованию, так и по формату вызова и функциональности. Интересно отследить несколько аналогичных вызовов пространств пользователя и ядра, и рассмотреть их аналогичность — вот только некоторые из них:
API процессов (POSIX) |
API ядра |
---|---|
strcpy(), strncpy(), strcat(), strncat(), strcmp (), strncmp(), strchr (), strlen(), strnlen(), strstr(), strrchr() |
strcpy (), strncpy (), strcat(), strncat(), strcmp(), strncmp(), strchr(), strlen(), strnlen(), strstr(), strrchr() |
printf() |
printk() |
execl(), execlp(), execle(), execv(), execvp(), execve() |
call_usermodehelper() |
malloc(), calloc(), alloca() |
kmalloc(), vmalloc() |
kill(), sigqueue() |
send_sig() |
pthread_create() |
kernel_thread() |
pthread_mutex_lock(), pthread_mutex_trylock(), pthread_mutex_unlock() |
rt_mutex_lock(), rt_mutex_trylock(), rt_mutex_unlock() |
3. Одна из основных трудностей программирования модулей состоит в нахождении и выборе слабо документированных и изменяющихся API ядра. В этом нам значительную помощь оказывает динамические и статические таблицы разрешения имён ядра, и заголовочные файлы исходных кодов ядра, по которым мы должны постоянно сверяться на предмет актуальности ядерных API текущей версии используемого нами ядра.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Подсчёт ссылок использования | Основные команды |