Problèm e /dev/rtc et noyau 2.6

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Liste Guilde
Subject: Problèm e /dev/rtc et noyau 2.6
Bonjour !

J'ai écrit une application temps-réel qui utilise /dev/rtc pour répéter
une opération 1024 fois par seconde. Ça marchait bien sur Mandrake 9.2
et noyau 2.4, mais maintenant que j'ai fait la mise à jour en 10.1 (qui
vient avec un noyau 2.6) ça ne marche plus.

Je me suis inspiré de /usr/src/linux/Documentation/rtc.txt pour mon
code. La partie de celui-ci qui pose problème ressemble à ça :

    /* Open real-time clock. */
    int rtc = open("/dev/rtc", O_RDONLY);


    /* Ask for interrupts at 1024 Hz. */
    ioctl(rtc, RTC_IRQP_SET, 1024);


L'appel à open() fonctionne (à condition d'avoir chargé le module rtc
auparavant) mais celui à ioctl() me renvoie ENOTTY (Inappropriate ioctl
for device). Un coup d'oeil aux sources du noyau montre que ceci ne peut
se produire que si la macro RTC_IRQ n'est pas définie, ce qui me semble
cohérent avec le fait que /proc/interrupts ne montre rien sur l'IRQ 8.
Dans /usr/src/linux j'ai aussi pêché ça :

include/asm-i386/mc146818rtc.h :

    #define RTC_IRQ 8


drivers/char/rtc.c :

    #ifdef CONFIG_HPET_RTC_IRQ
    #undef RTC_IRQ
    #endif


.config :

    CONFIG_HPET=y
    CONFIG_HPET_RTC_IRQ=y


drivers/char/Kconfig :

    config HPET
        bool "HPET - High Precision Event Timer" if (X86 || IA64)
        default n
        depends on ACPI_INTERPRETER
        help
          If you say Y here, you will have a miscdevice named
          "/dev/hpet/".  Each open selects one of the timers supported
          by the HPET.  The timers are non-periodioc and/or periodic.


    config HPET_RTC_IRQ
        bool "HPET Control RTC IRQ" if !HPET_EMULATE_RTC
        default n
        depends on HPET
        help
          If you say Y here, you will disable RTC_IRQ in
          drivers/char/rtc.c. It is assumed the platform called
          hpet_alloc with the RTC IRQ values for the HPET timers.


J'ai l'impression que le pilote HPET a dû me voler la ligne
d'interruption du RTC, mais qu'en contrepartie je devrais avoir droit à
un /dev/hpet vachement plus mieux... or pas de /dev/hpet, ni rien qui
évoque ce nom dans /dev, /proc, /sys ou /lib/modules.

Quelqu'un a une idée d'où est passé mon IRQ ? Faut-il que je change de
noyau ? Un 2.4 ne marchera pas avec udev, je dois revenir à devfs ? Ce
serait dommage, udev et c'est vraiment sympa.

Bon week-end,

Edgar.

-- 
Edgar Bonet           Maison : 04 76 21 29 16    Bureau : 04 76 88 10 96
3 rue Jean Prévost    Mobile : 06 77 19 79 39    Fax    : 04 76 88 11 91
38000 Grenoble        guilde@???     www.edgar-bonet.org