转载时请注明出处和作者联系方式:http://blog.youkuaiyun.com/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>
microwindows代码分析 (二)screen driver显示驱动的架构
在microwin的代码中,很重要的一个部分就是screen driver显示驱动的部分,它的功能就是负责屏幕输出。
此部分代码是在drivers目录下,并以scr_为开头,我们比较感兴趣的一般是scr_x11.c和scr_fb.c两个部分。
一个是用来在x86 pc上使用的,一个是可以在嵌入系统中使用的。
在microwin的显示驱动的drivers/Makefile中,会根据外部config的设置来只选择使用一个驱动,如X11=Y的话,那么就只会编译scr_x11.c。
在具体每个screen driver中都定义一个SCREENDEVICE scrdev,它也就是microwin要使用到的一个全局的screen driver。
这个结构里主要包括了具体的Open,Close,GetScreenInfo,SetPalette,DrawPixel,FillRect,Blit,StretchBlit等函数实体,如X11_open, X11_close,X11_getscreeninfo,X11_drawpixel等。
同理,对framebuffer,drivers/scr_fb.c,它有一些具体的实现,如fb_open, fb_close, gen_getscreeninfo等。
所以,你自己如果需要增加一个自己的显示驱动的话,就类似上面的内容,写出自己的具体实现函数,从而就能很容易地将microwin porting到你的hardware平台上。
结构上,使用上面的SCREENDEVICE scrdev全局变量的一个好处就是各个具体实现分离,在上层调用上来说只需要关心统一的 SCREENDEVICE 接口即可。