Загрузка нескольких экземпляров одного и того же драйвера Linux, который имеет символы экспорта и глобалы

#linux-kernel #linux-device-driver

Вопрос:

У меня есть драйвер ядра Linux, в котором есть глобальная переменная, доступ к которой осуществляется внутри функции EXPORT_SYMBOL. Драйвер повторно вводится и будет загружен несколько раз в зависимости от записи в дереве устройств. Я пытаюсь найти способ, с помощью которого другие драйверы ядра идентифицируют отдельные экземпляры, чтобы они могли установить обратный вызов с правильным экземпляром драйвера.

Например, внутри моего модуля драйвера:

     /*global variable */
    struct list *list;

    int foo(void * data, void *callback(void *data)) {
           //This function uses *list pointer.
    }
    EXPORT_SYMBOL(foo);
 

Этот драйвер может быть вызван несколько раз на основе записи в дереве устройств.

Комментарии:

1. Вы не можете загружать модуль несколько раз. Вы не должны быть в состоянии, insmod допустили бы ошибку, сказав, что он уже загружен. Это тоже не имеет особого смысла, что именно вы пытаетесь сделать, чтобы попытаться вставить модуль несколько раз? Будьте более конкретными и описательными.

2. Нет никакого способа. У вас проблема с уровнем дизайна. Измените дизайн вашего драйвера должным образом.

3. «Этот драйвер может быть вызван несколько раз на основе записи дерева устройств». — Только если существует несколько экземпляров этого устройства, и каждый из них однозначно адресуем. Затем драйвер должен быть повторно зарегистрирован (вместо загрузки нескольких копий).

4. Да, водитель является повторным участником. Я хочу, чтобы другие драйверы ядра могли идентифицировать каждый экземпляр устройства отдельно, чтобы они могли устанавливать обратный вызов с отдельными экземплярами.

5. Предположительно, каждое устройство будет иметь некоторые личные данные, выделенные при вызове функции «зонд» устройства вашего драйвера, поэтому указатель функции обратного вызова, установленный другими драйверами ядра, может храниться в личных данных для этого устройства.