LINUX.ORG.RU

Обращение к сторожевому таймеру (watchdog).


0

1

Всем привет! Ай нид хелп! В системе (OpenSUSE 11.4), установленной на промышленном ПК (Kontron CP308) используются два сторожевых таймера:

MPU:/dev/shm # ls -l /dev/watchdog /dev/kontronwdt
crw------- 1 root root 10,  59 Jan 31 16:51 /dev/kontronwdt
crw------- 1 root root 10, 130 Jan 31 16:51 /dev/watchdog

Первый - /dev/watchdog, стандартный. Второй /dev/kontronwdt, появился после сборки из исходников к ПромПК двух модулей, которые подгружаются в ядро:

MPU:/dev/shm # lsmod | grep "kontronwdt"
kontronwdt              4964  0
komdrv                 36345  1 kontronwdt

На ПромПК крутитится специально ПО, которое имеет доступ к сторожевому таймеру, но при вызове функции открытия происходит ошибка:

"...WDOG|Function sysWdogOpen() terminated with error -2"

и через 15 секунд система перегружается. Я не разработчик данного ПО, поэтому не имею возможности определить как происходит работа с watchdog. Но может быть как то можно определить к какому девайсу /dev/watchdog или /dev/kontronwdt обращается ПО? Может /dev/watchdog нужно вообще вырубить, чтобы не мешался?

Вот что пишется в мануале на ПромПК по поводу /dev/kontronwdt:

By periodically retriggering the watchdog, the system verifies it is still working properly. If the system fails to retrigger the watchdog within a given interval, the watchdog will conclude the system is hung up. Depending on the Board type, the Watchdog can cause one of the configurable events: RESET, NMI, or IRQ. Additionally, the Watchdog can be operated in a timeout mode, without generation of an event. And, as a special feature, the Watchdog provides a so-called «dual stage» or «cascaded» mode. In this mode, an IRQ or NMI event is generated on the first occurence of a Watchdog timeout, giving the application a chance to recover. If retriggering does not start again, a second watchdog timeout will cause the system to be reset. The available Watchdog operation modes for a particular board can always be queried by looking into /proc/driver/kontron_[boardname]_drv/wd/options Watchdog device node The Watchdog driver is registered to the following device node Watchdog Device Node: Name /dev/kontronwdt File type c Major number 10 Minor number n

With

n = 130 ( = WATCHDOG_MINOR) If the kontronwdt is the only Watchdog driver running

n <> 130 If there is already another watchdog driver registered to the WATCHDOG_MINOR devicenode , kontronwdt will register a misc device with a dynamic minor number. In this case, the driver will emit a kernel message «Kontronwdt:registered Watchdog with minor=<minornumber>» on load (call dmesg to see this message).

Запускайте ПО через strace с указанием вывода в файл и с трассировкой потомков (man strace, поиск этого форума и гугл в помощь). После этого вдумчиво изучайте этот файл трассировки. Там будут все системные вызовы, можно будет поискать open() какого файла происходит.

Может /dev/watchdog нужно вообще вырубить, чтобы не мешался?

Сомневаюсь, что здесь кто-то знает нужно его вам вырубать или нет. Ну попробуйте его убрать, только сначала определите, каким модулем он создаётся. И, сначала уберите штатный watchdog, а уже потом загружайте модули kontronwdt, чтобы /dev/kontronwdt был ″root root 10, 130″.

mky ★★★★★
()

-2 это

#define ENOENT           2      /* No such file or directory */

Отрицательное потому, что принято API ядра возвращать ошибку со знаком минус. Проверь, что устройство создано.

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