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