框架
1.注册一个framebuffer类。
2.注册一个主设备号,因为fb个数通常比较少,所以可以用老的接口统一注册。
3.为2中的注册实现通用的fops,注意这里是通用的,特殊的架构在通用的里面还是要调用专门fb注册时实现的操作接口。(参考下面)
4.提供统一的注册,卸载接口。
5.注册卸载中对一些应用层可设的参数提供一些attribute操作接口,比如分辨率,bpp,显示模式等。
6.为5中实现对应的show和store接口。
7.基本所有的store都需要对应用层设置的参数检查,通过之后,调用每个fb注册时专有的设置函数。这种函数就是把写的参数,写到真正的硬件寄存器。
static const struct file_operations fb_fops = {
.owner = THIS_MODULE,
.read = fb_read, /* 通用的什么都没做,如果特殊架构实现了,则优先使用架构自己的 */
.write = fb_write, /* 通用的写显存,如果特殊架构实现了,则优先使用架构自己的 */
.unlocked_ioctl = fb_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = fb_compat_ioctl,
#endif
.mmap = fb_mmap,
.open = fb_open,
.release = fb_release,
#ifdef HAVE_ARCH_FB_UNMAPPED_A