开发者社区> 问答> 正文

linux下一类字符设备使用同一个主设备号进行注册的一点疑惑?

最近在看framebuffer的内核源码:
在fbmem.c中有 register_chrdev(FB_MAJOR,"fb",&fb_fops)
这里的fb_fops应该就是上层访问的接口(write、read、mmap等操作).
在注册一个frambuffer设备的时候,会使用register_framebuffer,追踪可以看到
fb_info->dev = device_create(fb_class, fb_info->device,
MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
如果注册一个设备fb0,那么在访问fb0的时候应该是执行fb_fops的操作函数。
请问:它们是如何通过一个主设备号实现关联的?
我猜测和 device_create有关,但是由于水平有限,追踪源码没有找到结果

展开
收起
云栖技术 2016-06-06 09:17:24 2293 0
1 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

    这和userspace调用内核函数有关,在userspace调用open、write等访问fb0的时候,会根据主设备号找到对应的file_operation的open、write等_,
    因为fb、fb0、fb1...等都是一个主设备号,但只有一个fb定义了file_operation,所以使用同一个接口。具体的代码流程还没有分析跟踪,等分析追踪完userspace访问kernel的代码过程应该就能解决问题了。

    2019-07-17 19:27:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载