执行thermal_zone_device_unregister()时内核崩溃

时间:2014-05-29 23:04:18

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

我正在尝试使用内核模块在sys / class / thermal中安装虚拟热区设备。做一个insmod注册设备工作得很好..

struct thermal_zone_device  *tz_dev; //declared globally...
...
//in the init function
tz_dev = thermal_zone_device_register("tsensor", 2,NULL,&tsensor_ops, 0,0, 0,0);

其中tsensor_ops指向带有一堆虚拟回调函数的struct thermal_zone_device_ops。

但是,当我使用以下代码执行rmmod时,

thermal_zone_device_unregister(tz_dev);

我收到一条消息说杀了!回复和dmesg给了我一些关于NULL指针的错误。我恢复的唯一方法是重启机器。有什么方法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

好的我修好了。我的特定版本的linux,thermal_sys框架要求我们为get_crit_temp声明一个函数。如果您没有定义它,它将在取消注册设备时尝试删除此设备文件,并且最终会出现NULL引用错误。请注意,这不适用于3.0以上的Linux版本