SDIO块设备为什么不支持devfs

发布于 2020-03-04 16:43:05
兼容POSIX接口?

查看更多

关注者
0
被浏览
483
9 个回答
UUUX_7686
UUUX_7686 2020-03-04
或者说,device中的fops仅仅是为console设备准备的么?
flyboy
flyboy 2020-03-05
UUUX_7686 发表于 2020-3-4 17:22
或者说,device中的fops仅仅是为console设备准备的么?


这个不是的,SDIO块设备可能做的比较早,所以没有对接 fops。

不过fops对接也不难,楼主可以自己试着对接下,fal 里也有把 flash 对接到 fops 的代码,楼主可以参考:https://github.com/RT-Thread-packages/fal/blob/master/src/fal_rtt.c#L418
UUUX_7686
UUUX_7686 2020-03-05
明白,只是看到这里,不知道是否有什么特别考虑,所以问下。
UUUX_7686
UUUX_7686 2020-03-05
flyboy 发表于 2020-3-5 07:58
这个不是的,SDIO块设备可能做的比较早,所以没有对接 fops。

不过fops对接也不难,楼主可以自己试着对 ...


另外,看了下,由于devfs中未对read/write做POSIX处理, fal中对接了read/write也不生效的吧?
在master分支,devfs仅对接了open。
flyboy
flyboy 2020-03-05
UUUX_7686 发表于 2020-3-5 10:19
另外,看了下,由于devfs中未对read/write做POSIX处理, fal中对接了read/write也不生效的吧?
在master ...


不是的,devfs 里只对 open 做了处理是有它的设计在里面的。下面的代码就是做处理的代码。

#ifdef RT_USING_POSIX
if (device->fops)
{
/* use device fops */
file->fops = device->fops;
file->data = (void *)device;

/* use fops */
if (file->fops->open)
{
result = file->fops->open(file);
if (result == RT_EOK || result == -RT_ENOSYS)
{
return 0;
}
}
}
else
#endif


你可以看这句代码:
        /* use device fops */
file->fops = device->fops;

这里使用 device 的fops 接口替换了 devfs 的 fops 接口,所以,当你 open 完返回之后,下次再调用 read 的使用,就不用通过 devfs 的 fops 接口再转换一层了,直接调用的就是你驱动注册时实现的 fops 了。
UUUX_7686
UUUX_7686 2020-03-05
flyboy 发表于 2020-3-5 10:33
不是的,devfs 里只对 open 做了处理是有它的设计在里面的。下面的代码就是做处理的代码。




嗯。理解了。未注意这里,还以为都要通过devfs这里转一下。 谢谢答复!
UUUX_7686
UUUX_7686 2020-03-05
flyboy 发表于 2020-3-5 10:33
不是的,devfs 里只对 open 做了处理是有它的设计在里面的。下面的代码就是做处理的代码。




继续问一下,FAL中适配的代码(open)不需要调用rt_device_open么?
(FAL代码还没有看过,不熟悉)
UUUX_7686
UUUX_7686 2020-03-05
open为NULL,所以不需要调用了。
UUUX_7686
UUUX_7686 2020-03-12
flyboy 发表于 2020-3-5 07:58
这个不是的,SDIO块设备可能做的比较早,所以没有对接 fops。

不过fops对接也不难,楼主可以自己试着对 ...


看了下fal_rtt.c,想问下,为什么fal_rtt中对字符设备进行了对接,而对块设备却不做对接呢?有什么考虑么?

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览