Dois módulos de kernel diferentes podem acessar a mesma área de memória de uma chamada para ioremap_nocache ()?
Eu tenho um driver sem fio e um módulo separado. Gostaria que o módulo separado fizesse o perfil dos valores de ruído na placa, enquanto o driver ainda estivesse em operação. Daí a minha pergunta acima.
Uma avenida que eu explorei foi iniciar um thread do kernel a partir do driver e, em seguida, implementei um semáforo para evitar qualquer condição de corrida decorrente de leitura / gravação simultânea no mesmo espaço de endereço. Eu esperava que um thread filho pudesse acessar a mesma área de memória.
Infelizmente, isso não funcionou como eu esperava. Gostaria muito de receber sugestões.
Respostas:
Suponho que você pretende implementar outro módulo do kernel, pois considera mais fácil compartilhar dados entre os módulos do kernel. Mas talvez não seja uma boa escolha. Se for possível 'analisar o ruído' no espaço do usuário, acho que uma solução melhor é implementar o 'profiler' no espaço do usuário.
Nesta solução, o criador de perfil de espaço do usuário lê dados, realiza alguns cálculos e envia o resultado.
Se esta solução estiver correta, a implementação é a seguinte.
No módulo do kernel, é apenas para registrar um dispositivo char em '/ proc' e implementar as primitivas 'leitura' e 'gravação'. No espaço do usuário, é apenas para implementar o criador de perfil, lendo e gravando no dispositivo char. Detalhes e informações para esta implementação estão todos aqui .
fonte