struct fb_info
{
int node; //设备的次设备号
int flags;
struct mutex lock;
struct mutex mm_lock;
struct fb_var_screeninfo var; //可变参数
struct fb_fix_screeninfo fix; //固定参数
......
};
成员 :
int node; 设备的次设备号
次设备号由系统自动分配,递增的。实际上就是registered_fb[]中第一个空缺项的索引值。
#define FB_MAX 32
struct fb_info *registered_fb[FB_MAX]
所以,最大不会超过31
/*
向核心层注册一个framebuffer设备。
fb_info 每一个帧缓冲设备都对应一个fb_info
*/
int register_framebuffer(struct fb_info *fb_info)
{
int i;
/*
这个i,就是次设备号,
下面的代码会将registered_fb[]中第一个空缺项的索引值 赋值给这个i,
而这个索引值就是设备的次设备号
*/
...
/**
FB_MAX : 32
每注册一个framebuffer设备,num_registered_fb就递增一次。
*/
if (num_registered_fb == FB_MAX)
{
return -ENXIO;
}
....
/**
递增
*/
num_registered_fb++;
/**
找到registered_fb[]中第一个空缺项
为把fb_info放进去做准备
struct fb_info *registered_fb[32];
/dev/fb0 /dev/fb1 ..... /dev/fb31。
*/
for (i = 0 ; i < FB_MAX; i++)
{
if (!registered_fb[i])
{
break;
}
}
/*
【将次设备号赋值给node】
*/
fb_info->node = i;
....
/**
在类下创建设备。
在fbmem_init()中创建的类。
static int __init fbmem_init(void)
{
...
fb_class = class_create(THIS_MODULE, "graphics");
...
}
看这里的 MKDEV(FB_MAJOR, i)
*/
fb_info->dev = device_create(fb_class, fb_info->device,MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
if (IS_ERR(fb_info->dev))
{
...
}
.....
}
为什么说fb_info->node 是设备的次设备号
最新推荐文章于 2023-09-05 22:57:58 发布