文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>displaylink

displaylink

时间:2010-06-10  来源:49305054

DisplayLink Driver 分析

$(KERNENL)/drivers/staging/ udlfb/udlfb.c


一、概述:
    udlfb是usb接口显示器的驱动,从用户使用角度来看,它是一个frame buffer驱动,其中显存虚拟的,是内核空间的一片内存(用vmalloc分配的),然后通过usb总线将数据发送的usb显示器上,刷新屏幕的内容。

二、程序分析:
    首先,它是一个典型的usb驱动程序,在模块初始化时usb driver被注册:

    static struct usb_driver dlfb_driver = {
            .name = "udlfb",
            .probe = dlfb_probe,
            .disconnect = dlfb_disconnect,
            .id_table = id_table,
    };
    res = usb_register(&dlfb_driver);

    当usb显示器连接时,usb核心根据id_table表发现dlfb_driver可以驱动该设备,调用probe
函数。同样,当设备断开时候调用disconnect函数。

    在probe中主要做以下几件事情:
    1.典型usb驱动程序的做法,为该驱动数据结构(struct dlfb_data)分配空间,并设置相应字段,最后调用usb_set_intfdata(interface, dev_info)将私有数据设置到usb接口中;
    2.创建urb:usb_alloc_urb(0, GFP_KERNEL);
      初始化该urb:usb_fill_bulk_urb();
    3.准备注册frame buffer,首先发送请求到该接口的控制端点,获取一些显示器信息;
      典型的frame buffer驱动的做法,调用framebuffer_alloc()分配一个frame buffer对象(struct fb_info);初始化各种参数,分配显存等等;最终调用register_framebuffer()注册frame buffer驱动;     
      其中最为核心的是.fbops字段,它是对该frame buffer设备操作方法的集合;
      static struct fb_ops dlfb_ops = {
              .fb_setcolreg = dlfb_setcolreg,
              .fb_fillrect = dlfb_fillrect,
              .fb_copyarea = dlfb_copyarea,
              .fb_imageblit = dlfb_imageblit,
              .fb_mmap = dlfb_mmap,
              .fb_ioctl = dlfb_ioctl,
              .fb_release = dlfb_release,
              .fb_blank = dlfb_blank,
      };
    4.将显存全部涂成绿色,刷新到屏幕;
   
    dlfb_ops很多方法都是对显存的操作,修改完显存储后再通过urb发送到usb显示器设备上去,刷新屏幕。

三、总结:
    这个驱动是udlfb最简单的一个实现,我们暂时用的是一个优化后的版本。这个驱动结构上包含usb驱动和frame buffer驱动,比较清晰。其余代码便是主机与usb显示器的一些通信协议的细节,以及frame buffer的一些细节问题。
相关阅读 更多 +
排行榜 更多 +
哥布林弹球b服手游下载

哥布林弹球b服手游下载

休闲益智 下载
小马样式盒游戏下载

小马样式盒游戏下载

休闲益智 下载
异变小镇中文版下载安装

异变小镇中文版下载安装

冒险解谜 下载