Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра 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 текущей версии используемого нами ядра.


Предыдущий раздел: Оглавление Следующий раздел:
Подсчёт ссылок использования   Основные команды