kobject 和sys问题

T-Quake 2009-12-08 12:00:38
大家好,我想问下。
我写了个驱动 platform_device_register和platform_driver_register后 会在sys/bus/platform/device和drive目录下有相应的节点会被创建。

我驱动已经可以从底层获取了该设备一些pin脚的状态了。
然后我想在sys目录 下创建个类似reate_proc_entry创建个文件,然后将ping的状态写到里面,上层有个damn程序 去读这些值。我不知道如何实现 还请知道的大哥 帮下忙 谢谢
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
T-Quake 2009-12-09
  • 打赏
  • 举报
回复
知道 为什么没写进去了 在state_show函数中 有个dev_get_drvdata()函数
我忘记给他dev_set_drvdata了 所以cat的时候没反应 报了指针什么空的错误。
终于解决了。
=================================
把经验分享下:
如果你想通过这中方法:
1.xxx_class = class_create()
2.device_create(xxx_class,X,X,X) 这两步骤是在sys/class和/sys/class/XXX/XXX-->/sys/devices/virtual/XXX/XXX
3.使用static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL);
device_create_file(sdev->dev, &dev_attr_state);
创建相应state文件
4一定要创建state_show的文件以便读取值,利用dev_get_drvdata(dev);获取私有数据
5通过dev_set_drvdata(dev)将修改的值写进去
这样就OKay了。。。呵呵
T-Quake 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pottichu 的回复:]
sys 目录主要是用来反馈信息给用户的, 不是用来做数据交互的,
系统也没有提供这样的接口。

proc 下有现成的接口你为什么不用?
[/Quote]

我现在可以创建文件了:
static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL);
device_create_file(sdev->dev, &dev_attr_state);
可以在/sys/devices/virtual/XXX/XXX/state创建这样的state文件了。

但是 我想往state里面写入数据 好像不行
kobject_uevent_env(&sdev->dev->kobj, KOBJ_CHANGE,envp);这个函数好像不能写吗?
playmud 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pottichu 的回复:]
另外 proc 目录好像只有读的接口
static inline struct proc_dir_entry *create_proc_entry(const char *name,
mode_t mode, struct proc_dir_entry *parent) { return NULL; }

并没有写入的接口。
[/Quote]
读写都可以啊
Wenxy1 2009-12-08
  • 打赏
  • 举报
回复
去查查书《Linux设备驱动程序》
pottichu 2009-12-08
  • 打赏
  • 举报
回复
另外 proc 目录好像只有读的接口
static inline struct proc_dir_entry *create_proc_entry(const char *name,
mode_t mode, struct proc_dir_entry *parent) { return NULL; }

并没有写入的接口。
pottichu 2009-12-08
  • 打赏
  • 举报
回复
然后我想在sys目录 下创建个类似reate_proc_entry创建个文件,然后将ping的状态写到里面,上层有个damn程序 去读这些值。我不知道如何实现 还请知道的大哥 帮下忙 谢谢
==========================================
如果有读写操作的话, 建议做个 ioctl 调用。
playmud 2009-12-08
  • 打赏
  • 举报
回复
通过proc是个不错的选择
pottichu 2009-12-08
  • 打赏
  • 举报
回复
sys 目录主要是用来反馈信息给用户的, 不是用来做数据交互的,
系统也没有提供这样的接口。

proc 下有现成的接口你为什么不用?
T-Quake 2009-12-08
  • 打赏
  • 举报
回复
晕死 我是问如何在sys下写 而不是proc proc我知道
pottichu 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 playmud 的回复:]
引用 3 楼 pottichu 的回复:
另外 proc 目录好像只有读的接口
static inline struct proc_dir_entry *create_proc_entry(const char *name,
mode_t mode, struct proc_dir_entry *parent) { return NULL; }

并没有写入的接口。

读写都可以啊
[/Quote]

恩。 刚才仔细看了一下 struct proc_dir_entry , 确实有写的接口。
T-Quake 2009-12-08
  • 打赏
  • 举报
回复
我不是想在proc下作这些 而是 想在sys下

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧