【问题标题】:linux: watchdog node is not created in /dev directorylinux: 看门狗节点未在 /dev 目录中创建
【发布时间】:2018-12-13 13:28:09
【问题描述】:

我想在我的应用程序中使用看门狗定时器。

我在msm8953平台上使用yocto构建系统。

根据.dtsi文件中的兼容字段,在.defconfig文件中配置相应的驱动程序(即CONFIG_MSM_WATCHDOG_V2 = y),我正在关注dmesg:

[ 0.270444] msm_watchdog b017000.qcom,wdt: wdog absent resource not present
[ 0.270845] msm_watchdog b017000.qcom,wdt: MSM Watchdog Initialized

但是,/dev 目录中没有创建看门狗节点。

我还在 Kconfig 文件中将 WATCHDOG 和 WATCHDOG_CORE 驱动程序配置为默认值,但 /dev 目录中仍然不存在看门狗节点。

编辑 1:在 /drivers/watchdog/Kconfig 中添加默认值为 Y

menuconfig 看门狗

bool "看门狗定时器支持"

默认 Y

如果看门狗

配置 WATCHDOG_CORE

bool "看门狗定时器驱动核心"

默认 Y

【问题讨论】:

  • 可以分享一下linux内核linux/drivers/watchdog/Kconfig987654327@下面文件的内容
  • @SantoshA,请在帖子中找到编辑 1 部分以了解 Kconfig 文件的更改内容。
  • 阅读/proc/config.gz以检查实际的内核配置。
  • 你可以手动创建devnode文件吗? (mknod)
  • @AlexHoppus,我使用 mknod 在 dev 目录中创建了看门狗节点。但是,当我打开那个节点时,出现“看门狗:没有这样的设备”错误。

标签: c linux-kernel linux-device-driver bsp


【解决方案1】:

我从here 找到了代码。我的答案基于此代码。

设备驱动程序可以在/dev/sys 上生成节点。所以我们必须检查/sys/dev

关于 /sys 上的节点

有很多函数可以在/sys 上创建节点。其中一个功能是device_create_file()。 在this code中,如果init_watchdog_work()被调用,device_create_file()被调用,则看门狗的节点disable将由此代码创建。

error = device_create_file(wdog_dd->dev, &dev_attr_disable);

您可以在 msm 看门狗目录中找到 disable 节点。 你可以使用find找到msm看门狗目录。

find /sys -name '*watchdog*'

即使您的代码与this 不同,也许您可​​以看到在看门狗驱动程序中调用了device_create_file()。 因此,您可以按照我所说的找到一个节点。

关于 /dev 上的节点

一般情况下,您可以使用device_create()/dev 上创建节点。如果调用device_create(),则在/dev上创建一个节点,否则不创建。

msm_rotator 驱动程序在/dev 上创建msm_rotator 节点。

#define DRIVER_NAME "msm_rotator"
...
msm_rotator_dev->device = device_create(msm_rotator_dev->class, NULL,
                    msm_rotator_dev->dev_num, NULL,
                    DRIVER_NAME);

如果您的代码中调用了device_create(),您可以在/dev 上找到该节点。如果没有调用该函数,则/dev上没有节点。

【讨论】:

  • 作者询问的是 devnode,而不是 sysfs 条目
  • @AlexHoppus 我更新了我的答案以解释/dev 上的一个节点。
  • @HyeongnamJang,当我启用 Softdog 驱动程序时,会在 dev 目录中创建看门狗节点。 softdog 会使用硬件看门狗重置系统吗?如何验证我的系统是否被硬件看门狗重置?
  • @kripalsinhrana,首先,请告诉我有关软狗驱动程序的更多信息。这个驱动是qualcomm还是codeaurora提供的?其次,为了检查您的系统是否被硬件看门狗重置,我认为最好的方法是在内核日志中检查 PON 原因。请参考here。有关 PON 的详细信息,请参阅有关 PON 的 Qualcomm 文档。
  • IIUC,如果你打电话给device_create(),只有设备节点是不够的。它将是 sysfs 节点和内核事件,udev 或类似的将基于该事件代表内核创建一个设备节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2012-02-22
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多