Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
Módulo del núcleo llamando periódicamente al programa de espacio del usuario

Quiero llamar a un programa de espacio de usuario desde un módulo del núcleo periódicamente. Pero el programa del núcleo está congelando el sistema, mientras trato de cargarlo. el siguiente es el programa,

 #include <linux/module.h> /* Needed by all modules */ #include <linux/kernel.h> /* Needed for KERN_INFO */ #include <linux/init.h> /* Needed for the macros */ #include <linux/jiffies.h> #include <linux/time.h> #include <linux/proc_fs.h> #include <asm/uaccess.h> #include <linux/hrtimer.h> #include <linux/sched.h> #include <linux/delay.h> #define TIME_PERIOD 50000 static struct hrtimer hr_timer; static ktime_t ktime_period_ns; static enum hrtimer_restart timer_callback(struct hrtimer *timer){ char userprog[] = "test.sh"; char *argv[] = {userprog, "2", NULL }; char *envp[] = {"HOME=/", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; printk("\n Timer is running"); hrtimer_forward_now(&hr_timer, ktime_period_ns); printk("callmodule: %s\n", userprog); call_usermodehelper(userprog, argv, envp, UMH_WAIT_PROC); return HRTIMER_RESTART; } static int __init timer_init() { ktime_period_ns= ktime_set( 0, TIME_PERIOD); hrtimer_init ( &hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL ); hr_timer.function = timer_callback; hrtimer_start( &hr_timer, ktime_period_ns, HRTIMER_MODE_REL ); return 0; } static int __exit timer_exit(){ int cancelled = hrtimer_cancel(&hr_timer); if (cancelled) printk(KERN_ERR "Timer is still running\n"); else printk(KERN_ERR "Timer is cancelled\n"); } module_init(timer_init); module_exit(timer_exit); MODULE_LICENSE("GPL");

test.sh es un script que solo hace eco de un comentario. He probado la parte call_usermodehelper y la parte del temporizador individualmente y funciona bien. Pero mientras estoy combinando los dos códigos, el sistema se bloquea. ¿Alguien puede ayudarme a resolver el problema?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Una mirada rápida sugiere fuertemente que las devoluciones de llamada de hrtimer se ejecutan desde un contexto irq, lo cual se espera: ¿de qué otra manera obtendrá una alta resolución?

Pero esto también significa que no debe bloquear, mientras que su devolución de llamada puede bloquearse debido a call_usermodehelper independientemente de que pase NOWAIT.

Entonces parece que está probando su módulo en un kernel con la depuración deshabilitada, lo cual es fundamentalmente incorrecto.

Pero esto es menos relevante ya que lo que está tratando de lograr en primer lugar parece fundamentalmente incorrecto.

Solo puedo recomendarle que elabore cuál es el problema real. Absolutamente ahora hay una forma en que bifurcar + ejecutar tiene algo que ver con algo que requiere un temporizador de alta resolución.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda