Как записать, что модуль драйвера Linux называет/использует другой модуль драйвера?

Ответ будет зависеть от ваших требований. Предполагая, что вам нужны только индексы для каждой группы, но не для перечисляемой группы (а элементы создаются относительно дешево), вы можете сделать следующее сначала группируем IEnumerable по Item.Group, что по существу дает IEnumerable из IEnumerable с. Затем мы выбираем каждую из IEnumerable и проецируем ее элементы на новые элементы, имеющие индекс. По-прежнему будет получено IEnumerable<IEnumerable<Item>>, поэтому мы затем используем SelectMany, чтобы вернуть флет IEnumerable<Item> всех элементов из вложенного IEnumerables.

Если вам нужен сгруппированный IEnumerable с ключом группы, вы все равно можете сгруппировать его в конце GroupBy. Если вам нужно сгруппировать IEnumerables, but don't need the group key, you can simply omit the SelectMany`.

15
задан teerapap 5 January 2009 в 18:02
поделиться

2 ответа

Вам будет нужно EXPORT_SYMBOL (или EXPORT_SYMBOL_GPL) макрос. Например:

/* mod1.c */
#include <linux/module.h>
#include <linux/kernel.h>
#include "mod1.h"
....
void mod1_foo(void)
{
    printk(KERN_ALERT "mod1_foo\n");
}
EXPORT_SYMBOL(mod1_foo);

/* mod2.h */
....
extern void mod1_foo(void);
....

/* mod2.c */
#include <linux/module.h>
#include <linux/kernel.h>
#include "mod1.h"
#include "mod2.h"
int init_module(void)
{
    mod1_foo();
    ...

Это должно быть простым парусным спортом, но необходимо, конечно, быть осторожными с пространством имен - топающий на чьих-либо символах модуля ядра, было бы неудачно.

18
ответ дан 1 December 2019 в 03:24
поделиться

Вы забыли упоминать, что необходимо также изучить try_module_get/module_put/symbol_get/symbol_put/symbol_request для обеспечения загрузки другого модуля и того, что это не разгружено во время использования. Я не вспоминаю точные детали хотя; я думаю, что modprobe гарантирует, что другой модуль загружается, но я не уверен, будет ли зависимость во время выполнения для разгрузки добавлена. Я предполагаю, что те API могли бы быть необходимы для некоторых других случаев, но должны знать о них для проверки этого.

Btw, бесплатная книга, Драйверы устройств Linux доступны здесь, и это ответит на этот вопрос и намного больше: http://lwn.net/Kernel/LDD3/

4
ответ дан 1 December 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: