You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核模块dev_get_drvdata函数始终返回NULL问题咨询

问题根因

hwmon读取回调的入参struct device *dev是hwmon子系统新创建的hwmon类设备实例,不是你绑定了私有数据的platform设备实例。不同设备实例的私有数据是独立存储的,你从未给hwmon设备设置过drvdata,所以dev_get_drvdata返回NULL。

你调用devm_hwmon_device_register_with_info时第三个参数传了NULL,这个参数就是用来给hwmon设备绑定私有数据的,是核心错误点。

修复方案

任选以下任意一种方案即可:

  1. 修改probe中hwmon注册逻辑,把私有数据传入第三个参数,回调中直接取即可:
    // 替换原来的hwmon注册代码
    devm_hwmon_device_register_with_info(&platform_dev->dev, "qnap_ec", platform_drv_data,
      &qnap_ec_hwmon_chip_info, NULL);
    
  2. 不修改注册逻辑,在回调中通过hwmon设备的父指针拿到原始platform设备,再取私有数据:
    // 替换原来的drvdata获取代码
    platform_drv_data = dev_get_drvdata(dev->parent);
    

常见诱因

  • 不了解Linux设备模型的分层关系,混淆了hwmon设备和原始platform设备的实例边界
  • 不熟悉devm_hwmon_device_register_with_info的参数定义,忽略了私有数据传递入口
  • 误认为子设备会自动继承父设备的私有数据,没有主动做数据绑定操作

内容的提问来源于stack exchange,提问作者Harry Muscle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:15:02