首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sysfs:免费使用struct设备platform_data字段吗?

sysfs:免费使用struct设备platform_data字段吗?
EN

Stack Overflow用户
提问于 2013-09-23 02:22:19
回答 1查看 1.3K关注 0票数 1

摘要:在设备驱动模块中可以免费使用struct devicestruct device字段吗?

我正在为我的字符设备驱动程序模块创建一个非常简单的sysfs条目,以允许我控制内部变量(因为我知道使用ioctl()proc文件系统是不推荐的)。我调用class_create()/sys/class/中创建一个类,然后调用device_create()创建一个新的设备条目。然后,我调用device_create_file()为驱动程序设置加载和存储例程。我想把我的司机锁在这些程序里。我的司机的主要结构里有一个互斥物。我是否可以使用platform_data字段来存储指向此结构的指针,就像在模块的open()例程中存储struct fileprivate_data字段一样,还是保留了该字段?在device_create之后,它被设置为NULL,所以它看起来没问题,但我不确定。

我想做的是:

代码语言:javascript
复制
struct mymodule mymod; // main module structure, has a mutex called lockmx

static ssize_t mydev_store_val(struct device *dev,
                               struct device_attribute *attr,
                               const char *buf,size_t count)
{
   struct mymodule *mymodp=(struct mymodule*)dev->platform_data;

   if(mutex_lock_interruptible(&mymodp->lockmx))
      return 0;

   // get data from buf

   mutex_unlock(&mymodp->lockmx);

   return count;
}

DEVICE_ATTR(mydeva,S_IWUSR|S_IRUGO,NULL,mydev_store_val);

static int __init modinit(void)
{
   ...

   dev_t dev; // alloc'ed already

   myclass=class_create(THIS_MODULE,"myclass");
   mydev=device_create(myclass,NULL,dev,NULL,"mydev");
   mydev->platform_data=&mymod;
   device_create_file(mydev,&dev_attr_mydeva);

   ...
}

因此,这将创建可以写入的条目/sys/class/myclass/mydev/mydeva。如果platform_data字段可用,那么我可以避免使用全局字段。但是如果它在我下面移动,我的内核充其量只能运行,而且可能会恐慌。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-23 08:16:09

这样的指针可以存储在drvdata字段中(该字段已经巧妙地隐藏起来,如果您查看struct device的定义,就不会看到它)。

通过device_create的第四个参数初始化它,并使用dev_get_drvdata读取它

代码语言:javascript
复制
mydev = device_create(myclass, NULL, dev, &mymod, "mydev");
...
struct mymodule *mymodp = dev_get_drvdata(dev);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18950917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档