#include <stdio.h> #include <stdlib.h> #include <sys/io.h> #include <linux/art_task.h> #define TRUE 1 #define KBD_PORT 0x61 #define SPK_BIT 0x02 int main(int argc, char *argv[]) { int temp, hz, i; if (argc != 2 || (hz = atoi(argv[1])) == 0) { fprintf(stderr, "usage: %s hz\n", argv[0]); exit(1); } if (ioperm(KBD_PORT, 1, TRUE) == -1) { perror("ioperm"); exit(1); } if (art_enter(ART_PRIO_MAX, ART_TASK_PERIODIC, 500000 / hz) == -1) { perror("art_enter"); exit(1); } for (i = 0; i < hz * 5; ++i) { if (art_wait() == -1) { perror("art_wait"); exit(1); } temp = inb(KBD_PORT); temp = (i & 1) ? temp | SPK_BIT : temp & ~SPK_BIT; outb(temp, KBD_PORT); } if (art_exit() == -1) { perror("art_exit"); exit(1); } return 0; }詳細は以下のURLを参照.
http://www.movingeye.co.jp/~you1/art-linux/rlc 200101/text.html