Forum Linux.noyau Warning à la compilation d'un module Temps Réel (RTAI)

Posté par . Licence CC by-sa
Tags : aucun
1
11
avr.
2014

Bonsoir,

A la compilation d'un module qui utilise les fonctions Temps Réel de RTAI. J'ai une suite de Warnings qui ressemblent à ça:

Warning: "stop_rt_timer" [/....................time.ko] undefined!
Warning: "rt_task_delete" [/....................time.ko] undefined!
Warning: "rt_task_make_periodic" [/....................time.ko] undefined!*** Warning: 
Warning: "rt_get_time" [/....................time.ko] undefined!
Warning: "start_rt_timer" [/....................time.ko] undefined!
Warning: "rt_set_periodic_mode" [/....................time.ko] undefined!
Warning: "rt_task_init" [/....................time.ko] undefined!
Warning: "nano2count" [/....................time.ko] undefined!
Warning: "rt_get_time" [/....................time.ko] undefined!
Warning: "rt_task_init" [/....................time.ko] undefined!

Pourtant, j'ai fait include la bibliothèque "rtai_sched.h" et dans le Makefile j'ai spécifié le chemin de la bibliothèque.

Ci-dessous le code et le Makefile

#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/version.h> 
#include <linux/sched.h> 
#include <linux/errno.h> 
#include <asm/io.h>

#include <rtai.h>
#include <rtai_sched.h>
#include <rtai_shm.h>

static RT_TASK sound_task;
static RTIME sound_period_ns = 1000000;

#define SOUND_PORT 0x061
#define SOUND_MASK 0x02

void sound_fct(){

  unsigned char sound_byte;
  unsigned char toggle = 0;

  while (1){
     sound_byte = inb(SOUND_PORT);
     if (toggle){
         sound_byte = sound_byte | SOUND_MASK;
      }
     else {
         sound_byte = sound_byte & ~SOUND_MASK;
      }
     outb (sound_byte,SOUND_PORT);
     toggle = !toggle;
     rt_task_wait_period();
   }
   return;
 }


int init_module(void) {

RTIME sound_period_count;
RTIME timer_period_count;
int retval;

printk("inserting sound module\n");


rt_set_periodic_mode();

sound_period_count = nano2count(sound_period_ns);  //conversion de la pأ©riode (ns) en tics d'horloge
timer_period_count = start_rt_timer(sound_period_count);   //requete d'une pأ©riode formulأ©e en tics d'horloge
printk("peiodic_task: rquested %d counts, got %d counts \n", (int) sound_period_count, (int) timer_period_count); //periode obtenue auprأ¨s du timer

/* ================ test ici de requete de la periode ===================================*/

retval = rt_task_init(&sound_task, sound_fct, 0, 1024, RT_SCHED_LOWEST_PRIORITY, 0,0);

if (retval !=0) {
   if (-EINVAL == retval) printk("task already in use\n");
   else if (-ENOMEM == retval) printk("could not allocate stack\n");
   else printk("error initializing task\n");
   return 0;
}

rt_task_make_periodic(&sound_task, rt_get_time()+ sound_period_count, sound_period_count);

}

void cleanup_module(void){

rt_task_delete(&sound_task);
outb (inb(SOUND_PORT) & ~SOUND_MASK, SOUND_PORT);  //On أ©teint le son
stop_rt_timer();
}
===============================================================================
Makefile
===============================================================================

obj-m := time.o
KDIR:= /lib/modules/3.8.13/build
EXTRA_CFLAGS := -I/usr/realtime/include -I/usr/include
PWD := /root/exercices/ex02

default:
        make -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
        make -C $(KDIR) SUBDIRS=$(PWD) clean

J'espère que vous pourriez m'aider. Merci d'avance.

  • # correction et mise en couleur

    Posté par . Évalué à 2.

    j'ai corrigé le post pour remettre le include car les balises < xxxx > sont mangées par le formatage markitup.

    du coup j'ai aussi mis la coloration syntaxique en utilisant les codes fournis sous le post quand tu rediges.
    ex :

    ```C
    le code en C
    que je dois mettre en couleur
    ```

    ou

    ```sh
    le code shell
    qui doit etre mis en couleur
    ```

  • # peut-être une piste

    Posté par (page perso) . Évalué à 1.

    A priori, il semblerait qu'il faut charger les modules correspondants.

    insmod /usr/realtime/modules/rtai_?.ko

  • # manque d'include ?

    Posté par . Évalué à 1.

    Bonjour.
    La ligne

    include <"rtai_sched.h">

    est elle valide (double accolades, manque du croisillon) ?

    Ne manque-t-il pas :

    #define MODULE
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/version.h>
    #include <linux/errno.h>
    #include <linux/rtf.h>
    • [^] # Re: manque d'include ?

      Posté par . Évalué à 2.

      probablement fausse, ca fait un moment que j'ai pas fait de C
      et je n'ai fait que remettre l'include qui me semblait coherent.

      ci-dessous l'auteur original precise qu'il a remis les include d'origine.

  • # Merci

    Posté par . Évalué à 1.

    Merci NeoX pour la correction, en fait j'ai recopié les includes que j'ai supprimé parce que ça s'affichait mal avant.

    #include <rtai_sched.h>

    est normalement valide car quand je l'enlève, j'ai des erreurs de compilation. Et quand je la remet je n'ai que des Warnings.

    Et:

    #define MODULE

    est-elle nécessaire?

    ça pourrai être la piste de Mali car je ne trouve aucun module RTAI en consultant avec "lsmod".

    Merci pour vos réponse rapides. Je vais essayer et vous tiendrai au courant.

  • # Encore une erreur!

    Posté par . Évalué à 1.

    Bonjour,

    J'ai essayé de charger le module "rtai_sched.ko" du répertoire "/usr/realtime/modules" mais il m'affiche l'erreur suivante:

    insmod: error inserting 'rtai_sched.ko': -1 Unknown symbol in module
    

    Avez-vous une idée?

    Merci,

  • # Problème persistant après insertions des modules

    Posté par . Évalué à 1.

    J'ai réussi à insérer "rtai_sched.ko", il fallait juste insérer "rtai_hal.ko" avant.

    Mais malheureusement, les Warnings persistent.
    Faut-il insérer d'autres modules?

  • # "modprobe" ne trouve pas mon module

    Posté par . Évalué à 1. Dernière modification le 13/04/14 à 12:56.

    J'ai chargé tous les modules que j'ai trouvé dans le répertoire /usr/realtime/modules, mais ça n'a pas résoud le problème.

    En essayant de charger le module avec insmod j'ai l'erreur suivante:

    insmod: error inserting 'time.ko': -1 Invalid parameters

    En essayant de le charger avec modprobe j'ai l'erreur suivante:

    FATAL: Module /root/exercices/ex02/time.ko not found.

    Avez-vous une idée pourquoi modprobe ne trouve pas mon module malgré que j'ai spécifié le chemin?

    Merci,

  • # modprobe nom_du_module (sans l'extension)

    Posté par . Évalué à 1.

    J'ai trouver qu'on utilisant modprobe on ne met pas l'extension. Au cas où ça aiderai quelqu'un, mais personnellement, ça n'a pas résolu mon problème.

  • # CVS Showroom

    Posté par . Évalué à 1.

    En cherchant, j'ai trouvé aussi que si les exemples du CVS showroom RTAI, je pourrai remplacer le code d'un exemple par mon code.
    Pour installer le showroom: cvs -z3 -d:pserver:anonymous at cvs.gna.org:/cvs/rtai co showroom
    Le problème c'est que je ne sais pas où trouver ces exemples du showroom.

    Toute idée qui m’aiderai à progresser serai la bienvenue.

    Merci,

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.