自定义 linux 内核的 ioctl 突然停止响应并在几分钟后重新启动

Posted

技术标签:

【中文标题】自定义 linux 内核的 ioctl 突然停止响应并在几分钟后重新启动【英文标题】:custom linux kernel's ioctl stops responding abruptly and starts again in few minutes 【发布时间】:2012-03-14 16:29:53 【问题描述】:

设置: 我有一个调用 IOCTL 的 CP 进程。然后内核 IOCTL 处理程序将某些内容写入硬件并返回结果。这种看门狗打孔以周期性间隔发生。

问题: 使用调试打印我验证了 CP 进程和内核模块同时停止打印调试。内核模块总是完成它的任务。几分钟后,调试再次开始打印。虽然存在问题,但我通过运行 ls、top 等验证了内核本身没有挂起。

我了解内核模块可能没有问题。那么我从哪里开始寻找呢?

【问题讨论】:

【参考方案1】:

您的 IOCTL 处理程序是否使用阻塞 IO 访问硬件?如果 IOCTL 处理程序必须等待硬件响应,则时间可能会超过看门狗时间限制并导致看门狗重新启动。也许检查如何访问硬件是一个开始的方向。

【讨论】:

【参考方案2】:

那么我从哪里开始寻找呢?

我将首先使用strace -eioctl ... 检查是否在问题存在时调用。

【讨论】:

以上是关于自定义 linux 内核的 ioctl 突然停止响应并在几分钟后重新启动的主要内容,如果未能解决你的问题,请参考以下文章

Linux之ioctl20160705

Linux字符设备-内核态数据与用户态数据互传

ioctl 与 Linux 中的内核模块

Linux用户与内核空间交互—ioctl

Linux用户与内核空间交互—ioctl

Linux 内核 4.8.0-53-generic Linux Mint 64 位中 IOCTL 函数的不兼容指针初始化错误