Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3125507
  • 博文数量: 685
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5303
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-19 14:17
个人简介

文章分类

全部博文(685)

文章存档

2015年(116)

2014年(569)

分类: Android平台

2014-09-20 14:26:47

原文地址:http://blog.chinaunix.net/uid-26009923-id-4044318.html
一. framebuffer中的notifier的使用
1. 初始化notifier_list
在drivers/video/fb_notify.c中
初始化notifier_list
  1. static BLOCKING_NOTIFIER_HEAD(fb_notifier_list);
2. fbcon向notifier_list注册
这个过程可以认为是客户端向服务器注册的过程
在drivers/video/console/fbcon.c中
module_init(fb_console_init);
--> fb_console_init

  1. static struct notifier_block fbcon_event_notifier = {
        .notifier_call    = fbcon_event_notify,   //主要的是这个回调函数
    };

  2. static int __init fb_console_init(void)
  3. {
  4.     //向notifier_list注册
  5.     fb_register_client(&fbcon_event_notifier);   
  6. }
module_init(fb_console_init);
--> fb_console_init
    --> fb_register_client
  1. int fb_register_client(struct notifier_block *nb)
  2. {
  3.     return blocking_notifier_chain_register(&fb_notifier_list, nb);
  4. }
3. s3cfb生成notifier msg,并广播
module_init(s3cfb_init);
   --> platform_driver_register(&s3cfb_driver);
         --> s3cfb_probe(struct platform_device *pdev)
            --> register_framebuffer
在drviers/video/fbmem.c中
  1. int register_framebuffer(struct fb_info *fb_info)
  2. {
  3.     ... //初始化fb_info后
  4.     event.info = fb_info;
  5.     lock_fb_info(fb_info);
  6.     //fb注册成功后,发送通知
  7.     fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
  8.     unlock_fb_info(fb_info);
  9.     return 0;
  10. }
4. fbcon接收msg并处理
在drivers/video/console/fbcon.c中的回调函数bcon_event_notify中
  1. static int fbcon_event_notify(struct notifier_block *self, unsigned long action, void *data)
  2. {
  3.     struct fb_event *event = data;
  4.     struct fb_info *info = event->info;
  5.     switch(action) {
  6.     case FB_EVENT_FB_REGISTERED:
  7.         ret = fbcon_fb_registered(info);   //处理
  8.         break;   
  9.     }
  10. }


阅读(843) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~