Pergunta

Estou desenvolvendo um módulo carregável driver Linux e eu tenho que usar outro dispositivo no meu motorista. (Tipo de motorista empilhados em um outro motorista)

Como faço para chamar / usar outro motorista em meu motorista? Eu acho que eles são ambos no kernel então pode haver uma forma que pode usar outro motorista diretamente.

Foi útil?

Solução

Você vai precisar do EXPORT_SYMBOL (ou EXPORT_SYMBOL_GPL) macro. Por exemplo:

/* 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();
    ...

Este deve ser de vento em popa, mas você deve, naturalmente, ter cuidado com o namespace -. Pisando sobre os símbolos do módulo do kernel de outra pessoa seria lamentável

Outras dicas

Você esqueceu de mencionar que você também deve estudar try_module_get / module_put / symbol_get / symbol_put / symbol_request, para assegurar o carregamento do outro módulo, eo fato de que não é descarregado durante o uso. Não me lembro os detalhes exatos embora; Eu acho que modprobe irá garantir o outro módulo é carregado, mas não tenho certeza se a dependência de tempo de execução para o descarregamento será adicionado. Eu acho que essas APIs pode ser necessária para alguns outros casos, mas precisa saber sobre eles para verificar isso.

Btw, o livro livre Linux Device Drivers está disponível aqui, e ele vai responder a esta pergunta e muito mais: http://lwn.net/Kernel/LDD3/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top