Что такое модуль в C? - PullRequest
       1

Что такое модуль в C?

0 голосов
/ 03 декабря 2018

Подобный вопрос появился уже один раз для C ++, но ответы и сам вопрос на самом деле не удовлетворяли.
Я прочитал .c File ( github link ), который включал<linux/module.h> и передал свои статические функции module_init(foo) и module_exit(foo).Итак, каково общее назначение модуля, <linux/module.h> file в этом контексте, и особенно этих двух методов?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Это специфично для программирования ядра (модуля) операционной системы Linux, и это не общее программирование на C / C ++ как таковое, мы можем сказать, что это своего рода или похоже на некоторую среду для разработки программ ядра Linux.

LinuxЯдро операционной системы поддерживает динамическое добавление или удаление части программы в / из ядра.эти API используются для написания таких программ ядра (обычно называемых модулями).

, поэтому module_init () вызывается, когда вы пытаетесь вставить модуль в ядро, а model_exit () вызывается для очистки вещей, когда мы удаляем модуль последелает свою работу.

ниже приведен простейший модуль ядра, который вы можете попробовать

#include "linux/init.h" /*(use angle brackets here if it doesn't work)*/
#include "linux/module.h"

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void){
   printk(KERN_ALERT "Hello good try keep it up\n");
   return 0;
}

static void hello_exit(void){
     printk(KERN_ALERT "Goodbye .. take care\n");
}

module_init(hello_init);
module_exit(hello_exit); 
0 голосов
/ 03 декабря 2018

Это для модуля ядра Linux .Раздел 1.1 упоминает:

Итак, вы хотите написать модуль ядра.[..] Теперь вы хотите добраться до того места, где находится настоящее действие. Что такое модуль ядра?Модули - это фрагменты кода, которые могут быть загружены и выгружены в ядро ​​по требованию.Они расширяют функциональность ядра [..].Например, один тип модуля - это драйвер устройства, который позволяет ядру получать доступ к оборудованию, подключенному к системе.

Затем в разделе 2.3:

Макросыmodule_init() и module_exit() макросы инициализируют и очищают ваши функции.

Пример:

module_init(hello_2_init);
module_exit(hello_2_exit);

, где обе эти функции вызывают вызов printk();, говоря привет / прощай, мир.

В разделе 3.1.1:

Модуль всегда начинается либо с init_module(), либо с функции, которую вы указываете с помощью вызова module_init(). Это функция ввода для модулей ;он сообщает ядру, какие функции предоставляет модуль, и настраивает ядро ​​для запуска функций модуля, когда они необходимы.

Все модули заканчиваются вызовом либо cleanup_module(), либо функции, которую вы указываете с помощью вызова module_exit(). Это функция выхода для модулей ;он отменяет любую функцию входа.Он отменяет регистрацию функций, зарегистрированных функцией ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...