Итак, имею ядро 2.6.15.1 скачанное с www.kernel.org
В файле kernel/Kconfig.hz после 38й строчки пришлось добавить:
config HZ_5000
bool "5000 HZ"
help
5000 HZ - for realtime application Linux Kernel
config HZ_10000
bool "10000 HZ"
help
10000 HZ - for more realtime application Linux Kernel
После этого:
make menuconfig показал требуемые пункты меню в разделе "Процессор" и всё такое...
Выбрал 10000 HZ.
Сохранил .config, однако компилиться оно не захотело, ругаясь, что не определён SHIFT_HZ
Полез в include/linux/jiffies.h - там куча препроцессорных if'ов, определяющих SHIFT_HZ в зависимости от значения HZ.
Понятно, что для больших значений SHIFT_HZ не определялся.
Добавил.
Всё-равно не компилится:
файл /include/net/inet_timewait_sock.h ругается, что Unsupported: HZ <= 16 or HZ > 4096
Расширил я, так сказать, "суппортет Hz" до нужных мне значений.
Скомпилировалось. Установилось.
Перезагружаюсь - kernel panic. Среди цифирок были такие слова про деление на ноль, calibrate_delay.
Полез смотреть init/calibrate.c.
Там какой-то не совсем понятный код (ну понятно - калибруют там чего-то
![:)](./images/smilies/smile.gif)
И видно, что если HZ=10000, то в одном случае (учитывая целочисленное деление) вываливается "деление на ноль".
Пока я переконфигурил для HZ=5000 и сейчас ядро компилится.
Но вопрос встал: что это за значения такие? 5000 и 500000 - почему прямо числами забиты в код?
Ну и напоследок: не слишком я "в лоб" решаю задачу?
![:D](./images/smilies/biggrin.gif)
Отчёт:
Откомпилировал ядро с HZ=5000. Линух загрузился. Вроде всё работает. Сейчас сижу как-раз под этим ядром.
Тестовый модуль показал частоту срабатывания таймера - 5000 раз в секунду.
Мне, видимо, для моей задачи хватит пока, но железка может 10 кГц.
Так что хотелось бы разобраться с HZ=10000.