Я работаю над модулем ядра Linux, который регистрирует обратный вызов для прерываний, которые поступают из пользовательской платы и помещает полученные данные в очередь за устройством char интерфейс, который будет обрабатываться приложением. Этот модуль должен постоянно контролировать и измерять прерывания и данные, поступающие с доски, даже если прерывание не поступает с платы, поэтому у него есть еще один обратный вызов, который запускается в соответствии со временем.Как добавить обратный вызов периодического таймера в модуле ядра Linux
Текущая реализация использует прерывание RTC как источник постоянного таймера. Я отключил драйверы ядра RTC (CONFIG_RTC_DRV_CMOS
) и запросил IRQ 8 и перехватил обратный вызов таймера как обработчик прерываний RTC. Прерывания генерируются каждую секунду из чипа RTC.
Проблема заключается в том, что мы должны потерять часть возможностей Linux, чтобы управлять временем таким образом, потому что только один из rtc-cmos
или модуль платы можно загрузить сразу (и, очевидно, мы выбрали модуль платы).
Ядро Linux от linux-source
package, которое поставляется с стабилизатором Debian 7.2, которое находится в версии 3.2+46
. Целевая архитектура - i386 PC.
Я не разработчик ядра и поэтому не имею большую картину на развитии модуля ядра, но я пытаюсь найти свой путь, и это ближе всего к решению, которые приходят на ум:
- Как-то делиться IRQ 8 между обоими модулями (может быть, как
request_irq(8, rtc_handler, IRQF_SHARED, rtc_handler)
?) Или обработчиками IRQ с цепью. - Поиск другого способа привязки обработчика от модуля ядра к прерыванию RTC, а не регистрации для IRQ 8.
- Поиск другого источника событий таймера 1-секундного периода, который может использоваться из модуля ядра, возможно, есть стандартный API ядра для этого, я не знаю.
Я полагаю, что может быть простой и стандартный способ сделать это, и я был бы рад, если бы кто-нибудь прокомментировал любое из этих решений или предложил другие.
Спасибо за отличный ответ, я перепишу и протестирую модуль с помощью таймера ядра и проинформирую вас о результатах. – aalizadeh