为什么说fb_info->node 是设备的次设备号




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))
            {
                ... 
            }
            .....
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值