Is there an "easy" way to set this up as a kernel module
Provavelmente não. Além disso, isso pode ser contra os bons princípios de design, porque o que você tem parece mais um aplicativo do espaço do usuário; há um driver de kernel escondido no fundo de qualquer maneira. 1
It seems as this is eating alot of resources when running in python
Considerando que ele dorme a maior parte do tempo, isso não é um bom sinal; talvez você deva ser mais específico. O material que eu fiz com os pinos rpi é todo baseado em I2C em C ou C ++ usando a interface do kernel, e algo simples como este não teria mais que 1 MB de RSS ou usaria qualquer tempo de CPU perceptível.
Do I need to rewrite it using C?
Reescrevê-lo no userspace C pode resolver o seu problema, se o problema for recursos (código kernelspace do WRT, sim, C e asm apenas). No entanto, python não deve ser tão ruim assim - obviamente não há problema de desempenho aqui. Mais uma vez, você deve descrever o problema com mais detalhes.
O módulo RPi.GPIO está escrito em C, você pode querer dar uma olhada nisso. No entanto, se você não conhece a língua e não se interessa por ela, não vale a pena aprender apenas para isso.
Você também pode tentar usar a interface de kernel existente diretamente no (independente do idioma) em python em vez de RPi.GPIO; é simplesmente uma questão de ler e escrever nos nós de arquivos em /sys/class/gpio
. Você encontrará mais informações sobre isso on-line se pesquisar e na troca pi de framboesas . O hack DMA mencionado na nota de rodapé pode ter uma vantagem sobre isso se você estiver tentando fazer as coisas com uma frequência muito alta, mas esse não é o caso aqui (e estou em dúvida quanto à utilidade dele realmente seria nesse sentido, porque ainda é uma entidade de usuário simples e sujeita à latência do kernel).
1 Na verdade, isso não é verdade neste caso - RPi.GPIO usa um endereço direto de memória hack como este um>; Eu acho que os módulos de fiação de nível C também funcionam dessa maneira. Isso é coisa que faria fazer um bom módulo do kernel, exceto que o kernel já tem um módulo gpio com uma interface userland. Eu imagino que a justificativa para o hack DMA é que ele parece mais eficiente (e mais interessante para escrever).