LINUX.ORG.RU

linux, kernel и IDT


0

0

собственно, надо перехватить прерывания от таймера, чтоб на старой железке выжать прерывания для опроса с частотой около 10КГц.

в чём затык.

1)выключаю бит WP в CR0, иначе в логах появляется BUG: kernel paging request...;
правлю смещение в вентиле прерывания 0x20 (IRQ0) в IDT, бит WP ставлю назад, иначе через пару секунд юзерленд виснет.

2) !! проверяю, много раз (200), вывожу всё это в логи. смещение действительно установлено на новый обработчик.

3) ничего не работает.

4) при выгрузке модуля вывожу текушее значение смещения обработчика. !внезапно! оно старое, т.е. то, какое было до правки IDT.

Внимание вопрос - кто это делает и как его отключить. пересобирать ядро очень влом.

Ну, либо как обойти.

p.s. система дебиан ленни, ядра 2.6.18 или 2.6.26 - один хрен.

★★

мда, лор уже не торт...

scaldov ★★
() автор топика

> правлю смещение в вентиле прерывания

Моя ЭВМ начала дымыться, а манипулятор типа мышь вообще заверещал и убежал под стол.

А чем вам мешает setup_irq ? Ну и дергайте из вашего обработчика каждый десять раз timer_interrupt(). Зачем что-то мутить?

anonymous
()
Ответ на: комментарий от anonymous

setup_irq, как написано, будет возвращать ошибку, если данная линия IRQ уже задействована другим модулем и он не поддерживает IRQ saring. ПМСМ, таймер не поддерживает.

scaldov ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.