我正在为Linux编写一个系统监视器,并希望包含一些看门狗功能.在内核中,即使/ dev/watchdog关闭,您也可以将监视程序配置为继续运行.换句话说,如果我的守护进程正常退出并关闭/ dev/watchdog,系统仍会在59秒后重新启动.这可能是也可能不是用户期望的行为.
我需要让我的守护进程知道这个设置,因为它会影响我处理SIGINT的方式.如果设置已启用,我的守护程序将需要(最好)在退出时启动有序关闭,或者(至少)警告用户系统将很快重启.
有没有人知道从用户空间获取此设置的方法?我没有在sysconf()中看到任何东西来获取值.同样,我需要能够判断软件看门狗是否已启用.
编辑:
Linux提供了一个非常简单的看门狗接口.进程可以打开/ dev/watchdog,一旦打开设备,内核将开始60秒倒计时重启,除非有一些数据写入该文件,在这种情况下时钟重新设置.
根据内核的配置方式,关闭该文件可能会也可能不会停止倒计时.从文档:
如果设备/ dev/watchdog正确关闭,则可以在不引起重启的情况下停止监视程序,除非在启用CONFIG_WATCHDOG_NOWAYOUT选项的情况下编译内核.
我需要能够判断是否在用户空间守护程序中设置了CONFIG_WATCHDOG_NOWAYOUT,以便我可以不同地处理所述守护程序的关闭.换句话说,如果该设置很高,那么简单:
# /etc/init.d/mydaemon stop
...将在59秒内重启系统,因为没有任何内容正在写入/ dev/watchdog.因此,如果设置为高,我的SIGINT处理程序需要做其他事情(即至少警告用户).
我找不到从用户空间获取此设置的方法:(任何帮助表示赞赏.
我正在开发一个使用unlocked_ioctl的内核模块.我用内核版本2.6.24-23-generic测试了它,它运行得很好.现在我尝试使用内核版本3.3.1-1-ARCH并且发生了一些奇怪的事情:当请求值(cmd)为2时,不会执行ioctl函数.它返回0,但函数未执行.为了检查它是否未执行,我执行了以下操作:
static long midriver_ioctl(struct file *file,
    unsigned int cmd, unsigned long arg) {
printk("Called with cmd = %d\n", cmd);
我写了一个测试程序,从0到4096调用此设备的ioctl,我可以在dmesg中看到所有这些值的消息"用cmd = n调用",除了"2",唯一没有显示的值.
关于我做错了什么的线索?
先感谢您,
我是Linux内核模块编程的新手.从我到目前为止阅读的材料中,我发现用户程序有3种方式来请求服务或与Linux内核模块通信
问题:我们还有哪些其他选项可用于用户程序和Linux内核模块之间的通信?
我正在实现char驱动程序(Linux),并且我的驱动程序中存在某些IOCTL命令,这些命令只需要由ADMIN执行.
我的问题是如何检查我的ioctl命令实现下的用户权限,并限制非特权用户访问IOCTL.