最近在看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有关,但是由于水平有限,追踪源码没有找到结果
这和userspace调用内核函数有关,在userspace调用open、write等访问fb0的时候,会根据主设备号找到对应的file_operation
的open、write等_,
因为fb、fb0、fb1...
等都是一个主设备号,但只有一个fb定义了file_operation,
所以使用同一个接口。具体的代码流程还没有分析跟踪,等分析追踪完userspace
访问kernel的代码过程应该就能解决问题了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。